zoukankan      html  css  js  c++  java
  • 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.下载

    3.准备数据表

    • 准备用户和订单表(自行执行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');
    View Code
    • 执行完成后有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,编写内容如下:

     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 workplacemybatis-generatorUtillibmysql-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>

       

    注意

    1. 数据库驱动包位置:

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

    2. javaBean、mapper.xml、mapper接口的targetProject:

      targetProject=".src" windows写法

      targetProject="./src" mac写法

         

    5.测试

    • 在src下新建包f.b.y.MainTest和GeneratorTest.Java并编写以下内容

         

      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"
    • 效果图

    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进行了解

    好看的皮囊千篇一律,有味的文章百里挑一, 若你觉得好味,可以给个赞,

    尊重原创,支持原创,转载博主的文章, 请务必标明作者和出处,谢谢 !

    作者:Newbe落花

    出处:https://www.cnblogs.com/fby698/

  • 相关阅读:
    关于c#中的委托和事件
    Unity3d中默认函数调用顺序(MonoBehaviour)
    u3d 摄像机详解
    u3d中的坐标系
    u3d中的向量 vector3 vector2
    u3d中的INput
    C#构造函数
    解析C#中[],List,Array,ArrayList的区别及应用
    Mybatis(七) mybatis的逆向工程的配置详解
    Mybatis(六) Spring整合mybatis
  • 原文地址:https://www.cnblogs.com/fby698/p/9463831.html
Copyright © 2011-2022 走看看