前言:利用别人的方法、知识、经历或精神成为你自己,不思考不实践不总结不反馈,就不会变成你的。

转载必须表明出处: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.下载

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>

注意:

  1. 数据库驱动包位置:

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

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

配置文件放错位置

解决方法:

  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逆向工程的使用的更多相关文章

  1. IDEA 中生成 MyBatis 逆向工程实践

    IDEA 逆向 MyBatis 工程时,不像支持 Hibernate 那样有自带插件,需要集成第三方的 MyBatis Generator. MyBatis Generator的详细介绍 http:/ ...

  2. mybatis逆向工程生成JavaBean、dao、mapper generatorSqlmapCustom

    import java.io.File; import java.util.ArrayList; import java.util.List; import org.mybatis.generator ...

  3. mybatis入门基础(九)----逆向工程

    一.什么是逆向工程 mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml.po. ...

  4. iOS逆向工程资料

    链接: 基于iOS逆向工程的微信机器人 - 猫友会大讲坛第1期 我的失败与伟大 —— 创业必备的素质(狗神经验谈)

  5. PowerDesigner逆向工程导入MYSQL数据库总结

    由于日常数据建模经常使用PowerDesigner,使用逆向工程能更加快速的生成模型提高效率,所以总结使用如下: 首先现在PowerDesigner,这里提供PD16.5版本链接: http://pa ...

  6. IOS_ios逆向工程-静态分析

    返回博客列表 原 ios逆向工程-静态分析 余成海 发布时间: 2014/11/03 19:17 阅读: 11201 收藏: 17 点赞: 5 评论: 6 最近在学习IOS逆向工程,查看网络上的资料也 ...

  7. (转) PowerDesigner逆向工程导入MYSQL数据库总结

    PowerDesigner逆向工程导入MySQL数据库总结 由于日常数据建模经常使用PowerDesigner,使用逆向工程能更加快速的生成模型提高效率,所以总结使用如下: 1.      安装MYS ...

  8. Mybatis逆向工程构建项目实例.

    2016/11/06更新: 因为有博友可能需要这份代码, 所以我就直接发到百度云上面和大家共享, 如果链接失效请大家留言提示即可.下载地址: http://pan.baidu.com/s/1i57E8 ...

  9. Linux C++ 调试神技--如何将Linux C++ 可执行文件逆向工程到Intel格式汇编

    Linux C++ 调试神技--如何将Linux C++ 可执行文件逆向工程到Intel格式汇编 对于许多在windows 上调试代码的人而言, Intel IA32格式的汇编代码可能并不陌生,因为种 ...

随机推荐

  1. Java + Selenium 无头浏览器模式

    我们说的无头模式,只是在爬虫执行的时候,不再弹出浏览器的界面,只是使用浏览器的内核进行爬取,下面是示例代码: //设置本地chromedriver地址 System.setProperty(" ...

  2. 开发笔记—钉钉服务商应用isv开发,从应用配置,到获取客户企业通讯录

    以第三方企业微应用为例 在第三方企业微应用应用时,比较底层的需求,就是应用需要获取客户企业的通讯录,即部门/员工的数据.本人整理以下几个关键数据,供大家开发参考. 新建第三方微应用时,能拿到这些初始数 ...

  3. 事务:Transaction详解

    1.事务概念: 一组sql语句操作单元,组内所有SQL语句完成一个业务,如果整组成功:意味着全部SQL都实现:如果其中任何一个失败,意味着整个操作都失败.失败,意味着整个过程都是没有意义的.应该是数据 ...

  4. selenium定位方法-iframe元素定位方法

    在自动化测试中,如果无法定位到一个元素,那么最大的可能是定位的元素是在iframe框架中,iframe对象代表一个HTML的内联框架,在HTML中,iframe每出现一次,一个iframe对象就会被创 ...

  5. nodejs后台运行的方法

    nohup node ***.js & 这种方法可以,但存在你无法查询日志等问题 在SSH里另一个有效的方法是screen命令. [转]http://www.9usb.net/201002/l ...

  6. mongo shell远程连接使用数据库

    mongo mydb --username user1 --host --password --username 用户名 --host 连接ip --port 连接端口号 --password 密码 ...

  7. java基础(十)之向上转型/向下转型

    向上转型:将子类的对象赋值给父类的引用. 向下转型:将父类的对象赋值给子类的引用. 向上转型 Student a = new Student(); Person zhang = a; 或者 Perso ...

  8. Linux服务器时间设置及同步

    闲余:夏日将到,园区计划五一期间进行大面积的电网停电检修,运维同学因此将公司测试服务器提前关闭了.收假后,测试告诉我,他发现一个bug--一段定时任务程序未执行,我的第一反应就是--会不会是假期测试服 ...

  9. 下载图片(vue 下载图片)

    downloadImg(){ const url = this.imgUrl // window.open(_this.detail.imgUrl) let xmlhttp=new XMLHttpRe ...

  10. Flask 教程 第十八章:Heroku上的部署

    本文翻译自The Flask Mega-Tutorial Part XVIII: Deployment on Heroku 这是Flask Mega-Tutorial系列的第十八部分,我将在其中部署M ...