这里用一个简单的案例,描述了如何开发一个模块。
通过如下途径了解需求
示例
DROP TABLE IF EXISTS wk_student;create table wk_student (student_id BIGINT unsigned NOT NULL AUTO_INCREMENT COMMENT '学生id',student_name varchar(255) NOT NULL COMMENT '学生姓名',student_age int COMMENT '学生年龄',student_sex int COMMENT '学生性别',gmt_create DATETIME DEFAULT CURRENT_TIMESTAMP NULL COMMENT '记录创建时间',gmt_modified DATETIME DEFAULT CURRENT_TIMESTAMP NULL COMMENT '记录修改时间',PRIMARY KEY (student_id),UNIQUE KEY `wk_student_unique` (`student_name`)) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8 COMMENT='学生表';
先在一个测试库上测试一下是否有语法错误。
如果在项目中使用了 flyway 的版本控制,那么还要麻烦一点。文件需要放在 db/migration 目录下
V1__Create_student_table.sql
使用步骤如下
修改config.properties
,主要修改的内容如下:
在idea的Terminal中
执行:
#执行下面的命令./gradlew gen2
生成的文件在log
,系统会先删除上次生成的代码,避免重复生成。
生成完毕后,建议去log
目录中检查一下代码。
生成的代码有:
将生成的代码复制到项目中,执行build
,在代码中有自带的单元测试脚本,如果通过就表示脚本没有问题。
尽量不要修改自动生成的代码
mapper
中的dao
建议每追加一个 controller 的函数,就追加了测试方法,提高测试覆盖率。
commit 代码,并且 push 到服务器上。
对于比较复杂的代码,使用stopBug
进行代码检查。
在plugin
中修改config.properties
,然后执行genCodes
来生成代码,生成的代码放在/log
中
生成的代码有:model、dao、service、controller、test,可以只用一部分,也可以全用。
Mybatis 推出新的方法,效率提高了很多,就像写 Sql 语句一样,在 Java 中自由撰写。
代码生成器生成了基本的添加、删除、查询,还可以在这个基础进行灵活编码。
private boolean checkRoleIds(Integer[] roleIds){Long ren = roleDao.count(c-> c.where(roleId,isIn(roleIds)));if(roleIds.length>0 && ren.intValue()==roleIds.length){return true;}throw new BusinessException("角色编号在数据库中没有找到:"+ Arrays.toString(roleIds));}
为了提高系统效率,使用了数据库读写分离,系统中会对应多个 mysql 数据库。这样就要求分布式主键生成器。
下面的代码,就可以得到一个雪花
分布式主键
Long snowId=IdUtil.getSnowId();
可以在配置文件中配置,当更新一条记录时,会自动将更新时间记录到相应的字段中。
例如:gmt_modified
wukong:auto-fill-date-column:enabled: truecolumns: gmt_modified,gmt_test
根据前台参数,自动拼接 Sql。
前台一般会有这样的查询界面,按照一定规则,能动态形成查询的 Sql 语句。例子见:DynamicSqlController
正常情况下,Mybatis 撰写 Sql 操作,要实现 Model,Mapper 操作,这里提供了一个通用 Mapper: selectMapper
大大极化了 Sql 操作,只用写 Sql 语句就可以了,就可以把结果传递给前台。
@RequestMapping("/selectUser")public List<Map> selectUser(){String sql="select * from user where userid=123";return selectMapper.select(sql);}
使用SqlSafeUtil
类就可以。
集成了 JWT 安全框架。可以直接使用。
登陆、注册、分配权限、删除用户等基本功能。
有些路径不需要权限认证,可以通过配置文件来配置。
静态代码检查在build/reports/spotbugs
可以看例子代码
使用了 spring doc 来输出文档。
wukong-examples
里面的例子里面有一些参考的代码: