Mybatic逆向工程的使用
前言:利用别人的方法、知识、经历或精神成为你自己,不思考不实践不总结不反馈,就不会变成你的。
转载必须表明出处:https://www.cnblogs.com/fby698/p/9463831.html
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)
/* Navicat MySQL Data Transfer Source Server : new3 Source Server Version : 50520 Source Host : 127.0.0.1:3306 Source Database : mybatisnote Target Server Type : MYSQL Target Server Version : 50520 File Encoding : 65001 Date: 2018-08-12 15:42:05 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for orders -- ---------------------------- DROP TABLE IF EXISTS `orders`; CREATE TABLE `orders` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL COMMENT '下单用户id', `number` varchar(32) NOT NULL COMMENT '订单号', `createtime` datetime NOT NULL COMMENT '创建订单时间', `note` varchar(100) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), KEY `FK_orders_1` (`user_id`), CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of orders -- ---------------------------- INSERT INTO `orders` VALUES ('', '', '', '2015-02-04 13:22:35', null); INSERT INTO `orders` VALUES ('', '', '', '2015-02-03 13:22:41', null); -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL, `birthday` date DEFAULT NULL, `sex` char(2) CHARACTER SET gbk DEFAULT NULL, `address` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=55 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('', '张小单', '2018-07-20', '男', '上海莲花市'); INSERT INTO `user` VALUES ('', 'Mary', '2018-07-17', '女', '河源市'); INSERT INTO `user` VALUES ('', 'Mike', '2018-07-10', '男', '肇庆'); INSERT INTO `user` VALUES ('', 'john', '2018-07-24', '男', 'heyuan'); INSERT INTO `user` VALUES ('', 'john', '2018-07-24', '女', 'heyuan'); INSERT INTO `user` VALUES ('', 'john31', '2018-07-24', '男', 'heyuan'); INSERT INTO `user` VALUES ('', '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,编写内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!--classPathEntry 元素用于添加运行类路径位置到类路径中,加载数据库驱动依赖的jar包 --> <classPathEntry location="E:\eclipse workplace\mybatis-generatorUtil\lib\mysql-connector-java-5.1.28-bin.jar" /> <!--<context> 元素用于指定生成一组对象的环境--> <context id="DB2Tables" targetRuntime="MyBatis3"> <!-- 是否去除自动生成的注释 true:是: false:否 --> <commentGenerator> <property name="suppressAllComments" value="true" /> </commentGenerator> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mybatisnote?characterEncoding=utf-8" userId="root" password="1234567"> </jdbcConnection> <!-- 是否去除自动生成的注释 true:是: false:否 --> <javaTypeResolver > <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- javaBean的生成:targetPackage表示将生成的文件放在哪个包下面,targetProject表示生成的文件放在哪个目录下--> <javaModelGenerator targetPackage="f.b.y.mybatic.p o" targetProject=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="true" /> <!-- 从数据库返回的值被清理前后的空格--> <property name="trimStrings" value="true" /> </javaModelGenerator> <!--mapper映射文件xml的生成--> <sqlMapGenerator targetPackage="f.b.y.mybatic.mapper" targetProject=".\src"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!--mapper接口的生成--> <javaClientGenerator type="XMLMAPPER" targetPackage="f.b.y.mybatic.mapper" targetProject=".\src"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <!--指定数据表--> <table schema="" tableName="user" domainObjectName="User"/> <table schema="" tableName="orders" domainObjectName="Orders"/> </context> </generatorConfiguration>
注意:
- 数据库驱动包位置:
在lib文件中找到,右击属性,将该数据库驱动包路径复制粘该贴到那
- javaBean、mapper.xml、mapper接口的targetProject:
targetProject=".\src" windows写法
targetProject="./src" mac写法
5.测试
- 在src下新建包f.b.y.MainTest和GeneratorTest.Java并编写以下内容
GeneratorTest.Java内容:
public class GeneratorTest { public void generator() throws Exception{ List<String> warnings = new ArrayList<String>(); boolean overwrite = true; //加载generatorConfig.xml File configFile = new File("generatorConfig.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(configFile); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); } public static void main(String[] args) throws Exception { try { GeneratorTest generatorSqlmap = new GeneratorTest(); generatorSqlmap.generator(); } catch (Exception e) { e.printStackTrace(); } } }
- 测试结果:
运行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 (系统找不到指定的文件。)
配置文件放错位置
解决方法:
- 将放到根目录下,不要放到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进行了解
最新文章
- c语言实现的协程
- spring配置属性的两种方式
- xamarin.android 沉浸式状态栏
- Integer相加产生的类型转换问题
- Unieap3.5-Grid+Form下拉列表高度设置
- PHP Header 缓存 --- Header 参数说明
- 由底层和逻辑说开去——c++之类与对象的深入剖析
- 使用android.view.TouchDelegate扩大View的触摸点击区域
- keil教程
- 理解中WebAPI的属性和相关操作 FormBody和 FormUri等(WebAPI 二)
- 【实用技巧】去除BootStrap所有圆角效果
- java项目开发第五天——奋力完成数据库
- Interlocked原子函数陷阱
- Servlet3.1上传图片示例
- 利用Eclipse构建SpringMVC项目
- python2使用eval 让除法可以保留小数
- Ubuntu16.04LTS卸载软件的命令
- python调用caffe环境配置
- JAVA-将内容写入文件并导出到压缩包
- python 判断字符串是否以数字结尾