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

转载必须表明出处: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. 1069 The Black Hole of Numbers (20分)

    1069 The Black Hole of Numbers (20分) 1. 题目 2. 思路 把输入的数字作为字符串,调用排序算法,求最大最小 3. 注意点 输入的数字的范围是(0, 104), ...

  2. 很多win10系统用户都遇见了开机发现任务管理器中有个系统中断进程占用cpu99%的问题,

    很多win10系统用户都遇见了开机发现任务管理器中有个系统中断进程占用cpu99%的问题,尝试了网上提供的方法都不能得到有效的解决.下面小编就为大家详细的介绍电脑工程师提供的正确的解决姿势. 出现系统 ...

  3. opencv:形态学梯度

    #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...

  4. Bugku-CTF加密篇之affine(y = 17x-8 flag{szzyfimhyzd})

    affine y = 17x-8 flag{szzyfimhyzd} 答案格式:flag{*} 来源:第七届山东省大学生网络安全技能大赛  

  5. 教你如何用python和pygame制作一个简单的贪食蛇游戏,可自定义

    1.效果图 2.完整的代码 #第1步:导出模块 import pygame, sys, random from pygame.locals import * # 第2步:定义颜色变量,在pygame中 ...

  6. 吴裕雄 python 机器学习——半监督学习LabelSpreading模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import metrics from sklearn import d ...

  7. 利用mnist训练集生成的caffemodel对mnist测试集与自己手写的数字进行测试

    从一到二:利用mnist训练集生成的caffemodel对mnist测试集与自己手写的数字进行测试 通过从零到一的教程,我们已经得到了通过mnist训练集生成的caffemodel,主要包含下面四个文 ...

  8. 报bug mui分享微信 ,qq 分享失败

    1. iOS分享链接到微信,分享成功,但是分享的只有title,其他参数都没有 原因是mui分享进行了更新,msg新增了 msg.type 这个配置参数 qq : msg.type='text' 微信 ...

  9. leetCode练题——7. Reverse Integer

    1.题目:   7. Reverse Integer Given a 32-bit signed integer, reverse digits of an integer. Example 1: I ...

  10. 排序算法之归并排序的python实现

    采用分治法: 分割:递归地把当前序列平均分割成两半. 集成:在保持元素顺序的同时将上一步得到的子序列集成到一起(归并). 归并操作(归并算法),指的是将两个已经排序的序列合并成一个序列的操作.归并排序 ...