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

工作开发手册

程序员文章站 2022-06-09 13:31:54
...

开发手册

1.框架

使用前后端分离模式,前端采用纯Html模式,便于随时修改更新;后端采用SpringBoot开发框架,使用rose处理数据库映射关系及操作。

2.前端MiniUI框架

jQuery MiniUI - 专业WebUI控件库。
它能缩短开发时间,减少代码量,使开发者更专注于业务和服务端,轻松实现界面开发,带来绝佳的用户体验。

2.1.控件示例

  1. 下拉选择框

<input name="status" class="mini-combobox" data="" textField="text" valueField="id" value="1"/>
  • data定义字典的数据集,可以直接写数据结构,如:[{id:1,text:‘正常’},{id:2,text:‘封存’}];也可以与js代码块,如:common.dic(‘onJobState’);
  • textField对应数据集中取来用于显示的字段名;
  • valueField对应数据集中取来用于赋值的字段名;
  • value是控件的默认值;
  1. service包负责数据库数据库连接和表结构与实体类映射关系的元数据管理。
  2. query包负责数据库执行的SQL语句拼接。
  3. dao包负责数据库操作SQL语句的执行。
  4. 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;
  • 一个类只能对应于一张数据库表,可以对应0~n个数据库视图。注解@Table有三个属性,其中name是必填项,对应数据库的表名。database指定表所在的数据库名称,不指定就用数据库配置文件中指定的默认数据名。注解@View的参数与@Table一致,特别地name对应的是数据库的一个视图名。
  • 数据库字段和类的属性的绑定在类属性定义的注解上,用@Column定义。如果属性没有使用@Column,那这个属性与数据库字段无关;如果使用了@Column,那这个属性与数据库中的某字段对应;如果属性使用了transient,那么这个字段不参与数据库更新,这种方式应用于视图或查询。
  • @Column的定义属性较多。主要有name(字段名称,不填就与属性名同名)、type(数据类型)、size(字段长度,对字符串、小数等有效)、pk(是否为主键)。policy是主键生成策略,通常可设置为UUID,是32位长的随机字符串;也可以设置成有意义的字符串或数字,例:{yyyyMMdd}+[0001]+(*****)+EN+usernameusername,{yyyyMMdd} - 日期必须在有序数字前,因为有序数字的计数器以日期为基准,[0001] - 有序数字,(****) - 无序数字,EN - 固定字符,usernameusername - 变量名
  • 如果类继承了ModelBean类,那么表结构会增加createUser、createTime、updateUser、updateTime这4个常用字段。
  1. 数据库操作类说明
    DAO层就做三件事,拼接SQL语句,使用数据库连接,执行SQL语句。所以本框架分三个包协作完成。
  • 第一个是service包,负责管理数据库连接。主要就是Service类,因为逻辑主要由框架完成,用户无需太过关注此类。
  • 第二个是dao包,负责数据库操作的执行。总共有一个抽象父类GenericDAO和三个具体的实现类BeanDAO,MapDAO,SimpleDAO共四个类。面向对象编程一般使用 BeanDAO。
    • 抽象类 GernericDAO 实现了三个子类共通的方法和接口定义。
    • BeanDAO 类以面向对象的角度完成了对 DAO 接口的实现。
    • MapDAO 类以基于键值对的数据结构完成了对 DAO 接口的实现。
    • SimpleDAO 类是最简洁的 DAO 操作的实现。
  • 第三个query包,负责拼接SQL语句。 dao包中的类负责数据库操作的执行,query包负责数据库操作的数据准备,提供SQL语句和参数。此包中的类与dao包中的类一一对应。
    • QuerySQL 提供了最基本的方法,它不是抽象类,所以最简单地,用户只要调用setSQL提供一条数据库操作的SQL语句,就完成了拼接SQL的操作。
    • BeanSQL 这个继承类以面向对象的角度提供了丰富的数据库查询及更新SQL语句的生成方法。此类与BeanDAO 配套使用。
    • MapSQL 这个继承类以键值对的角度提供了数据库查询及更新SQL语句的生成方法。此类与 MapDAO 配套使用。
    • SimpleSQL 这个继承类提供了数据库查询及更新SQL语句的生成方法。此类与 SimpleDAO 配套使用。

至此,主要设计理念及语法已经说明清楚了。

  1. 数据库操作代码示例

        Service service = new Service();
        BeanDAO dao = new BeanDAO(service);
        BeanSQL query = dao.getQuerySQL();
        query.setEntityClass(PersonBean.class);
        List list = dao.list();
        service.close();

功能:全表查询。
SQL:select * from PERSON
参数:无


        Service service = new Service();
        BeanDAO dao = new BeanDAO(service);
        BeanSQL query = dao.getQuerySQL();
        query.setEntityClass(PersonBean.class);
        query.createSql("784533");
        PersonBean bean = dao.load();
        service.close();

功能:利用主键的查询代码。
SQL:select * from PERSON where personID=?
参数:784533


        Service service = new Service();
        BeanDAO dao = new BeanDAO(service);
        BeanSQL query = dao.getQuerySQL();
        query.setEntityClass(PersonBean.class);
        query.createSql("personName", "hellen");
        PersonBean bean = dao.get();
        service.close();

功能:利用某个属性为条件的查询代码。
SQL:select * from PERSON where personName=?
参数:hellen


        Service service = new Service();
        BeanDAO dao = new BeanDAO(service);
        BeanSQL query = dao.getQuerySQL();
        query.setEntityClass(PersonBean.class);
        PersonBean bean = new PersonBean();
        bean.setSex(1);
        bean.setAge(10);
        query.createSql(bean);
        List list = dao.list();
        service.close();

功能:利用实体类为条件的查询代码。
SQL:select * from PERSON where sex=? and age=?
参数:1,10


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

功能:数据库分页查询代码
SQL:select * from PERSON limit 2,6
参数:无


        Service service = new Service();
        BeanDAO dao = new BeanDAO(service);
        BeanSQL query = dao.getQuerySQL();
        Map

功能:数据库分页查询代码
SQL:select * from user where userName like ? and (age>? and age<=?) and (birthday>=? and birthday<?)
参数:“fgg%”,20,20, “2013-06-25”,“2014-06-25”
说明:

  • 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日期转换格式参数。如果不提供系统会内置的几个常用日期格式匹配,匹配上就转换成功。

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

功能:数据库更新代码
SQL:insert into PERSON(“personID”,“personName”,“age”) values(?,?,?);
参数:784534,hellen,20


        Service service = new Service();
        BeanDAO dao = new BeanDAO(service);
        BeanSQL query = dao.getQuerySQL();
        PersonBean p = new PersonBean();
        p.setPersonID("784533");
        p.setPersonName("hellen");
        p.setAge(20);
        query.createSaveSql(p);
        dao.update();
        service.commit();
        service.close();

功能:数据库更新代码
SQL:update PERSON set age=?,personName=? where personID=?
参数:20,hellen,784533


        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代码
SQL:select * from person where userName=?
参数:helen


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

功能:直接使用SQL代码
SQL:select * from person where userName=?
参数:fgg


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

功能:直接使用SQL代码
SQL:select * from person where userName=?
参数:fgg

至此基本的使用方法已经说明清楚了,更多的组合方法请参考API文档。

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。
相关标签: 工作问题