第8章 MyBatis Generator

徘徊边缘 提交于 2020-08-14 06:30:07

MBG简介

  • MyBatis Generator 简称 MBG。
  • 是一个专门为MyBatis框架使用者定制的代码生成器
  • 可以快速的根据表生成对应的映射文件、接口、JavaBean。
  • 支持基本的CRUD操作以及QBC风格的条件查询
  • 但表连接、存储过程等复杂sql仍需要开发人员手工编写。

MBG使用

步骤:

  • 编写MBG的配置文件。
  • 1.jdbcConnection配置数据库连接信息。
  • 2.javaModelGenerator配置JavaBean的生成策略。
  • 3.sqlMapGenerator配置sql映射文件生成策略。
  • 4.javaClientGenerator配置Mapper接口的生成策略。
  • 5.table配置要逆向解析的数据表。
  • tableName:表名
  • domainObjectName:对应的JavaBean名
  • 运行代码生成器生成代码。

Context标签

  • targetRuntime="MyBatis3" 可生成 带条件的 CRUD。(推荐)
  • targetRuntime="MyBatis3Simple" 可生成 基本的 CRUD。

==若想再次生成,需将之前生成的xxxMapper.xml删除。==

MBG配置文件

  • generatorConfig.xml (mbg.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">

<!--
    MBG生成的文件
    User.java
    UserExample.java
    UserMapper.java
    UserMapper.xml
-->


<generatorConfiguration>

    <!--加载jdbc属性文件-->
    <properties resource="jdbc.properties"/>
    
     <!--设置要使用的Java文件的编码-->
     <property name="javaFileEncoding" value="UTF-8"/>
     
     <!--
        <property name="autoDelimitKeywords" value="true"/>
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>
    -->

    <context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="flat">

        <!--重写equals()和hashCode()-->
        <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/>
        
        <!--重写toString()-->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
        
        <!--序列化-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
         <!--缓存-->
        <plugin type="org.mybatis.generator.plugins.CachePlugin"/>

         <!-- 注释 -->
        <commentGenerator>
            <!-- 阻止生成注释 -->
            <property name="suppressAllComments" value="true"/>
            <!-- 阻止生成的注释包含时间戳-->
            <property name="suppressDate" value="true"/>
            <!-- 注释是否添加数据库表的备注信息-->
            <property name="addRemarkComments" value="false"/>
        </commentGenerator>

        <!--数据库链接URL,用户名、密码 -->
        <jdbcConnection driverClass="${jdbc.driverClass}"
                        connectionURL="${jdbc.url}"
                        userId="${jdbc.username}"
                        password="${jdbc.password}"/>

        <!-- 类型解析器 -->
        <!--  默认false:把JDBC DECIMAL 和 NUMERIC 类型解析为java.lang.Integer
                  true:把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal
        -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 生成model的包名和位置 -->
        <javaModelGenerator targetPackage="org.yun.webstart.domain"
                            targetProject="src\main\java">
            <!-- 是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="true"/>
            <!-- 从数据库返回的值被清理前后的空格  -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- 生成 xxxMapper.xml文件的包名和位置 -->
        <sqlMapGenerator targetPackage="org.yun.webstart.dao"
                         targetProject="src\main\resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>

        <!-- 生成xxxMapper的包名和位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="org.yun.webstart.dao"
                             targetProject="src\main\java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!-- 要生成哪些表 -->
        <table tableName="t_user" domainObjectName="User"/>
        
         <!--生成全部表-->
        <!--<table tableName="%"/>-->

    </context>
</generatorConfiguration>

jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root

生成器代码

public class Main {
    public static void main(String[] args) throws Exception {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        File file = new File("src/main/resources/generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration cfg = cp.parseConfiguration(file);
        DefaultShellCallback dsc = new DefaultShellCallback(overwrite);
        MyBatisGenerator mbg = new MyBatisGenerator(cfg,dsc,warnings);
        mbg.generate(null);
        System.out.println("success...");
    }
}

或者在pom.xml加入

<plugin>
	<groupId>org.mybatis.generator</groupId>
	<artifactId>mybatis-generator-maven-plugin</artifactId>
	<version>1.3.2</version>
	<configuration>
	    <verbose>true</verbose>
	    <overwrite>true</overwrite>
	</configuration>
	<dependencies>
	    <dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.19</version>
	    </dependency>
	</dependencies>
</plugin>

然后

QBC风格带条件查询

@Test
public void test01(){
	SqlSession session = build.openSession();
	DeptMapper mapper = session.getMapper(DeptMapper.class);  
	DeptExample example = new DeptExample();
	//所有的条件都在example中封装
	Criteria criteria = example.createCriteria();
	//select id, deptName, locAdd from tbl_dept WHERE ( deptName like ? and id > ? )  
	criteria.andDeptnameLike("%部%");  
	criteria.andIdGreaterThan(2);
	List<Dept> list = mapper.selectByExample(example);  
	for (Dept dept : list) {
		System.out.println(dept);
	}
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!