JFinal-layui v1.2.3 发布,极速开发企业应用系统

琴海森林
 琴海森林
发布于 2019年04月04日
收藏 32

JFinal+layui 极速开发企业应用管理系统,是以 JFinal+layui 为核心的企业应用项目架构,利用 JFinal 的特性与 layui 完美结合,达到快速启动项目的目的。让开发更简单高效,即使你不会 layui,也能轻松掌握使用。

此次更新最主要是为了解决开发者对不同数据库的需要问题,所以优化了BaseService底层方法,能够适应不同的数据库问题,以及用户管理因为group by 的语法不兼容问题,都通过此次优化彻底解决了,开发者可以很顺利的根据自己的数据库配置轻松的运行本系统,不需要修改SQL,非常方便。

v1.2.3 更新内容:
1、BaseService新增getDb()方法,满足多数据源情况下,做到共享BaseService,同时,分页使用jfinal底层的分页方法,所以可以兼容多数据库使用问题:

/**
	 * 指定数据源,多数据源情况下使用<br/>
	 * 列如oracle数据源别名为oracle,在service重写该方法:
	 * <pre>
	 * @Override
	 * public String getDb(){
	 *	return "oracle";
	 * }
	 * </pre>
	 * @return 若return null,则使用主数据源
	 * @author QinHaiLin
	 * @date 2019年3月13日
	 */
	public String getDb(){
		return null;
	}

public List<Record> queryForList(String sql) {
		if(getDb()!=null){
			return Db.use(getDb()).find(sql);
		}
		return Db.find(sql);
	}
	
	public List<Record> queryForList(String sql,Object...object) {
		if(getDb()!=null){
			return Db.use(getDb()).find(sql,object);
		}
		return Db.find(sql,object);
	}

	private Grid getGrid(int pageNumber,int pageSize,String sql,Object... paras){
		SqlPara sqlPara=new SqlPara().setSql(sql);
		for(int i=0;i<paras.length;i++){
			sqlPara.addPara(paras[i]);
		}
		
		if(getDb()!=null){
			Page<Record> page=Db.use(getDb()).paginate(pageNumber, pageSize, sqlPara);
			return new Grid(page.getList(), pageNumber, pageSize, page.getTotalRow());
		}
		
		Page<Record> page=Db.paginate(pageNumber, pageSize, sqlPara);
		return new Grid(page.getList(), pageNumber, pageSize, page.getTotalRow());
	}
	
	private Grid getGrid(int pageNumber,int pageSize,String sql){
		SqlPara sqlPara=new SqlPara().setSql(sql);
		if(getDb()!=null){
			Page<Record> page=Db.use(getDb()).paginate(pageNumber, pageSize, sqlPara);
			return new Grid(page.getList(), pageNumber, pageSize, page.getTotalRow());
		}
		Page<Record> page=Db.paginate(pageNumber, pageSize, sqlPara);
		return new Grid(page.getList(), pageNumber, pageSize, page.getTotalRow());
	}

2、用户默认分配组织机构部门关系,避免部门ID为空的用户关联查询数据重复,这样就可以去掉了用户管理部门关联查询时group by不兼容问题。

INSERT INTO sys_org VALUES ('sys', 'sys', '', '', '组织机构', '系统管理员', NULL, NULL, NULL, NULL, NULL, 1);
public Grid page(int pageNumber, int pageSize, Record record) {
		Record rd = new Record();
		rd.set("a.user_code like", record.getStr("userCode"));
		rd.set("a.user_name like", record.getStr("userName"));
		rd.set("a.sex=", record.getStr("sex"));
		String sql=Db.getSql("core.getUserList");
		String orgId=record.getStr("orgId");
		
		//部门用户列表
		String type=record.getStr("type");
		if("org".equals(type)){
			
			StringBuffer sbf=new StringBuffer();
			sbf.append("'").append(orgId).append("'");		
			String orgIds=orgService.getIdsByOrgId(orgId,sbf);
			
			sql=Db.getSql("core.getOrgUserList").replace("?", orgIds);
            //return queryForList(sql,pageNumber, pageSize, rd, "group by a.id");
			return queryForList(sql,pageNumber, pageSize, rd, null);			
		}
		//用户管理列表
		rd.set("a.org_id=", orgId);
        //return queryForList(sql,pageNumber, pageSize, rd, "group by a.id");
		return queryForList(sql,pageNumber, pageSize, rd, null);
	}

3、BaseController导出方法优化,调整个别参数,避免重载方法误用问题。

/**
	 * 文件名放前面,避免误用
	 * @param fileName
	 * @param title
	 * @param sql
	 * @param paras
	 */
	@NotAction
	public void exportExcel(String fileName, String[] title, String sql, Object... paras) {
		fileService.exportExcelxlsx(getResponse(), title, fileName, sql, paras);
	}
	@NotAction
	public void exportExcel(String[] title, String sql, Object... paras) {
		fileService.exportExcelxlsx(getResponse(), title, null, sql, paras);
	}

4、数据库字段名统一配置小写,避免在oracle数据库下前端修改字段名。

// 配置属性名(字段名)大小写,true:小写,false:大写,统一小写,切换oracle数据库的时候可以不用改页面字段
		arp.setContainerFactory(new CaseInsensitiveContainerFactory(true));

 

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:JFinal-layui v1.2.3 发布,极速开发企业应用系统
加载中

精彩评论

琴海森林
琴海森林

引用来自“杜福忠”的评论

getDb() 这个方法最好不要返回只是字符串, 比较友好的是直接返回 DbPro, 也就是 在getDb()里面写Db.use()
, 如果一定要字符串的话,建议是增加 getDbConfigName() , 这样子:neckbeard:
用这个方法getDbPro()封装就可以了,既方便外部实现,也节省内部代码两,感谢杜哥的建议❤
private DbPro getDbPro(){
    if(getDb()!=null){
      return Db.use(getDb());
    }
    return Db.use();
  }
杜福忠
杜福忠
getDb() 这个方法最好不要返回只是字符串, 比较友好的是直接返回 DbPro, 也就是 在getDb()里面写Db.use()
, 如果一定要字符串的话,建议是增加 getDbConfigName() , 这样子:neckbeard:
叫我刀刀
叫我刀刀
坐等 nutz-layui

最新评论(7

琴海森林
琴海森林

引用来自“杜福忠”的评论

getDb() 这个方法最好不要返回只是字符串, 比较友好的是直接返回 DbPro, 也就是 在getDb()里面写Db.use()
, 如果一定要字符串的话,建议是增加 getDbConfigName() , 这样子:neckbeard:
用这个方法getDbPro()封装就可以了,既方便外部实现,也节省内部代码两,感谢杜哥的建议❤
private DbPro getDbPro(){
    if(getDb()!=null){
      return Db.use(getDb());
    }
    return Db.use();
  }
琴海森林
琴海森林

引用来自“杜福忠”的评论

getDb() 这个方法最好不要返回只是字符串, 比较友好的是直接返回 DbPro, 也就是 在getDb()里面写Db.use()
, 如果一定要字符串的话,建议是增加 getDbConfigName() , 这样子:neckbeard:

引用来自“琴海森林”的评论

这样外部实现就不方便了,你返回这个对象也是要精准的configName才能找到这个对象

引用来自“杜福忠”的评论

我看getDb()只是做了获取configName这个动作, 而代码中的例子均使用if(getDb()!=null) 这样子的写法, 如果getDb()返回的是DbPro那么代码里面的if 判断都是不在需要的,节约代码量, 如果业务需要if 取不同的DbPro, 那么也只需要在 getDb()里面写了。 当然也只是建议
其实你那样的是比较好点,我考虑比较多是用户使用的感受吧,按照最简单的来。😄
杜福忠
杜福忠

引用来自“杜福忠”的评论

getDb() 这个方法最好不要返回只是字符串, 比较友好的是直接返回 DbPro, 也就是 在getDb()里面写Db.use()
, 如果一定要字符串的话,建议是增加 getDbConfigName() , 这样子:neckbeard:

引用来自“琴海森林”的评论

这样外部实现就不方便了,你返回这个对象也是要精准的configName才能找到这个对象
我看getDb()只是做了获取configName这个动作, 而代码中的例子均使用if(getDb()!=null) 这样子的写法, 如果getDb()返回的是DbPro那么代码里面的if 判断都是不在需要的,节约代码量, 如果业务需要if 取不同的DbPro, 那么也只需要在 getDb()里面写了。 当然也只是建议
琴海森林
琴海森林

引用来自“杜福忠”的评论

getDb() 这个方法最好不要返回只是字符串, 比较友好的是直接返回 DbPro, 也就是 在getDb()里面写Db.use()
, 如果一定要字符串的话,建议是增加 getDbConfigName() , 这样子:neckbeard:
这样外部实现就不方便了,你返回这个对象也是要精准的configName才能找到这个对象
杜福忠
杜福忠
getDb() 这个方法最好不要返回只是字符串, 比较友好的是直接返回 DbPro, 也就是 在getDb()里面写Db.use()
, 如果一定要字符串的话,建议是增加 getDbConfigName() , 这样子:neckbeard:
Coffee_M
Coffee_M
支持
叫我刀刀
叫我刀刀
坐等 nutz-layui
返回顶部
顶部