Mybatic逆向工程的使用

前言:利用別人的方法、知識、經歷或精神成爲你本身,不思考不實踐不總結不反饋,就不會變成你的。html

轉載必須代表出處:http://www.javashuo.com/article/p-fxmkucoh-ds.htmljava

1.介紹

若是數據庫裏有250張表,手動爲其敲打250張表的JavaBean類,不言而喻是累人的,也不太符合實際,爲了追求效率和節約時間,能夠經過逆向工程工具MyBatis Generator來生成它。 mysql

MyBatis Generator (MBG)是一個mabatis的代碼生成器,可以根據表自動生成mapper.java接口,mapper.xml文件,Po文件。 git

詳情請看官方文檔介紹:http://mbg.cndocs.ml/index.html github

   

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: 數據庫

     一、log4j-1.2.16.jar 日誌包 apache

     二、mybatis-3.2.3.jar         mybatic包 windows

        三、mybatis-generator-core-1.3.7.jar    mybatis-generator包 mybatis

        四、mysql-connector-java-5.1.28-bin.jar    mysql數據庫驅動包

        五、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 workplace\mybatis-generatorUtil\lib\mysql-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 'org.mybatis.generator.logging.log4j.Log4jLoggingLogFactory@5ecddf8f' 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

有不少標籤尚未使用到,爲了進一步深刻了解,讀者能夠查看別人的博客http://www.javashuo.com/article/p-whdmycag-hb.html進行了解

相關文章
相關標籤/搜索