工作开发手册
开发手册
1.框架
使用前后端分离模式,前端采用纯Html模式,便于随时修改更新;后端采用SpringBoot开发框架,使用rose处理数据库映射关系及操作。
2.前端MiniUI框架
jQuery MiniUI - 专业WebUI控件库。
它能缩短开发时间,减少代码量,使开发者更专注于业务和服务端,轻松实现界面开发,带来绝佳的用户体验。
2.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是控件的默认值;
- 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;
- 一个类只能对应于一张数据库表,可以对应0~n个数据库视图。注解@Table有三个属性,其中name是必填项,对应数据库的表名。database指定表所在的数据库名称,不指定就用数据库配置文件中指定的默认数据名。注解@View的参数与@Table一致,特别地name对应的是数据库的一个视图名。
- 数据库字段和类的属性的绑定在类属性定义的注解上,用@Column定义。如果属性没有使用@Column,那这个属性与数据库字段无关;如果使用了@Column,那这个属性与数据库中的某字段对应;如果属性使用了transient,那么这个字段不参与数据库更新,这种方式应用于视图或查询。
- @Column的定义属性较多。主要有name(字段名称,不填就与属性名同名)、type(数据类型)、size(字段长度,对字符串、小数等有效)、pk(是否为主键)。policy是主键生成策略,通常可设置为UUID,是32位长的随机字符串;也可以设置成有意义的字符串或数字,例:{yyyyMMdd}+[0001]+(*****)+EN+,{yyyyMMdd} - 日期必须在有序数字前,因为有序数字的计数器以日期为基准,[0001] - 有序数字,(****) - 无序数字,EN - 固定字符, - 变量名
- 如果类继承了ModelBean类,那么表结构会增加createUser、createTime、updateUser、updateTime这4个常用字段。
- 数据库操作类说明
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 配套使用。
至此,主要设计理念及语法已经说明清楚了。
- 数据库操作代码示例
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.配置文件说明
- 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。
上一篇: 怎么把&开头的编码转为中文
下一篇: Jquery中ready