zoukankan      html  css  js  c++  java
  • MyBatis逆向工程

    什么是逆向工程

    MyBatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包括mapper.xml、mapper.java、pojo)。一般在开发中,常用的逆向工程方式是通过数据库的表生成代码

    使用逆向工程生成代码

    1. 新建一个工程

    使用Maven新建一个Java工程引入相应的包

    <dependencies>
      	<dependency>
      		<groupId>org.mybatis.generator</groupId>
      		<artifactId>mybatis-generator-core</artifactId>
      		<version>1.3.5</version>
      	</dependency>
      	<dependency>
      		<groupId>mysql</groupId>
      		<artifactId>mysql-connector-java</artifactId>
      		<version>5.1.40</version>
      	</dependency>
      	<dependency>
      		<groupId>org.mybatis</groupId>
      		<artifactId>mybatis</artifactId>
      		<version>3.4.1</version>
      	</dependency>
      </dependencies>
    
    2. 建立逆向工程配置文件
    <?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>
    
            <!-- 有Example查询条件内容 -->
           	<context id="testTables" targetRuntime="MyBatis3"> 
            <commentGenerator>
                <!-- 是否去除自动生成的注释 true:是 : false:否 -->
                <property name="suppressAllComments" value="true" />
            </commentGenerator>
     
            <!--数据库连接的信息:驱动类、连接地址、用户名、密码 (自己修改)-->
            <jdbcConnection
                driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/mydb"
                userId="cyp"
                password="cyp">
            </jdbcConnection>
     
            <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL
                和 NUMERIC 类型解析为java.math.BigDecimal -->
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false" />
            </javaTypeResolver>
     
            <!-- targetProject:生成Entity类的路径 -->
            <javaModelGenerator targetProject="./src/main/java"
                targetPackage="pojo">
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="false" />
                <!-- 从数据库返回的值被清理前后的空格 -->
                <property name="trimStrings" value="true" />
            </javaModelGenerator>
     
            <!-- targetProject:XXXMapper.xml映射文件生成的路径 -->
            <sqlMapGenerator targetProject="./src/main/resources"
                targetPackage="mapper">
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="false" />
            </sqlMapGenerator>
     
            <!-- targetPackage:Mapper接口生成的位置 -->
            <javaClientGenerator type="XMLMAPPER"
                targetProject="./src/main/java" targetPackage="dao">
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="false" />
            </javaClientGenerator>
     
            <!-- 数据库表名字和我们的entity类对应的映射指定(需自己修改) -->
            <table tableName="user" domainObjectName="User" />
            <table tableName="student" domainObjectName="Student" />
            <table tableName="account" domainObjectName="Account" />
     
            <!-- 有些表的字段需要指定java类型 <table schema="" tableName=""> <columnOverride column=""
                javaType="" /> </table> -->
        </context>
    </generatorConfiguration>
    

    配置文件中各个标签的作用已经在配置文件中注释

    配置文件中POJO,mapper接口,mapper文件的包创建好

    3. 新建工具类,用来加载配置文件和生成代码
    package util;
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.mybatis.generator.api.MyBatisGenerator;
    import org.mybatis.generator.config.Configuration;
    import org.mybatis.generator.config.xml.ConfigurationParser;
    import org.mybatis.generator.exception.XMLParserException;
    import org.mybatis.generator.internal.DefaultShellCallback;
    
    /**
     * 加载逆向生成配置文件,逆向生成代码
     * @author WaterTree
     *
     */
    public class MybatisGeneratorUtil {
    	public static void generator() throws Exception, XMLParserException{
    		List<String> warnings = new ArrayList<String>();
    		
    		// 指定逆向工程配置文件
    		File configurationFile = new File("generatorConfig.xml");
    		ConfigurationParser cp = new ConfigurationParser(warnings);
    		
    		Configuration configuration = cp.parseConfiguration(configurationFile);
    		DefaultShellCallback callback = new DefaultShellCallback(true);
    		
    		MyBatisGenerator myBatisGenerator = new MyBatisGenerator(configuration, callback, warnings);
    		
    		myBatisGenerator.generate(null);
    	}
    }
    
    
    4. 新建类包含mian方法调用工具类
    package util;
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.mybatis.generator.api.MyBatisGenerator;
    import org.mybatis.generator.config.Configuration;
    import org.mybatis.generator.config.xml.ConfigurationParser;
    import org.mybatis.generator.exception.XMLParserException;
    import org.mybatis.generator.internal.DefaultShellCallback;
    
    /**
     * 加载逆向生成配置文件,逆向生成代码
     * @author WaterTree
     *
     */
    public class MybatisGeneratorUtil {
    	public static void generator() throws Exception, XMLParserException{
    		List<String> warnings = new ArrayList<String>();
    		
    		// 指定逆向工程配置文件
    		File configurationFile = new File("generatorConfig.xml");
    		ConfigurationParser cp = new ConfigurationParser(warnings);
    		
    		Configuration configuration = cp.parseConfiguration(configurationFile);
    		DefaultShellCallback callback = new DefaultShellCallback(true);
    		
    		MyBatisGenerator myBatisGenerator = new MyBatisGenerator(configuration, callback, warnings);
    		
    		myBatisGenerator.generate(null);
    	}
    }
    
    
    5. 运行后项目的结构

    逆向工具生成的Example类

    自定义查询条件的java类

    public class StudentExample {
        /*
    		排序方式  字段 + 空格 + asc(desc)	
    	*/
        protected String orderByClause;
    	
        /*
        	是否去重
        */
        protected boolean distinct;
    	
        /*
        	查询条件   eg->   name = 'tom'
        */
        protected List<Criteria> oredCriteria;
    
        public StudentExample() {
            oredCriteria = new ArrayList<Criteria>();
        }
    
        public void setOrderByClause(String orderByClause) {
            this.orderByClause = orderByClause;
        }
    
        public String getOrderByClause() {
            return orderByClause;
        }
    
        public void setDistinct(boolean distinct) {
            this.distinct = distinct;
        }
    
        public boolean isDistinct() {
            return distinct;
        }
    
        public List<Criteria> getOredCriteria() {
            return oredCriteria;
        }
    
        public void or(Criteria criteria) {
            oredCriteria.add(criteria);
        }
    
  • 相关阅读:
    [POJ 1050]To the Max
    P1678 烦恼的高考志愿
    P1873 砍树
    P1102 A-B 数对
    P6771 [USACO05MAR]Space Elevator 太空电梯
    P2347 砝码称重
    P1832 A+B Problem(再升级)
    P1679 神奇的四次方数
    P1877 [HAOI2012]音量调节
    P1049 装箱问题
  • 原文地址:https://www.cnblogs.com/watertreestar/p/11780137.html
Copyright © 2011-2022 走看看