欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

工作使用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这几个包。功能分别如下:

  1. bean包是数据库实体类与数据库表结构的映射关系的注解配置。
  2. service包负责数据库数据库连接和表结构与实体类映射关系的元数据管理。
  3. query包负责数据库执行的SQL语句拼接。
  4. dao包负责数据库操作SQL语句的执行。
  5. database负责数据库表结构的更新。

3.启动过程

  1. 调用BootStrap类的initial方法。
  2. 读取并加载配置:sys.xml,如果配置文件不存在,就创建空的默认配置文件。
  3. 加载工程所有静态文件的存储路径,包括Web项目的Http静态文件访问路径。
  4. 初始化数据库连接池,有多个就加载多个。
  5. 读取并加载数据库SQL语句文件sql-*.properties。
  6. 读取并加载数据库表结构配置文件database-*.ini,如果不存在就扫描实体类生成此配置文件。
  7. 如果设置了需要更新数据库表结构,系统将更新数据库表结构,系统默认不删除表字段。
  8. 遍历执行所有已注册的开机启动类。

4.使用说明

  1. 实体类映射关系说明

@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个常用字段。
  1. 数据库查询代码示例

        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();

以上是数据库分页查询代码

  1. 数据库更新代码示例

        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();

以上是数据库新增用户操作代码

  1. 复杂查询代码示例

        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日期转换格式参数。如果不提供系统会内置的几个常用日期格式匹配,匹配上就转换成功。
  1. 直接使用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();
  1. 使用SQL替换代码示例

        Service service = new Service();
        BeanDAO dao = new BeanDAO(service);
        BeanSQL query = dao.getQuerySQL();
        query.setSQL("select * from person where userName=#userName#");
        Map
  1. 不使用实体类代码示例

        Service service = new Service();
        MapDAO dao = new MapDAO(service);
        MapSQL query = dao.getQuerySQL();
        query.setSQL("select * from person where userName=#userName#");
        Map

5.配置文件说明

  1. 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等是数据字段的类型定义常量,平时不用修改。
  1. 外部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 

  1. 数据库表结构文件说明
  • 此文件由程序自动扫描实体类生成或者通过前端Web控制台编辑生成,文件格式是java自带的序列化文件格式。version是由double存储的,初始版本文件名为database-1-0.ini,第二版本为database-1-01.ini,每一版本递增0.01。

参与贡献

  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request

码云特技

  1. 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
  2. 码云官方博客 blog.gitee.com
  3. 你可以 https://gitee.com/explore 这个地址来了解码云上的优秀开源项目
  4. GVP 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
  5. 码云官方提供的使用手册 https://gitee.com/help
  6. 码云封面人物是一档用来展示码云会员风采的栏目 https://gitee.com/gitee-stars/
相关标签: 工作问题