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.下载

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);
View Code

 

  • 执行完成后有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>

 

   

注意

  1. 数据库驱动包位置:技术分享图片

    在lib文件中找到技术分享图片,右击属性,将该数据库驱动包路径复制粘该贴到那

    技术分享图片

  2. 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 (系统找不到指定的文件。)

        配置文件放错位置

解决方法:

  1. 技术分享图片放到根目录下,不要放到src目录下
  2. 如果在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的原理

mybatic与spring结合的事务管理

mybatic 结果为null,返回0

MyBatic中,参数如何在SQL中获取

Android 逆向Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(代码片段

Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )(代码片段