MyBatis Generator简介

前言

Mybatis概述》给我们提供了ORM解决方案,MyBatis Generator 是MyBatis的快速代码生成辅助工具。每个公司可以根据自己的代码规范,统一生成基础代码。

快速入门

通过以下demo可以直接java方式运行

        String genCfg = "mbgConfiguration.xml";
        File configFile = new File(GenMain.class.getResource(genCfg).getFile());
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = null;
        myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
依赖
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.4.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
配置

核心配置文件

<?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>
<!--    <context id="sqlserverTables" targetRuntime="IntrospectedTableMyBatis3CustomIpl">-->
    <context id="sqlserverTables" targetRuntime="MyBatis3Simple">
        <!-- 生成的pojo,将implements Serializable-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
<!--        <plugin type="com.myproject.mbg.CustomPlugin" />-->

        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
            <property name="addRemarkComments" value="true"/>
        </commentGenerator>

        <!-- 数据库链接URL、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
            connectionURL="jdbc:mysql://ip/库名"
            userId="***"
            password="***">
            <property name="useInformationSchema" value="true"/>
            <property name="nullCatalogMeansCurrent" value="true"/>
        </jdbcConnection>

        <!--
        默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer
            true,把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal
        -->
        <javaTypeResolver type="com.myproject.mbg.CustomJavaTypeResolver">
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!--
        生成model模型,对应的包路径,以及文件存放路径(targetProject),targetProject可以指定具体的路径,如./src/main/java,
        也可以使用“MAVEN”来自动生成,这样生成的代码会在target/generatord-source目录下
        -->
        <javaModelGenerator targetPackage="com.myproject.entity" targetProject="myproject/src/main/java">
            <property name="enableSubPackages" value="true"/>
            <!-- 从数据库返回的值被清理前后的空格  -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- 对应的Mapper接口类文件 -->
        <javaClientGenerator targetPackage="com.myproject.dao.mapper" targetProject="myproject/src/main/java" type="ANNOTATEDMAPPER">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>


        <table tableName="mbg_test" domainObjectName="MbgTest" enableSelectByExample="true" modelType="flat">
            <property name="useActualColumnNames" value="false"/>
            <generatedKey column ="id" sqlStatement ="MYSQL" identity="true"/>
<!--            <columnOverride column="id" isGeneratedAlways="true"/>-->
            <ignoreColumn column="test_ignore" />

            <columnOverride column="status" javaType="com.myproject.entity.enums.MbgTestStatus" typeHandler="com.myproject.core.mybatis.typehandler.IntEnumTypeHandler" />
            <columnOverride column="another_status" javaType="com.myproject.entity.enums.AnotherStatus" typeHandler="com.myproject.core.mybatis.typehandler.IntEnumTypeHandler" />

        </table>

    </context>
</generatorConfiguration>

XML配置介绍

<context>

一个context可以看作一个数据库环境。 可以在 元素内列出多个元素, 以允许在MyBatis Generator的同一运行中从不同的数据库或具有不同的生成参数生成对象。

<connectionFactory> 或者 <jdbcConnection>

设置数据库连接。

<javaClientGenerator>

生成crud,可以设置生成的文件放在哪个包

<javaModelGenerator>

生成entity,可以设置生成的文件放在哪个包 一些主要功能
是否生成全字段构造函数
是否immutable,将决定是否生成set方法
set方法是否自动trim

<sqlMapGenerator>

用于定义SQL映射生成器的属性,当选择的javaClientGenerator需要XML时,此元素才是元素的必需子元素

<javaTypeResolver>

用于定义 Java 类型解析器的属性。Java 类型解析器决定了 数据库列 与 Java类型的对应关系

<commentGenerator>

定义注释生成器的属性

<domainObjectRenamingRule>

设置entity类名生成规则
比如当库中的所有表都有一个公共前缀,但是我们的entity名字里面不想要这个前缀

<table>

指定表,为该表生成代码(entity, crud方法, mapper)
一些主要配置项:

1. entity的名字 
2. 是否使用真实列名作为属性名(否则就用驼峰) 
3. 是否生成根据主键的select|delete|update
4. 是否生成插入语句 
5. 是否允许主键查询 
6. 是否immutable,将决定是否生成set方法
  • <generatedKey>
    用于指定自动生成的字段(比如自增id)
    如果指定此元素,则MyBatis Generator(MBG)将在SQL映射的生成的元素内生成一个适当的 元素(根据sqlStatement不同而不同),insert的时候会把这个值赋值到对象中。
MySql -> SELECT LAST_INSERT_ID()
  • <columnOverride>
    property设置java属性名(一般不需要在columnOverride这个标签里面设置,可以在table标签统一设置成驼峰)
    制定列与属性的映射关系
    isGeneratedAlways=true 生成的insert update方法就不会去设置这个字段的值。
    typeHandler当默认的类型转换不能满足要求的时候可以自定义类型转换
<columnOverride column="sku_name" property="skuName" javaType="java.lang.String" jdbcType="VARCHAR"
isGeneratedAlways="false" typeHandler="com.***.***TypeHandler"/>
  • <ignoreColumn>
    忽略某列,所有生成的代码里面都不会包含这列。
  • <ignoreColumnsByRegex>
    根据正则忽略列,可以指定except,这样正则就可以写得更加简单了。
 <table tableName="Foo">
       <ignoreColumnsByRegex pattern="(?i)col.*">
       <except column="col01"/>
        <except column="col13"/>
       </ignoreColumnsByRegex>
</table>
  • <columnRenamingRule>
    设置entity中属性名生成规则
    比如当表中的所有列都有一个公共前缀,但是我们的entity里面不想要这个前缀。

自定义改造

  1. 乐观锁支持(version字段)
  2. 逻辑删除(deleted字段)
  3. BLOB字段支持
  4. 批量操作
  5. 自增主键

请移步github《自定义Generator Demo》作者写的简单。

主要参考

定制MyBatis Generator减少mybatis的使用负担
官方文档
Mybatis详解系列(五)–Mybatis Generator和全注解风格的MyBatis3DynamicSql

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值