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进行了解
Mybatic逆向工程的使用的更多相关文章
- IDEA 中生成 MyBatis 逆向工程实践
IDEA 逆向 MyBatis 工程时,不像支持 Hibernate 那样有自带插件,需要集成第三方的 MyBatis Generator. MyBatis Generator的详细介绍 http:/ ...
- mybatis逆向工程生成JavaBean、dao、mapper generatorSqlmapCustom
import java.io.File; import java.util.ArrayList; import java.util.List; import org.mybatis.generator ...
- mybatis入门基础(九)----逆向工程
一.什么是逆向工程 mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml.po. ...
- iOS逆向工程资料
链接: 基于iOS逆向工程的微信机器人 - 猫友会大讲坛第1期 我的失败与伟大 —— 创业必备的素质(狗神经验谈)
- PowerDesigner逆向工程导入MYSQL数据库总结
由于日常数据建模经常使用PowerDesigner,使用逆向工程能更加快速的生成模型提高效率,所以总结使用如下: 首先现在PowerDesigner,这里提供PD16.5版本链接: http://pa ...
- IOS_ios逆向工程-静态分析
返回博客列表 原 ios逆向工程-静态分析 余成海 发布时间: 2014/11/03 19:17 阅读: 11201 收藏: 17 点赞: 5 评论: 6 最近在学习IOS逆向工程,查看网络上的资料也 ...
- (转) PowerDesigner逆向工程导入MYSQL数据库总结
PowerDesigner逆向工程导入MySQL数据库总结 由于日常数据建模经常使用PowerDesigner,使用逆向工程能更加快速的生成模型提高效率,所以总结使用如下: 1. 安装MYS ...
- Mybatis逆向工程构建项目实例.
2016/11/06更新: 因为有博友可能需要这份代码, 所以我就直接发到百度云上面和大家共享, 如果链接失效请大家留言提示即可.下载地址: http://pan.baidu.com/s/1i57E8 ...
- Linux C++ 调试神技--如何将Linux C++ 可执行文件逆向工程到Intel格式汇编
Linux C++ 调试神技--如何将Linux C++ 可执行文件逆向工程到Intel格式汇编 对于许多在windows 上调试代码的人而言, Intel IA32格式的汇编代码可能并不陌生,因为种 ...
随机推荐
- 短网址url接口api,url短链接(t.cn、url.cn)生成
简要说明 短网址api接口有很多格式,不同的接口生成的短网址格式也不同,比如常见的t.cn.url.cn.w.url.cn等格式.总而言之短网址接口就是用来将一个冗长的链接缩短成10个字符以内的短链接 ...
- java_细节_windows7下记事本保存为utf-8格式的问题
如果在win7下的记事本直接另存为utf-8格式,是带有dom的utf-8,所以处理的时候需要注意,因为第一个字符是"?",而且不可见
- Object的rest和spread方法
//将多个对象合并到一个对象里 const input = { a: 1, b: 2 } const test = { d: 5 } const output = { ...input, ...tes ...
- np.c_与np.r_
import sys reload(sys) sys.setdefaultencoding('utf-8') import numpy as np def test(): ''' numpy函数np. ...
- AcWing 837. 连通块中点的数量
#include <iostream> using namespace std; ; int n, m; int p[N], size[N]; int find(int x) { if ( ...
- 507,介绍一下标准的css盒子模型?低版本ie的盒子模型有什么不同的?
有两种,IE盒子模型,另外是W3C盒子模型: 盒模型都包括:内容(content),填充(padding),边界(margin),边框(border): 区别:IE的content部分吧border和 ...
- 远程传输文件命令:scp
1.概述 scp(secure copy)是一个基于 SSH 协议在网络之间进行安全传输的命令,其格式为“scp [参数] 本地文件 远程帐户@远程 IP 地址:远程目录”. 与第 2 章讲解的 cp ...
- 转载:Linux 时钟基础学习
1.HZ Linux核心每隔固定周期会发出timer interrupt (IRQ 0),HZ是用来定义每一秒有几次timer interrupts.举例来说,HZ为1000,代表每秒有1000次ti ...
- Error: Cannot find module 'webpack' 问题解决办法
这句话的意思是:没有找到webpack模块. 就算之前你装了webpack,那肯定是非全局安装 所以要全局安装 npm install --save-dev webpack 问题解决
- Windows Server 2016安装.NET Framework 3.5
1.打开“服务器管理器” 2.点击“添加角色和功能” 3.点击“下一步” 4.点击“下一步” 5.点击“下一步” 6.点击“下一步” 7.勾选“.NET Framework 3.5功能”,点击“下一步 ...