工作开发手册

开发手册

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+ u s e r n a m e username username,{yyyyMMdd} - 日期必须在有序数字前,因为有序数字的计数器以日期为基准,[0001] - 有序数字,(****) - 无序数字,EN - 固定字符, u s e r n a m e username username - 变量名
  • 如果类继承了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。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值