工作使用rose-core框架说明
程序员文章站
2022-06-09 13:29:29
...
rose-core 框架数据库操作说明
1.介绍
rose-core包含一个数据库ORM框架,支持同时连接多个数据库,工程是基于Mysql开发的,目标支持Mysql、Oracle、SQL Server三种数据库。
2.软件架构
在net.sf.rose.jdbc包下主要包括service、query、dao、database、bean这几个包。功能分别如下:
- bean包是数据库实体类与数据库表结构的映射关系的注解配置。
- service包负责数据库数据库连接和表结构与实体类映射关系的元数据管理。
- query包负责数据库执行的SQL语句拼接。
- dao包负责数据库操作SQL语句的执行。
- database负责数据库表结构的更新。
3.启动过程
- 调用BootStrap类的initial方法。
- 读取并加载配置:sys.xml,如果配置文件不存在,就创建空的默认配置文件。
- 加载工程所有静态文件的存储路径,包括Web项目的Http静态文件访问路径。
- 初始化数据库连接池,有多个就加载多个。
- 读取并加载数据库SQL语句文件sql-*.properties。
- 读取并加载数据库表结构配置文件database-*.ini,如果不存在就扫描实体类生成此配置文件。
- 如果设置了需要更新数据库表结构,系统将更新数据库表结构,系统默认不删除表字段。
- 遍历执行所有已注册的开机启动类。
4.使用说明
- 实体类映射关系说明
@Table(name="PERSON", description="用户基础数据表")
@View(name="PERSON_VIEW", description="用户视图")
@View(name="PERSON_TEST_VIEW", description="用户测试视图")
public class PersonBean extends ModelBean {
@Column(name = "PERSON_ID", pk = true, type = Type.定长文本, canNull = false, description = "用户编码", size = 32, policy = "UUID")
private String personID;
@Column(name = "PERSON_NAME", type = Type.变长文本, description = "用户名称", canNull = false, size = 50)
private String personName;
@Column(name = "PASSWORD", type = Type.变长文本, description = "密码", size = 150)
private String password;
@Column(name = "BIRTHDAY", type = Type.日期时间, description = "生日")
private Timestamp birthday;
@Column(name = "DEPART_ID", type = Type.定长文本, description = "教师编码", size = 32)
private String departID;
@Column(name = "DEPART_NAME", type = Type.变长文本, description = "部门名称", canNull = false, size = 50)
private transient String departName;
- 一个类最多对应于一张数据库表,可以对应多个数据库视图。注解@Table有三个属性,其中name是必填项,对应数据库的表名。database指定表所在的数据库名称,不指定就用数据库配置文件中指定的默认数据名。注解@View的参数与@Table一致。
- 数据库字段和类的属性的绑定在类属性定义的注解上,用@Column定义。如果属性没有使用@Column,那这个属性与数据库字段无关;如果使用了@Column,那这个属性与数据库中的某字段对应;如果属性使用了transient,那么这个字段不参与数据库更新,这种方式对视图查询有用。
@Column的定义属性较多。主要有name(字段名称,不填就与属性名同名)、type(数据类型)、size(字段长度,对字符串、小数等有效)、pk(是否为主键)。 - 如果类继承了ModelBean类,那么表结构会增加createUser、createTime、updateUser、updateTime这4个常用字段。
- 数据库查询代码示例
Service service = new Service();
BeanDAO dao = new BeanDAO(service);
BeanSQL query = dao.getQuerySQL();
PageBean page = new PageBean();
page.setpageSize(6);
page.setPageIndex(2);
query.setPage(page);
query.setEntityClass(PersonBean.class);
query.createSql();
List list = dao.list();
service.close();
以上是数据库分页查询代码
- 数据库更新代码示例
Service service = new Service();
BeanDAO dao = new BeanDAO(service);
BeanSQL query = dao.getQuerySQL();
PersonBean p = new PersonBean();
p.setPersonName("hellen");
p.setAge(20);
query.createSaveSql(p);
dao.update();
service.commit();
service.close();
以上是数据库新增用户操作代码
- 复杂查询代码示例
Service service = new Service();
BeanDAO dao = new BeanDAO(service);
BeanSQL query = dao.getQuerySQL();
Map
- userName是类的属性名。
- userName_link是与userName对应的查询条件。如果不存在使用默认值=;如果是like,那么就是"like ‘fgg%’"; 如果是like all,那么就是"like ‘%fgg%’"。
- age_from、age_to与类属性的age绑定,表示起止。age_from_link、age_to_link分别表示拼SQL文使用的比较符。
- birthday_from、birthday_to是日期型,最好能同时提供birthday_format日期转换格式参数。如果不提供系统会内置的几个常用日期格式匹配,匹配上就转换成功。
- 直接使用SQL代码示例
Service service = new Service();
BeanDAO dao = new BeanDAO(service);
BeanSQL query = dao.getQuerySQL();
query.setSQL("select * from person where userName=?");
query.addParameter("helen");
query.setEntityClass(PersonBean.class);
PersonBean bean = dao.get();
service.close();
- 使用SQL替换代码示例
Service service = new Service();
BeanDAO dao = new BeanDAO(service);
BeanSQL query = dao.getQuerySQL();
query.setSQL("select * from person where userName=#userName#");
Map
- 不使用实体类代码示例
Service service = new Service();
MapDAO dao = new MapDAO(service);
MapSQL query = dao.getQuerySQL();
query.setSQL("select * from person where userName=#userName#");
Map
5.配置文件说明
- sys.xml配置文件说明
- sys.xml文件存放的位置说明:程序启动时首先检查系统定义的路径下是否存在,linux操作系统是:/usr/local/system;windows操作系统是C:\system。如果路径不存在就使用System.getProperty(“user.dir”)即当前工程所在路径作为配置文件的所在路径,如果不存在则不能正常启动。
- database支持配置多个数据库连接,databaseName定义就是程序中@Table注解要使用的数据库名称,必须保持一致。参数updateDatabase默认为false,设置为true后,程序重启时会将配置文件中定义的表结构与数据库中的表结构对比,然后更新数据库表结构,启动成功后系统还会将此值设为false。参数updateDeleteField默认为false,设置为true后,系统在更新表结构时会将没用的表字段删除掉(慎用)。参数defaultDatabase为true的数据库是系统默认操作的数据库。设置多了只有一个生效。
- location设计为了Web项目使用的,与spring boot中配合使用,path指定实际服务器上的文件存储路径,mapping指定URL访问时的路径。这样可以让前后端分离开发,前端的代码文件不一定要在后端的java工程目录下。同时图片等其它静态文件也在此配置。
- bootStartMap配置需要开机启动程序代码类,只要实现net.sf.rose.boot.BootStart这个接口就可以。然后在配置文件中bootStartMap这个容器下添加这个类的相关属性配置即可。也可以通过修改bootStartNeedUpdate=true,然后重新启动程序,框架将重新扫描更新开机启动的类参数设置。
- mysql-data-type等是数据字段的类型定义常量,平时不用修改。
- 外部SQL文件说明
- 为了更好地支持多种数据库,以及不同数据库间能够无缝切换,开发者有必要将系统定义的视图及代码中使用的SQL语句在外部文件中定义,如果不同的数据库SQL语句有差异,则需要定义多份。为此系统定义了sql-mysql.properties,sql-oracle.properties,sql-sqlserver.properties三种数据库的外部SQL定义文件。
- 为了支持SQL文件能够运行期读写,读写工具类是自己写的,需要开发人员遵循固定格式。1、文件中最好不存在空行(第一行,中间某一行)。2、一段SQL语句由说明、SQL文名和SQL正文三部分组成。第一行以#号开头,后面是中文说明;第二行内容是:SQL文名=SQL正文。其中SQL正文可以换行写,以下一个#号为终止。
#用户视图
SYS_USER_VIEW=select t1.*,t2.departName,t3.roleName,t4.userName as leaderName,
t5.departName as orgName from SYS_USER t1
left join SYS_DEPARTMENT t2 on t1.departID=t2.departID
left join SYS_ROLE t3 on t1.roleID=t3.roleID
left join SYS_USER t4 on t1.leaderID=t4.userID
left join SYS_ORG t5 on t1.orgID=t5.departID
- 数据库表结构文件说明
- 此文件由程序自动扫描实体类生成或者通过前端Web控制台编辑生成,文件格式是java自带的序列化文件格式。version是由double存储的,初始版本文件名为database-1-0.ini,第二版本为database-1-01.ini,每一版本递增0.01。
参与贡献
- Fork 本仓库
- 新建 Feat_xxx 分支
- 提交代码
- 新建 Pull Request
码云特技
- 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
- 码云官方博客 blog.gitee.com
- 你可以 https://gitee.com/explore 这个地址来了解码云上的优秀开源项目
- GVP 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
- 码云官方提供的使用手册 https://gitee.com/help
- 码云封面人物是一档用来展示码云会员风采的栏目 https://gitee.com/gitee-stars/
上一篇: PHP 生成唯一的激活码
推荐阅读
-
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
-
微信门户开发框架-使用指导说明书(2)--基于框架的开发过程
-
微信门户开发框架-使用指导说明书
-
JS的框架Polymer中的dom-if和is属性使用说明
-
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
-
基于PHP Web开发MVC框架的Smarty使用说明
-
Spads 工作组为 Cikers 项目编写的密码库使用说明
-
ruoyi(若依)框架使用说明(前后端分离)
-
(二)surging 微服务框架使用系列之surging 的准备工作consul安装
-
(一)surging 微服务框架使用系列之surging 的准备工作rabbitmq安装