Mybatic逆向工程的使用
Posted fby698
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatic逆向工程的使用相关的知识,希望对你有一定的参考价值。
前言:利用别人的方法、知识、经历或精神成为你自己,不思考不实践不总结不反馈,就不会变成你的。
1.介绍
如果数据库里有250张表,手动为其敲打250张表的JavaBean类,不言而喻是累人的,也不太符合实际,为了追求效率和节约时间,可以通过逆向工程工具MyBatis Generator来生成它。
MyBatis Generator (MBG)是一个mabatis的代码生成器,能够根据表自动生成mapper.java接口,mapper.xml文件,Po文件。
详情请看官方文档介绍:http://mbg.cndocs.ml/index.html
2.下载
-
进入https://github.com/mybatis/generator/releases 找到最新的版本1.37,无法驾驭最新版本可以选择低一点的
点击mybatis-generator-core-1.3.7.zip,进行下载
-
解压
3.准备数据表
- 准备用户和订单表(自行执行sql)
1 /* 2 3 Navicat mysql Data Transfer 4 5 Source Server : new3 6 7 Source Server Version : 50520 8 9 Source Host : 127.0.0.1:3306 10 11 Source Database : mybatisnote 12 13 Target Server Type : MYSQL 14 15 Target Server Version : 50520 16 17 File Encoding : 65001 18 19 Date: 2018-08-12 15:42:05 20 21 */ 22 23 SET FOREIGN_KEY_CHECKS=0; 24 25 -- ---------------------------- 26 27 -- Table structure for orders 28 29 -- ---------------------------- 30 31 DROP TABLE IF EXISTS `orders`; 32 33 CREATE TABLE `orders` ( 34 35 `id` int(11) NOT NULL AUTO_INCREMENT, 36 37 `user_id` int(11) NOT NULL COMMENT ‘下单用户id‘, 38 39 `number` varchar(32) NOT NULL COMMENT ‘订单号‘, 40 41 `createtime` datetime NOT NULL COMMENT ‘创建订单时间‘, 42 43 `note` varchar(100) DEFAULT NULL COMMENT ‘备注‘, 44 45 PRIMARY KEY (`id`), 46 47 KEY `FK_orders_1` (`user_id`), 48 49 CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION 50 51 ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; 52 53 -- ---------------------------- 54 55 -- Records of orders 56 57 -- ---------------------------- 58 59 INSERT INTO `orders` VALUES (‘3‘, ‘1‘, ‘1000010‘, ‘2015-02-04 13:22:35‘, null); 60 61 INSERT INTO `orders` VALUES (‘4‘, ‘1‘, ‘1000011‘, ‘2015-02-03 13:22:41‘, null); 62 63 -- ---------------------------- 64 65 -- Table structure for user 66 67 -- ---------------------------- 68 69 DROP TABLE IF EXISTS `user`; 70 71 CREATE TABLE `user` ( 72 73 `id` int(11) NOT NULL AUTO_INCREMENT, 74 75 `username` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL, 76 77 `birthday` date DEFAULT NULL, 78 79 `sex` char(2) CHARACTER SET gbk DEFAULT NULL, 80 81 `address` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, 82 83 PRIMARY KEY (`id`) 84 85 ) ENGINE=InnoDB AUTO_INCREMENT=55 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 86 87 -- ---------------------------- 88 89 -- Records of user 90 91 -- ---------------------------- 92 93 INSERT INTO `user` VALUES (‘1‘, ‘张小单‘, ‘2018-07-20‘, ‘男‘, ‘上海莲花市‘); 94 95 INSERT INTO `user` VALUES (‘2‘, ‘Mary‘, ‘2018-07-17‘, ‘女‘, ‘河源市‘); 96 97 INSERT INTO `user` VALUES (‘3‘, ‘Mike‘, ‘2018-07-10‘, ‘男‘, ‘肇庆‘); 98 99 INSERT INTO `user` VALUES (‘27‘, ‘john‘, ‘2018-07-24‘, ‘男‘, ‘heyuan‘); 100 101 INSERT INTO `user` VALUES (‘28‘, ‘john‘, ‘2018-07-24‘, ‘女‘, ‘heyuan‘); 102 103 INSERT INTO `user` VALUES (‘30‘, ‘john31‘, ‘2018-07-24‘, ‘男‘, ‘heyuan‘); 104 105 INSERT INTO `user` VALUES (‘34‘, ‘hooooo‘, ‘2018-07-27‘, ‘m‘, ‘heya‘);
- 执行完成后有2表
4.创建工程与环境搭建
- 在Eclipse中创建Java项目,命名为mybatis-generatorUtil,点击完成。
- 新建lib文件夹(注意是放在mybatis-generatorUtil工程根目录下,而不是src)
-
复制jar到lib文件夹,全选并右击添加到构建路径中去
所需jar:
1、log4j-1.2.16.jar 日志包
2、mybatis-3.2.3.jar mybatic包
3、mybatis-generator-core-1.3.7.jar mybatis-generator包
4、mysql-connector-java-5.1.28-bin.jar mysql数据库驱动包
5、ojdbc14.jar oracle数据库驱动包
- 配置包,在src下新建log4j.properties,输入以下内容并保存
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
-
基本配置完成后如下图
核心配置部分:在该项目根目录下新建generatorConfig.xml,编写内容如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <!DOCTYPE generatorConfiguration 4 5 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" 6 7 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> 8 9 <generatorConfiguration> 10 11 <!--classPathEntry 元素用于添加运行类路径位置到类路径中,加载数据库驱动依赖的jar包 --> 12 13 <classPathEntry location="E:eclipse workplacemybatis-generatorUtillibmysql-connector-java-5.1.28-bin.jar" /> 14 15 16 17 <!--<context> 元素用于指定生成一组对象的环境--> 18 19 <context id="DB2Tables" targetRuntime="MyBatis3"> 20 21 <!-- 是否去除自动生成的注释 true:是: false:否 --> 22 23 <commentGenerator> 24 25 <property name="suppressAllComments" value="true" /> 26 27 </commentGenerator> 28 29 <jdbcConnection driverClass="com.mysql.jdbc.Driver" 30 31 connectionURL="jdbc:mysql://localhost:3306/mybatisnote?characterEncoding=utf-8" 32 33 userId="root" 34 35 password="1234567"> 36 37 </jdbcConnection> 38 39 <!-- 是否去除自动生成的注释 true:是: false:否 --> 40 41 <javaTypeResolver > 42 43 <property name="forceBigDecimals" value="false" /> 44 45 </javaTypeResolver> 46 47 48 49 <!-- javaBean的生成:targetPackage表示将生成的文件放在哪个包下面,targetProject表示生成的文件放在哪个目录下--> 50 51 <javaModelGenerator targetPackage="f.b.y.mybatic.p 52 53 o" targetProject=".src"> 54 55 <!-- enableSubPackages:是否让schema作为包的后缀 --> 56 57 <property name="enableSubPackages" value="true" /> 58 59 <!-- 从数据库返回的值被清理前后的空格--> 60 61 <property name="trimStrings" value="true" /> 62 63 </javaModelGenerator> 64 65 66 67 <!--mapper映射文件xml的生成--> 68 69 <sqlMapGenerator targetPackage="f.b.y.mybatic.mapper" targetProject=".src"> 70 71 <property name="enableSubPackages" value="true" /> 72 73 </sqlMapGenerator> 74 75 76 77 <!--mapper接口的生成--> 78 79 <javaClientGenerator type="XMLMAPPER" targetPackage="f.b.y.mybatic.mapper" targetProject=".src"> 80 81 <property name="enableSubPackages" value="true" /> 82 83 </javaClientGenerator> 84 85 86 87 <!--指定数据表--> 88 89 <table schema="" tableName="user" domainObjectName="User"/> 90 91 <table schema="" tableName="orders" domainObjectName="Orders"/> 92 93 94 95 </context> 96 97 </generatorConfiguration>
注意:
-
数据库驱动包位置:
在lib文件中找到,右击属性,将该数据库驱动包路径复制粘该贴到那
-
javaBean、mapper.xml、mapper接口的targetProject:
targetProject=".src" windows写法
targetProject="./src" mac写法
5.测试
-
在src下新建包f.b.y.MainTest和GeneratorTest.Java并编写以下内容
GeneratorTest.Java内容:
1 public class GeneratorTest { 2 3 4 5 public void generator() throws Exception{ 6 7 8 9 List<String> warnings = new ArrayList<String>(); 10 11 boolean overwrite = true; 12 13 //加载generatorConfig.xml 14 15 File configFile = new File("generatorConfig.xml"); 16 17 ConfigurationParser cp = new ConfigurationParser(warnings); 18 19 Configuration config = cp.parseConfiguration(configFile); 20 21 DefaultShellCallback callback = new DefaultShellCallback(overwrite); 22 23 MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, 24 25 callback, warnings); 26 27 myBatisGenerator.generate(null); 28 29 30 31 } 32 33 public static void main(String[] args) throws Exception { 34 35 try { 36 37 GeneratorTest generatorSqlmap = new GeneratorTest(); 38 39 generatorSqlmap.generator(); 40 41 } catch (Exception e) { 42 43 e.printStackTrace(); 44 45 } 46 47 48 49 } 50 51 52 53 }
-
测试结果:
运行GeneratorTest,观察控制台是否显示正确日志信息,右击src刷新,便可以看见生成的文件
- 日志信息
2018-08-12 17:08:31,503 [main] DEBUG [org.mybatis.generator.logging.LogFactory] - Logging initialized using ‘[email protected]f8f‘ adapter.
。。。。。省略
2018-08-12 17:08:31,555 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "note", data type 12, in table "mybatisnote..orders"
- 效果图
6.问题
在搭建环境和编写过程中,可能会遇到一些问题,在此进行说明和解决。
问题一:org.mybatis.generator.exception.XMLParserException: XML Parser Error on line 20: 注释中不允许出现字符串 "--"。
解决方法:
(1)去掉所有的注释(不建议,但很有效)
(2)网上说<!-- -->两边没有空格,说这样的注释才对,如<!-- targetProject:生成PO类的位置 -->(低版Eclipse可能有效)
(3)设置编码为UTF-8(推荐,有效)
问题二:java.lang.RuntimeException: Cannot resolve classpath entry: mysql-connector-java-5.1.28-bin.jar
解决方法:
在lib文件中找到,右击属性,将该数据库驱动包路径复制粘该贴到那
问题三:log4j:WARN No appenders could be found for logger (org.mybatis.generator.internal.db.DatabaseIntrospector).
日志文件放错位置
解决方法:
将放到src下,不要放到根目录下
问题四:java.io.FileNotFoundException: generatorConfig.xml (系统找不到指定的文件。)
配置文件放错位置
解决方法:
- 将放到根目录下,不要放到src目录下
- 如果在src下可以在GeneratorTest中的 File configFile = new File("src/ generatorConfig.xml ");修改
7.补充
个人源码:https://download.csdn.net/download/u012184264/10599159
在有很多标签还没有使用到,为了进一步深入了解,读者可以查看别人的博客https://blog.csdn.net/isea533/article/details/42102297进行了解
以上是关于Mybatic逆向工程的使用的主要内容,如果未能解决你的问题,请参考以下文章
mybatic MapperScannerConfigurer的原理
Android 逆向Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(代码片段
Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )(代码片段