前言:利用別人的方法、知識、經歷或精神成爲你本身,不思考不實踐不總結不反饋,就不會變成你的。html
轉載必須代表出處:http://www.javashuo.com/article/p-fxmkucoh-ds.htmljava
若是數據庫裏有250張表,手動爲其敲打250張表的JavaBean類,不言而喻是累人的,也不太符合實際,爲了追求效率和節約時間,能夠經過逆向工程工具MyBatis Generator來生成它。 mysql
MyBatis Generator (MBG)是一個mabatis的代碼生成器,可以根據表自動生成mapper.java接口,mapper.xml文件,Po文件。 git
詳情請看官方文檔介紹:http://mbg.cndocs.ml/index.html github
點擊mybatis-generator-core-1.3.7.zip,進行下載 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');
所需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數據庫驅動包
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>
注意:
在lib文件中找到,右擊屬性,將該數據庫驅動包路徑複製粘該貼到那
targetProject=".\src" windows寫法
targetProject="./src" mac寫法
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"
在搭建環境和編寫過程當中,可能會遇到一些問題,在此進行說明和解決。
問題一: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 (系統找不到指定的文件。)
配置文件放錯位置
解決方法:
我的源碼:https://download.csdn.net/download/u012184264/10599159
在有不少標籤尚未使用到,爲了進一步深刻了解,讀者能夠查看別人的博客http://www.javashuo.com/article/p-whdmycag-hb.html進行了解