本文与《Mybatis Generator定制化注释的方法》目标相似,即定制化生成数据持久化映射对象(Domain)文件、数据操作Dao文件、及其相应的Mybatis Mapper文件。
用Mybatis Generator有不便之处是只实现了定制化生成Domain字段注释,而不能定制化生成类注释、方法、方法注释等。本文将定制化更进一步,生成你想要的Domain,Dao,Mybatis Mapper文件。
1. 思路
a. 从数据库的元数据表information_schema获取表结构信息,如表名、表注释、字段名、字段类型、字段注释等。这里用到传统的jdbc。
b. 写Mysql、java、Mybatis数据类型转化器。
c. 实现生成Domain,Dao,Mapper的工具类。
d. 实现生成文件的工具类。
e. 完成串联所有工具的main方法。
image.png2. 程序使用介绍
以下代码是MybatisGenerator.java中main方法的关键代码:
// 设置作者名
BaseGenerator.setAUTHOR("ali");
// 初始化数据库连接 url, username, password
DbUtil.initConnection("jdbc:mysql://localhost/test_db", "root", "123456");
// 生成数据库中所有的表对应的dao文件
// List<TableInfo> tableInfos = SchemaUtil.getTableInfos("test_db", null);
// 生成数据库中指定表对应的dao文件
List<TableInfo> tableInfos = SchemaUtil.getTableInfos("test_db", new ArrayList<String>(){{add("USER");add("ORDER_INFO");}});
ConfigInfo configInfo = new ConfigInfo();
// 配置包名(dao文件所在)
configInfo.setModulePackagePath("com.me.test.dao");
// 配置Domain文件包名(实际生成包路径为"com.me.test.dao.domain")
configInfo.setDomainPackageName("domain");
// 配置Domain类名后缀(生成样例,UserPo)
configInfo.setDomainPostfix("Po");
// 配置Dao类名后缀(生成样例,UserDao)
configInfo.setDaoPostfix("Dao");
// 配置Mapper后缀(生成样例,UserMapper)
configInfo.setMapperPostfix("Mapper");
// Mapper文件位置
configInfo.setMapperDir("resources/test");
FileGenerator.generate(configInfo, tableInfos);
注:Domain用了lombok的@Data注解,因此没有生成get,set方法。
3. 效果
(只截取部分代码)
Domain
Dao
Mapper
感谢同事的启发与指导,有他们的帮助才得以此文。
如需要源码,请下载https://github.com/code-group/mybatisGenerator.git
网友评论