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

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

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

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

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

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

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

2==do 咱们要怎么作呢?mybatis

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

首先是创建了一个Java project,而后引入了5个jar包,分别是:app

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文件以外,省得不当心被覆盖掉。生成的代码也很复杂,咱们还能不能优化呢?....

相关文章
相关标签/搜索