Guns代码生成简明教程

2019 Java 开发者跳槽指南.pdf (吐血整理)….>>>


1、新建业务表,如新建一个oly_test表,做代码生成测试,只是为了说明生成代码方法,字段比较简单

Guns代码生成简明教程

2、登录系统,打开代码生成页面,填写生成信息,如下图为示例

Guns代码生成简明教程


作者信息,随便填,业务名称填写表对应的业务,模块名即为生成后的包名,然后勾选要生成的表以及需要生成的模块,表前缀改为你数据表的前缀,这样生成的实体类就不会带前缀。


选择好后点击生成,可以看到基本的代码已经生成成功。


3、我们在Java包下找到生成的sql文件

Guns代码生成简明教程


这里是为这个生成的模块创建菜单的语句,直接放在MySQL中运行即可,会把测试模块的菜单插入sys_menu菜单表中。


4、运行SQL文件成功后,我们打开 系统管理 -> 角色管理 ,给当前的登录的超级管理员,增加刚才新增的权限,这样才会看到我们刚刚生成的页面。

Guns代码生成简明教程


5、点击保存后,重启项目,再次进入项目,我们发现生成成功了

Guns代码生成简明教程


问题一生成代码时包没有按预期生成到指定位置(路径)

修改模块 guns-generator

找到WebGeneratorConfig类,修改生成代码包的位置

Guns代码生成简明教程


原代码中的生成策略如上图所示,我们实际中生成代码如果不放在modular.system目录下时,可以修改这里。


如,我新建一个test模块,修改方法如下:

packageConfig.setEntity(genQo.getProjectPackage() + ".modular.test.model");
packageConfig.setMapper(genQo.getProjectPackage() + ".modular.test.dao");
packageConfig.setXml(genQo.getProjectPackage() + ".modular.test.dao.mapping");


这样,一个功能的相关代码就都会在一个模块下了,符合我们的习惯

Guns代码生成简明教程


问题二,Guns框架多表查询结果展示方法

Guns开源框架中对于多表查询的字段展示,使用了包装类,查询结果在返回给前端页面展示时走了一下包装类,在包装类中做主表外其他表字段的查询,最后通过map以键值对的方式赋值。


感觉这种方法挺好的,开发中可以先不考虑很多,一股脑的把单表查询全部做了,需要关联什么在包装类中改,也貌似符合开闭原则,废话不多说,我们通过一个例子来看看他是怎么做的。


首先是映射xml文件,查询的语句不再使用默认生成的BaseResultMap,而是普通的map

Guns代码生成简明教程


我们再看对应的dao接口

Guns代码生成简明教程


接着是包装类,由我们自己新建一个


public class ProjectInfoWarpper extends BaseControllerWarpper {

public ProjectInfoWarpper(List<Map<String, Object>> list) {
super(list);
}

@Override
public void warpTheMap(Map<String, Object> map)
{
map.put("projectName", ConstantFactory.me().getProjectNameById((Integer) map.get("project_id")));
}
}


ConstantFactory.me().getProjectNameById((Integer) map.get("project_id"))这句的意思是通过id查询出工程的名称,需要在IConstantFactory中定义接口,如下:

Guns代码生成简明教程


接口的具体实现:

Guns代码生成简明教程


最后,Controller中,我们在查询结果返回给客户端的时候,会调用这个包装类

Guns代码生成简明教程


这样就可以很方便的在不改动xml及实体类的情况下轻松的实现多表查询结果的展示。