• mybatis逆向(反向)工程自动生成代码


    Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件。我也是在使用这个框架的时候手动书写总是出错,在得到老师的指导后结合网上资源自己倒腾一下,顺便记录一下。这是学习的记录,不是教学。望看不懂的海涵,自觉参考其他人的博客。在此拜谢不提啦!

    1==why  歪什么会有这个想法?

      当用到Hibernate的时候,hibernate框架可以根据需要自动为我们创建数据库中的。当然也可以借助工具根据表的数据生成action,既然mybatis是半自动ORM,到了MyBatis这儿我们该怎么办呢?借鉴Hibernate中的步骤,思路如下:

    1. 连接数据库,指定表单生成

    2. 指定代码生成后的存放路径,以及要生成哪些代码

    3. 读取配置文件,生成代码

    2==do 我们要怎么做呢?

      有好多种方法,这儿学习的是Java程序方式(From another Java program with an XML configuration),不依赖开发工具。

    首先是建立了一个Java project,然后引入了5个jar包,分别是:

    log4j-1.2.16.jar;Mybatis-3.2.3.jar;Mybatis-generator-core-1.3.2.jar;mysal-connector-java-5.1.28-bin.jar;ojdbc14.jar

    版本可以自行确定!然后Build Path一下。

    注意的一点是创建Java project是一个生成逆向文件的工程,将自动生成的文件再拷贝到原工程中去(这么做是为了放止直接在源文件中生成会覆盖掉同名文件)

    废话真多,开工。。。。就只用建个配置文件和一个执行程序,然后根据自己需要改改就行。

    直接拷贝/创建  generatorConfig.xml文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE generatorConfiguration
     3   PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
     4   "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
     5 
     6 <generatorConfiguration>
     7     <context id="testTables" targetRuntime="MyBatis3">
     8         <commentGenerator>
     9             <!-- 是否去除自动生成的注释 true:是 : false:否 -->
    10             <property name="suppressAllComments" value="true" />
    11         </commentGenerator>
    12         <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
    13         <jdbcConnection driverClass="com.mysql.jdbc.Driver"
    14             connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root"
    15             password="root">
    16         </jdbcConnection>
    17         <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
    18             connectionURL="jdbc:oracle:thin:@192.168.130.128:1521:orcl" 
    19             userId="yycg"
    20             password="yycg">
    21         </jdbcConnection> -->
    22 
    23         <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 
    24             NUMERIC 类型解析为java.math.BigDecimal -->
    25         <javaTypeResolver>
    26             <property name="forceBigDecimals" value="false" />
    27         </javaTypeResolver>
    28 
    29         <!-- targetProject:生成PO类的位置 -->
    30         <javaModelGenerator targetPackage="com.zhongheng.pojo"
    31             targetProject=".src">
    32             <!-- enableSubPackages:是否让schema作为包的后缀 -->
    33             <property name="enableSubPackages" value="false" />
    34             <!-- 从数据库返回的值被清理前后的空格 -->
    35             <property name="trimStrings" value="true" />
    36         </javaModelGenerator>
    37         <!-- targetProject:mapper映射文件生成的位置 -->
    38         <sqlMapGenerator targetPackage="com.zhongheng.mapper" 
    39             targetProject=".src">
    40             <!-- enableSubPackages:是否让schema作为包的后缀 -->
    41             <property name="enableSubPackages" value="false" />
    42         </sqlMapGenerator>
    43         <!-- targetPackage:mapper接口生成的位置 -->
    44         <javaClientGenerator type="XMLMAPPER"
    45             targetPackage="com.zhongheng.mapper" 
    46             targetProject=".src">
    47             <!-- enableSubPackages:是否让schema作为包的后缀 -->
    48             <property name="enableSubPackages" value="false" />
    49         </javaClientGenerator>
    50         <!-- 指定数据库表 -->
    51         <!-- 
    52             select * from DBA_OBJECTS where object_type='TABLE' and object_name='SYSUSER';
    53             解决schema冲突问题,在不影响表数据的情况下删除多余的用户
    54          -->
    55         <!-- <table schema="" tableName="sysuser"></table> -->
    56         <table schema="" tableName="user"></table>
    57         
    58         
    59         <!-- 有些表的字段需要指定java类型
    60          <table schema="" tableName="">
    61             <columnOverride column="" javaType="" />
    62         </table> -->
    63     </context>
    64 </generatorConfiguration>

     执行生成程序,(直接拷贝/创建 到src下,就会在默认包(default package)中)

    GeneratorSqlmap.java

     1 import java.io.File;
     2 import java.io.IOException;
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import org.mybatis.generator.api.MyBatisGenerator;
     7 import org.mybatis.generator.config.Configuration;
     8 import org.mybatis.generator.config.xml.ConfigurationParser;
     9 import org.mybatis.generator.exception.XMLParserException;
    10 import org.mybatis.generator.internal.DefaultShellCallback;
    11 
    12 public class GeneratorSqlmap {
    13 
    14     public void generator() throws Exception{
    15 
    16         List<String> warnings = new ArrayList<String>();
    17         boolean overwrite = true;
    18         //指定 逆向工程配置文件
    19         File configFile = new File("generatorConfig.xml"); 
    20         ConfigurationParser cp = new ConfigurationParser(warnings);
    21         Configuration config = cp.parseConfiguration(configFile);
    22         DefaultShellCallback callback = new DefaultShellCallback(overwrite);
    23         MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
    24                 callback, warnings);
    25         myBatisGenerator.generate(null);
    26 
    27     } 
    28     public static void main(String[] args) throws Exception {
    29         try {
    30             GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
    31             generatorSqlmap.generator();
    32         } catch (Exception e) {
    33             e.printStackTrace();
    34         }
    35         
    36     }
    37 
    38 }

     ++++++++++分界线++++++++++

    现在是要改了,由于我的个笨脑袋就简单记一下基础的。

    哎呦,报错了,才发现log4j.properties没放入src下。

    log4j.properties文件

     1 log4j.rootLogger=DEBUG, Console
     2 #Console
     3 log4j.appender.Console=org.apache.log4j.ConsoleAppender
     4 log4j.appender.Console.layout=org.apache.log4j.PatternLayout
     5 log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
     6 log4j.logger.java.sql.ResultSet=INFO
     7 log4j.logger.org.apache=INFO
     8 log4j.logger.java.sql.Connection=DEBUG
     9 log4j.logger.java.sql.Statement=DEBUG
    10 log4j.logger.java.sql.PreparedStatement=DEBUG

    现在文件结构如下:

    在 GeneratorSqlmap.java 文件下有main函数,执行一下下

    刷新一下就能看到生成的两个包,这就是反向生成的的代码,基本上解决了对于一个实体操作的增删改查

    生成的代码内部怎么样的,篇幅有限就不贴了。好啦,记录完毕。

    3==终结(总结)

      生成的代码,基本解决了一个类的增删查改,但是对于实际开发是远远不够的,所以我们还要对其进行扩展,我们的扩展功能应该写在自动生成的Java文件之外,免得不小心被覆盖掉。生成的代码也很复杂,我们还能不能优化呢?....

  • 相关阅读:
    Spyder | 关于报错No module named 'PyQt5.QtWebKitWidgets'
    Java基础(11) | 接口
    Java基础(10) | 抽象
    Java基础(9) | 继承
    Java基础(7) | String
    Java基础(6) | ArrayList
    CodeBlocks17.12配置GNU GCC + 汉化
    图片懒加载
    Mac安装Mysql 超详细(转载)
    剑指 Offer 03. 数组中重复的数字
  • 原文地址:https://www.cnblogs.com/himonkey/p/7459943.html
Copyright © 2020-2023  润新知