前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Spring Boot 整合Mybatis代码生成插件

Spring Boot 整合Mybatis代码生成插件

作者头像
LCyee
发布于 2020-08-05 09:41:41
发布于 2020-08-05 09:41:41
60300
代码可运行
举报
运行总次数:0
代码可运行

概述

我们无需手动编写 实体类、DAOXML 配置文件,只需要使用 MyBatis 提供的一个 Maven 插件就可以自动生成所需的各种文件便能够满足基本的业务需求,如果业务比较复杂只需要修改相关文件即可。

配置插件

pom.xml 文件中增加 mybatis-generator-maven-plugin 插件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>1.3.7</version>
    <configuration>
        <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
        <overwrite>true</overwrite>
        <verbose>true</verbose>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
            <version>4.1.5</version>
        </dependency>
    </dependencies>
</plugin>

注意: configurationFile 自动生成所需的配置文件路径

自动生成的配置

src/main/resources/generator/ 目录下创建 generatorConfig.xml 配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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>
    <!-- 引入数据库连接配置 -->
    <properties resource="jdbc.properties"/>
    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>
        <!-- 配置 tk.mybatis 插件 -->
        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <!-- 修改成我们之前自定义的MyMapper的包路径 -->
            <property name="mappers" value="tk.mybatis.mapper.MyMapper"/>
        </plugin>
        <!-- 配置数据库连接 -->
        <jdbcConnection
                driverClass="${jdbc.driverClass}"
                connectionURL="${jdbc.connectionURL}"
                userId="${jdbc.username}"
                password="${jdbc.password}">
        </jdbcConnection>
        <!-- 配置实体类存放路径 这里我们把pojo改成了domain,本质上是一样的 -->
        <javaModelGenerator targetPackage="com.funtl.hello.spring.boot.domain" targetProject="src/main/java"/>
        <!-- 配置 XML 存放路径 -->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>
        <!-- 配置 DAO 存放路径 dao=mapper -->
        <javaClientGenerator
                targetPackage="com.funtl.hello.spring.boot.mapper"
                targetProject="src/main/java"
                type="XMLMAPPER"/>
        <!-- 配置需要指定生成的数据库和表,% 代表所有表 -->
        <table catalog="myshop" tableName="%">
            <!-- 默认为 false,如果设置为 true,在生成的 SQL 中,table 名字不会加上 catalog 或 schema -->
            <property name="ignoreQualifiersAtRuntime" value="true"/>
            <!-- mysql 配置 -->
            <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
        </table>
    </context>
</generatorConfiguration>

配置数据源

src/main/resources 目录下创建 jdbc.properties 数据源配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://192.168.141.130:3306/myshop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
jdbc.username=root
jdbc.password=123456

插件自动生成

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mvn mybatis-generator:generate

# 输出如下
"C:\Program Files\Java\jdk1.8.0_181\bin\java.exe" -Dvisualvm.id=757855494303000 -Dmaven.multiModuleProjectDirectory=D:\Workspace\Study\other\hello-spring-boot "-Dmaven.home=C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.3\plugins\maven\lib\maven3" "-Dclassworlds.conf=C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.3\plugins\maven\lib\maven3\bin\m2.conf" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.3\lib\idea_rt.jar=64651:C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.3\plugins\maven\lib\maven3\boot\plexus-classworlds-2.5.2.jar" org.codehaus.classworlds.Launcher -Didea.version2019.1.3 --update-snapshots -s D:\apache-maven-3.6.1\conf\settings.xml org.mybatis.generator:mybatis-generator-maven-plugin:1.3.7:generate
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building hello-spring-boot 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- mybatis-generator-maven-plugin:1.3.7:generate (default-cli) @ hello-spring-boot ---
[INFO] Connecting to the Database
[INFO] Introspecting table myshop..%
[INFO] Generating Record class for table myshop..tb_item_param_item
[INFO] Generating Mapper Interface for table myshop..tb_item_param_item
[INFO] Generating SQL Map for table myshop..tb_item_param_item
[INFO] Generating Record class for table myshop..tb_item_cat
[INFO] Generating Mapper Interface for table myshop..tb_item_cat
[INFO] Generating SQL Map for table myshop..tb_item_cat
[INFO] Generating Record class for table myshop..tb_order
[INFO] Generating Mapper Interface for table myshop..tb_order
[INFO] Generating SQL Map for table myshop..tb_order
[INFO] Generating Record class for table myshop..tb_content
[INFO] Generating Mapper Interface for table myshop..tb_content
[INFO] Generating SQL Map for table myshop..tb_content
[INFO] Generating Record class for table myshop..tb_order_item
[INFO] Generating Mapper Interface for table myshop..tb_order_item
[INFO] Generating SQL Map for table myshop..tb_order_item
[INFO] Generating Record class for table myshop..tb_item
[INFO] Generating Mapper Interface for table myshop..tb_item
[INFO] Generating SQL Map for table myshop..tb_item
[INFO] Generating Record class for table myshop..tb_item_desc
[INFO] Generating Mapper Interface for table myshop..tb_item_desc
[INFO] Generating SQL Map for table myshop..tb_item_desc
[INFO] Generating Record class for table myshop..tb_item_param
[INFO] Generating Mapper Interface for table myshop..tb_item_param
[INFO] Generating SQL Map for table myshop..tb_item_param
[INFO] Generating Record class for table myshop..tb_order_shipping
[INFO] Generating Mapper Interface for table myshop..tb_order_shipping
[INFO] Generating SQL Map for table myshop..tb_order_shipping
[INFO] Generating Record class for table myshop..tb_user
[INFO] Generating Mapper Interface for table myshop..tb_user
[INFO] Generating SQL Map for table myshop..tb_user
[INFO] Generating Record class for table myshop..tb_content_category
[INFO] Generating Mapper Interface for table myshop..tb_content_category
[INFO] Generating SQL Map for table myshop..tb_content_category
[INFO] Saving file TbItemParamItemMapper.xml
[INFO] Saving file TbItemCatMapper.xml
[INFO] Saving file TbOrderMapper.xml
[INFO] Saving file TbContentMapper.xml
[INFO] Saving file TbOrderItemMapper.xml
[INFO] Saving file TbItemMapper.xml
[INFO] Saving file TbItemDescMapper.xml
[INFO] Saving file TbItemParamMapper.xml
[INFO] Saving file TbOrderShippingMapper.xml
[INFO] Saving file TbUserMapper.xml
[INFO] Saving file TbContentCategoryMapper.xml
[INFO] Saving file TbItemParamItem.java
[INFO] Saving file TbItemParamItemMapper.java
[INFO] Saving file TbItemCat.java
[INFO] Saving file TbItemCatMapper.java
[INFO] Saving file TbOrder.java
[INFO] Saving file TbOrderMapper.java
[INFO] Saving file TbContent.java
[INFO] Saving file TbContentMapper.java
[INFO] Saving file TbOrderItem.java
[INFO] Saving file TbOrderItemMapper.java
[INFO] Saving file TbItem.java
[INFO] Saving file TbItemMapper.java
[INFO] Saving file TbItemDesc.java
[INFO] Saving file TbItemDescMapper.java
[INFO] Saving file TbItemParam.java
[INFO] Saving file TbItemParamMapper.java
[INFO] Saving file TbOrderShipping.java
[INFO] Saving file TbOrderShippingMapper.java
[INFO] Saving file TbUser.java
[INFO] Saving file TbUserMapper.java
[INFO] Saving file TbContentCategory.java
[INFO] Saving file TbContentCategoryMapper.java
[WARNING] Column id, specified as an identity column in table myshop..tb_order, does not exist in the table.
[WARNING] Column id, specified as an identity column in table myshop..tb_item_desc, does not exist in the table.
[WARNING] Column id, specified as an identity column in table myshop..tb_order_shipping, does not exist in the table.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.892 s
[INFO] Finished at: 2019-06-24T03:40:09+08:00
[INFO] Final Memory: 30M/634M
[INFO] ------------------------------------------------------------------------
Process finished with exit code 0

其他插件

需要安装插件 MyBatisCodeHelperPro

我们从idea中搜索并安装,两个插件都安装完成后重启IDEA,使用IDEA自带的DB连接器连接我们的MYSQL,找到我们要生成的表,右键点击生成,如下图

从IDEA 安装的版本貌似要收费??? 还是用上面的配置生成的方式吧。

附:扩展阅读

完整配置案例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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>
<!-- 可以用于加载配置项或者配置文件,在整个配置文件中就可以使用${propertyKey}的方式来引用配置项
    resource:配置资源加载地址,使用resource,MBG从classpath开始找,比如com/myproject/generatorConfig.properties        
    url:配置资源加载地质,使用URL的方式,比如file:///C:/myfolder/generatorConfig.properties.
    注意,两个属性只能选址一个;
    另外,如果使用了mybatis-generator-maven-plugin,那么在pom.xml中定义的properties都可以直接在generatorConfig.xml中使用
<properties resource="" url="" />
 -->
 <!--MBG工作的时候,需要额外加载的依赖包
     location属性指明加载jar/zip包的全路径
<classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />
  -->
<!-- 
    context:生成一组对象的环境 
    id:必选,上下文id,用于在生成错误时提示
    defaultModelType:指定生成对象的样式
        1,conditional:类似hierarchical;
        2,flat:所有内容(主键,blob)等全部生成在一个对象中;
        3,hierarchical:主键生成一个XXKey对象(key class),Blob等单独生成一个对象,其他简单属性在一个对象中(record class)
    targetRuntime:
        1,MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample;
        2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample;
    introspectedColumnImpl:类全限定名,用于扩展MBG
-->
<context id="mysql" defaultModelType="hierarchical" targetRuntime="MyBatis3Simple" >
    <!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表;
        一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖
     -->
    <property name="autoDelimitKeywords" value="false"/>
    <!-- 生成的Java文件的编码 -->
    <property name="javaFileEncoding" value="UTF-8"/>
    <!-- 格式化java代码 -->
    <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
    <!-- 格式化XML代码 -->
    <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
    <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
    <property name="beginningDelimiter" value="`"/>
    <property name="endingDelimiter" value="`"/>
    <!-- 必须要有的,使用这个配置链接数据库
        @TODO:是否可以扩展
        # MySQL 8.x: com.mysql.cj.jdbc.Driver
     -->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql:///pss" userId="root" password="admin">
        <!-- 这里面可以设置property属性,每一个property属性都设置到配置的Driver上 -->
    </jdbcConnection>
    <!-- java类型处理器 
        用于处理DB中的类型到Java中的类型,默认使用JavaTypeResolverDefaultImpl;
        注意一点,默认会先尝试使用Integer,Long,Short等来对应DECIMALNUMERIC数据类型; 
    -->
    <javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
        <!-- 
            true:使用BigDecimal对应DECIMALNUMERIC数据类型
            false:默认,
                scale>0;length>18:使用BigDecimal;
                scale=0;length[10,18]:使用Long;
                scale=0;length[5,9]:使用Integer;
                scale=0;length<5:使用Short;
         -->
        <property name="forceBigDecimals" value="false"/>
    </javaTypeResolver>
    <!-- java模型创建器,是必须要的元素
        负责:1,key类(见context的defaultModelType);2,java类;3,查询类
        targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制;
        targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录
     -->
    <javaModelGenerator targetPackage="com._520it.mybatis.domain" targetProject="src/main/java">
        <!--  for MyBatis3/MyBatis3Simple
            自动为每一个生成的类创建一个构造方法,构造方法包含了所有的field;而不是使用setter;
         -->
        <property name="constructorBased" value="false"/>
        <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
        <property name="enableSubPackages" value="true"/>
        <!-- for MyBatis3 / MyBatis3Simple
            是否创建一个不可变的类,如果为true,
            那么MBG会创建一个没有setter方法的类,取而代之的是类似constructorBased的类
         -->
        <property name="immutable" value="false"/>
        <!-- 设置一个根对象,
            如果设置了这个根对象,那么生成的keyClass或者recordClass会继承这个类;在Table的rootClass属性中可以覆盖该选项
            注意:如果在key class或者record class中有root class相同的属性,MBG就不会重新生成这些属性了,包括:
                1,属性名相同,类型相同,有相同的getter/setter方法;
         -->
        <property name="rootClass" value="com._520it.mybatis.domain.BaseDomain"/>
        <!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
        <property name="trimStrings" value="true"/>
    </javaModelGenerator>
    <!-- 生成SQL map的XML文件生成器,
        注意,在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口(或者不用mapper接口),
            或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML的话,这个元素就必须配置
        targetPackage/targetProject:同javaModelGenerator
     -->
    <sqlMapGenerator targetPackage="com._520it.mybatis.mapper" targetProject="src/main/resources">
        <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
        <property name="enableSubPackages" value="true"/>
    </sqlMapGenerator>
    <!-- 对于mybatis来说,即生成Mapper接口,注意,如果没有配置该元素,那么默认不会生成Mapper接口 
        targetPackage/targetProject:同javaModelGenerator
        type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
            1ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML2MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中;
            3XMLMAPPER:会生成Mapper接口,接口完全依赖XML;
        注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPERXMLMAPPER
    -->
    <javaClientGenerator targetPackage="com._520it.mybatis.mapper" type="ANNOTATEDMAPPER" targetProject="src/main/java">
        <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
        <property name="enableSubPackages" value="true"/>
        <!-- 可以为所有生成的接口添加一个父接口,但是MBG只负责生成,不负责检查
        <property name="rootInterface" value=""/>
         -->
    </javaClientGenerator>
    <!-- 选择一个table来生成相关文件,可以有一个或多个table,必须要有table元素
        选择的table会生成一下文件:
        1SQL map文件
        2,生成一个主键类;
        3,除了BLOB和主键的其他字段的类;
        4,包含BLOB的类;
        5,一个用户生成动态查询的条件类(selectByExample, deleteByExample),可选;
        6,Mapper接口(可选)
        tableName(必要):要生成对象的表名;
        注意:大小写敏感问题。正常情况下,MBG会自动的去识别数据库标识符的大小写敏感度,在一般情况下,MBG会
            根据设置的schema,catalog或tablename去查询数据表,按照下面的流程:
            1,如果schema,catalog或tablename中有空格,那么设置的是什么格式,就精确的使用指定的大小写格式去查询;
            2,否则,如果数据库的标识符使用大写的,那么MBG自动把表名变成大写再查找;
            3,否则,如果数据库的标识符使用小写的,那么MBG自动把表名变成小写再查找;
            4,否则,使用指定的大小写格式查询;
        另外的,如果在创建表的时候,使用的""把数据库对象规定大小写,就算数据库标识符是使用的大写,在这种情况下也会使用给定的大小写来创建表名;
        这个时候,请设置delimitIdentifiers="true"即可保留大小写格式;
        可选:
        1,schema:数据库的schema;
        2,catalog:数据库的catalog;
        3,alias:为数据表设置的别名,如果设置了alias,那么生成的所有的SELECT SQL语句中,列名会变成:alias_actualColumnName
        4,domainObjectName:生成的domain类的名字,如果不设置,直接使用表名作为domain类的名字;可以设置为somepck.domainName,那么会自动把domainName类再放到somepck包里面;
        5,enableInsert(默认true):指定是否生成insert语句;
        6,enableSelectByPrimaryKey(默认true):指定是否生成按照主键查询对象的语句(就是getById或get);
        7,enableSelectByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询语句;
        8,enableUpdateByPrimaryKey(默认true):指定是否生成按照主键修改对象的语句(即update)9,enableDeleteByPrimaryKey(默认true):指定是否生成按照主键删除对象的语句(即delete);
        10,enableDeleteByExample(默认true):MyBatis3Simple为false,指定是否生成动态删除语句;
        11,enableCountByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询总条数语句(用于分页的总条数查询);
        12,enableUpdateByExample(默认true):MyBatis3Simple为false,指定是否生成动态修改语句(只修改对象中不为空的属性);
        13,modelType:参考context元素的defaultModelType,相当于覆盖;
        14,delimitIdentifiers:参考tableName的解释,注意,默认的delimitIdentifiers是双引号,如果类似MYSQL这样的数据库,使用的是`(反引号,那么还需要设置context的beginningDelimiter和endingDelimiter属性)
        15,delimitAllColumns:设置是否所有生成的SQL中的列名都使用标识符引起来。默认为false,delimitIdentifiers参考context的属性
        注意,table里面很多参数都是对javaModelGenerator,context等元素的默认属性的一个复写;
     -->
    <table tableName="userinfo" >
        <!-- 参考 javaModelGenerator 的 constructorBased属性-->
        <property name="constructorBased" value="false"/>
        <!-- 默认为false,如果设置为true,在生成的SQL中,table名字不会加上catalog或schema; -->
        <property name="ignoreQualifiersAtRuntime" value="false"/>
        <!-- 参考 javaModelGenerator 的 immutable 属性 -->
        <property name="immutable" value="false"/>
        <!-- 指定是否只生成domain类,如果设置为true,只生成domain类,如果还配置了sqlMapGenerator,那么在mapper XML文件中,只生成resultMap元素 -->
        <property name="modelOnly" value="false"/>
        <!-- 参考 javaModelGenerator 的 rootClass 属性 
        <property name="rootClass" value=""/>
         -->
        <!-- 参考javaClientGenerator 的  rootInterface 属性
        <property name="rootInterface" value=""/>
        -->
        <!-- 如果设置了runtimeCatalog,那么在生成的SQL中,使用该指定的catalog,而不是table元素上的catalog 
        <property name="runtimeCatalog" value=""/>
        -->
        <!-- 如果设置了runtimeSchema,那么在生成的SQL中,使用该指定的schema,而不是table元素上的schema 
        <property name="runtimeSchema" value=""/>
        -->
        <!-- 如果设置了runtimeTableName,那么在生成的SQL中,使用该指定的tablename,而不是table元素上的tablename 
        <property name="runtimeTableName" value=""/>
        -->
        <!-- 注意,该属性只针对MyBatis3Simple有用;
            如果选择的runtime是MyBatis3Simple,那么会生成一个SelectAll方法,如果指定了selectAllOrderByClause,那么会在该SQL中添加指定的这个order条件;
         -->
        <property name="selectAllOrderByClause" value="age desc,username asc"/>
        <!-- 如果设置为true,生成的model类会直接使用column本身的名字,而不会再使用驼峰命名方法,比如BORN_DATE,生成的属性名字就是BORN_DATE,而不会是bornDate -->
        <property name="useActualColumnNames" value="false"/>
        <!-- generatedKey用于生成生成主键的方法,
            如果设置了该元素,MBG会在生成的<insert>元素中生成一条正确的<selectKey>元素,该元素可选
            column:主键的列名;
            sqlStatement:要生成的selectKey语句,有以下可选项:
                Cloudscape:相当于selectKey的SQL为: VALUES IDENTITY_VAL_LOCAL()
                DB2       :相当于selectKey的SQL为: VALUES IDENTITY_VAL_LOCAL()
                DB2_MF    :相当于selectKey的SQL为:SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1
                Derby      :相当于selectKey的SQL为:VALUES IDENTITY_VAL_LOCAL()
                HSQLDB      :相当于selectKey的SQL为:CALL IDENTITY()
                Informix  :相当于selectKey的SQL为:select dbinfo('sqlca.sqlerrd1') from systables where tabid=1
                MySql      :相当于selectKey的SQL为:SELECT LAST_INSERT_ID()
                SqlServer :相当于selectKey的SQL为:SELECT SCOPE_IDENTITY()
                SYBASE      :相当于selectKey的SQL为:SELECT @@IDENTITY
                JDBC      :相当于在生成的insert元素上添加useGeneratedKeys="true"和keyProperty属性
        <generatedKey column="" sqlStatement=""/>
         -->
        <!-- 
            该元素会在根据表中列名计算对象属性名之前先重命名列名,非常适合用于表中的列都有公用的前缀字符串的时候,
            比如列名为:CUST_ID,CUST_NAME,CUST_EMAIL,CUST_ADDRESS等;
            那么就可以设置searchString为"^CUST_",并使用空白替换,那么生成的Customer对象中的属性名称就不是
            custId,custName等,而是先被替换为ID,NAME,EMAIL,然后变成属性:id,name,email;
            注意,MBG是使用java.util.regex.Matcher.replaceAll来替换searchString和replaceString的,
            如果使用了columnOverride元素,该属性无效;
        <columnRenamingRule searchString="" replaceString=""/>
         -->
         <!-- 用来修改表中某个列的属性,MBG会使用修改后的列来生成domain的属性;
             column:要重新设置的列名;
             注意,一个table元素中可以有多个columnOverride元素哈~
          -->
         <columnOverride column="username">
             <!-- 使用property属性来指定列要生成的属性名称 -->
             <property name="property" value="userName"/>
             <!-- javaType用于指定生成的domain的属性类型,使用类型的全限定名
             <property name="javaType" value=""/>
              -->
             <!-- jdbcType用于指定该列的JDBC类型 
             <property name="jdbcType" value=""/>
              -->
             <!-- typeHandler 用于指定该列使用到的TypeHandler,如果要指定,配置类型处理器的全限定名
                 注意,mybatis中,不会生成到mybatis-config.xml中的typeHandler
                 只会生成类似:where id = #{id,jdbcType=BIGINT,typeHandler=com._520it.mybatis.MyTypeHandler}的参数描述
             <property name="jdbcType" value=""/>
             -->
             <!-- 参考table元素的delimitAllColumns配置,默认为false
             <property name="delimitedColumnName" value=""/>
              -->
         </columnOverride>
         <!-- ignoreColumn设置一个MGB忽略的列,如果设置了改列,那么在生成的domain中,生成的SQL中,都不会有该列出现 
             column:指定要忽略的列的名字;
             delimitedColumnName:参考table元素的delimitAllColumns配置,默认为false
             注意,一个table元素中可以有多个ignoreColumn元素
         <ignoreColumn column="deptId" delimitedColumnName=""/>
         -->
    </table>
</context>
</generatorConfiguration>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
机器学习的5种“兵法"
在研究机器学习中,理论在其整个自上而下方法中试用于哪里呢? 在传统的机器学习教学中,丰富的数学理论知识对于理解机器学习是至关重要的,我的机器学习教学方法通常是教你如何端对端解决问题以及传输结构。 所以此方法哪里要用到理论知识了呢? 在此帖中你将了解我们是如何理解机器学习中的“理论”一词。提示:全部与算法有关。 你会发现一旦你可以熟练解决问题以及传输结果后,你就欲罢不能地想要对机器学习有更深入的理解以及获得更好的结果,没人能拉得住你。 最后,你会发现可以通过应用标准数据集练习机器学习的5个技巧,从而进一步加深
CDA数据分析师
2018/02/05
5800
机器学习的5种“兵法"
警惕!机器学习入门阶段易犯的5个错误
怎样进入机器学习领域没有定式。我们的学习方式都有些许不同,学习的目标也因人而异。 但一个共同的目标就是要能尽快上手。如果这也是你的目标,那么这篇文章为你列举了程序员们在通往机器学习高手道路上常见的五种错误。 1.将机器学习看得高不可攀 机器学习不过是另一堆技术的集合,你可以用它来解决复杂问题。这是一个飞速发展的领域,因此,机器学习的学术交流一般出现在学术期刊及研究生的课本里,让它看起来高不可攀又难于理解。 要想高效掌握机器学习,我们需要转变观念,从技术转到方法,由精确变为“足够好”,这也同样适用于程序员感兴
CDA数据分析师
2018/02/05
5710
谷歌机器学习白皮书全解析 43条黄金法则(一)
编者按:此文由AI科技评论独家编译,未经许可拒绝转载。此白皮书为谷歌总结的机器学习(ML)最优实践方法,浓缩了其多年技术积累与经验,尤其是 Youtube、Google Play 和 Google+ 等平台背后的 ML 算法开发、维护经历。谷歌于白皮书中总结了四十三条 ML 黄金法则,旨在帮助已经掌握了基础知识的开发者少走弯路。鉴于其珍贵程度与技术性,AI科技评论逐条做了严格尊重原文的翻译。若你已学习过机器学习课程,抑或有开发 ML 模型的经验,那么应当具备足够的背景知识理解这篇文章。 术语 以下是对文
AI科技评论
2018/03/09
1.1K0
谷歌机器学习白皮书全解析 43条黄金法则(一)
5种无需数学背景也可理解机器学习算法的技巧
在一种自顶向下的研究机器学习的方法中,理论应立足于何处?
Bon
2018/02/06
1.2K1
5种无需数学背景也可理解机器学习算法的技巧
理解任何机器学习算法的6个问题
有很多机器学习算法,每个算法都是一个独立的研究。
BAStriver
2018/02/06
7800
理解任何机器学习算法的6个问题
停止从头开始编写机器学习算法
从头开始实现算法是我看到初学者犯的最大的错误之一。
anthlu
2018/02/08
7420
停止从头开始编写机器学习算法
机器学习法则:(谷歌)机器学习工程最佳实践
机器学习(ML)最优实践方法,浓缩了其多年技术积累与经验,尤其是YouTube、Google Play和Google+ 等平台背后的ML算法开发、维护经历。谷歌于白皮书中总结了四十三条ML黄金法则,旨在帮助已经掌握了基础知识的开发者少走弯路。
机器学习AI算法工程
2019/10/28
5920
机器学习法则:(谷歌)机器学习工程最佳实践
动态 | 谷歌发布机器学习规则: 关于机器学习工程的最佳实践(上)
本文档旨在帮助已掌握机器学习基础知识的人员从 Google 机器学习的最佳实践中受益。以下为上篇,包含术语、概览以及在进行机器学习之前的第 1-20 条规则。
AI科技评论
2018/07/26
5020
《量子机器学习》作者 Peter Wittek 最新研究:高级量子资源可用于机器学习
【新智元导读】《量子机器学习》作者 Peter Wittek 的最新研究发现,与近似概率推理的经典启发式算法相比,量子协议的最新结果直接应用于 Gibbs 抽样,在速度上产生了指数级的提升,这一发现从
新智元
2018/03/26
7630
《量子机器学习》作者 Peter Wittek 最新研究:高级量子资源可用于机器学习
ML入门阶段易犯的5个错误
怎样进入机器学习领域没有定式。我们的学习方式都有些许不同,学习的目标也因人而异。但一个共同的目标就是要能尽快上手。如果这也是你的目标,那么这篇文章为你列举了程序员们在通往机器学习高手道路上常见的五种错误。 1. 将机器学习看得高不可攀   机器学习不过是另一堆技术的集合,你可以用它来解决复杂问题。这是一个飞速发展的领域,因此,机器学习的学术交流一般出现在学术期刊及研究生的课本里,让它看起来高不可攀又难于理解。   要想高效掌握机器学习,我们需要转变观念,从技术转到方法,由精确变为“足够好”,这也同样适用于
计算机视觉研究院
2018/04/17
1K0
机器学习近年来之怪现状
总体来说,机器学习(ML)的研究人员正在致力于数据驱动算法知识的创建与传播。在一篇论文中提到,研究人员迫切地想实现下列目标的任一个:理论性阐述可学习内容、深入理解经验严谨的实验或者构建一个有高预测精度的工作系统。虽然确定哪些知识值得探究是很主观的,但一旦主题确定,当论文为读者服务时,它对社区最有价值,它能创造基础知识并尽可能清楚地进行阐述。
机器之心
2018/07/26
2770
机器学习近年来之怪现状
计算机视觉研究入门全指南
后台有很多人问如何入门CV,这篇是旧文重发,文章很长,翻译自某外文博客,时间有点久,但道理是相通的,非常值得一读! 这篇文章从一个刚刚开始计算机视觉研究的初学者的角度,详细探讨了这个领域的文献、专家学者、研究组、博客,并重点说明了如何开始研究,如何选择方向,如何看论文、实现代码、调试代码等,并详细说明了研究计算机视觉应该如何学习机器学习等。是初入该领域的博士、学者、欲深入研究的开发者的非常值得详细考察和收藏的参考。 顶级会议和期刊 第一梯队顶级会议: CVPR, ECCV, ICCV, NIPS, IJCA
CV君
2019/12/27
7710
【机器学习】从零实现来理解机器学习算法
从零开始实现机器学习算法的好处 我推广了从零开始实现机器学习算法的观念。 我认为你可以学到很多关于算法是如何工作的。我也认为,作为一名开发者,它提供了一个学习用于机器学习的数学符号、描述以及直觉的桥梁。 在“从零开始实现机器学习算法的好处”这篇文章里,我已经讨论了从零实现机器学习算法的好处。 在那篇文章,我列出的好处如下: 你获取了知识; 它提供了一个起点; 拥有算法和代码的所属权。 在这篇文章中,我对如何利用现有的教程和书籍来缩短这个学习过程表达了一些个人看法。有一些用于初学的丰富资源,但也要堤防一些绊脚
陆勤_数据人网
2018/02/26
9250
【机器学习】从零实现来理解机器学习算法
机器学习问题框架的循序渐进指南
在过去的四年里(在谷歌,以及之前的Comet Labs),我有机会与世界各地的数百家初创公司和公司合作,帮助他们定义他们的ML战略,从问题框架到结束 - 到 -最终实施在生产中运行的ML模型。我们共同致力于部署模型以提高运营效率(例如内部工具,DevOps等),摆脱瓶颈(例如,为客户服务团队提供“神奇的力量”),开发基于ML的产品功能,并构建新产品一起。
iOSDevLog
2019/04/09
4670
机器学习问题框架的循序渐进指南
机器学习为何重要|通过计算一个句子的音节总数证明给你看
大数据文摘编译作品,转载具体要求见文末 翻译校对| 黄文畅 姜范波 Dr. Guo 对信息时代的大多数人来说,如果想通过电脑编程解决一些难题,你只有两种方法:查找式和启发式。 现在,便利的机器学习算
大数据文摘
2018/05/22
5290
[机器学习|理论&实践] 机器学习与生物启发式算法的融合
在现代科技的发展中,机器学习和生物启发式算法的结合为问题解决提供了一种创新的方式。本文将深入研究机器学习与生物启发式算法的融合,通过一个实例项目展示其部署过程,并探讨这一技术在未来的发展方向。
数字扫地僧
2024/01/20
3611
华为 AI 战略第一步:发布基于机器学习的智能网络控制系统 Network Mind
【新智元导读】华为诺亚方舟实验室昨天首次对外公布了 Network Mind——全球网络通信业界首个基于机器学习的网络大脑,实现智能化的网络控制与管理。Network Mind 原型的研发成功将促进机器学习、人工智能技术在通信网络的应用,推动下一代通信网络自动化、智能化的进程。 2016 年 10 月 26 日,华为诺亚方舟实验室对外公布了他们的最新研究成果——全球网络通信业界首个基于机器学习的网络大脑(Network Mind),可以自动检测、准确预测网络流量的变化,智能地实现网络流量的自动控制。 华为利
新智元
2018/03/26
1.3K0
华为 AI 战略第一步:发布基于机器学习的智能网络控制系统 Network Mind
机器学习自学指南
有很多途径来学习机器学习。有丰富的资源:有书籍,有课程可以参与,可以参加比赛,有大量供你使用的工具。在这篇文章中,我想围绕这些活动提出一些你机器学习之旅大致会有的阶段并在你程序员通往到机器学习大师之路上给出一个大概的顺序,以及在各个层次上有哪些可供你利用的资源
xixigiggling
2018/02/07
5790
如何实现机器学习算法
在代码中实现一个机器学习的算法能够使你更加了解该算法以及其工作机理。
CJ
2018/02/02
8820
AI+组合优化 |机器学习顶会ICLR/ICML/NeurIPS'23最新进展-MIP求解篇(附原文源码)
----ICLR、NIPS和ICML是人工智能领域的三个顶级学术会议,以下是它们的介绍:
决小策
2023/12/17
1.4K0
推荐阅读
相关推荐
机器学习的5种“兵法"
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档