mybatis基础学习(六)——自动代码生成器使用

##mybatis自动代码生成器

###1、maven下运行自动生成器
mybatis提供了一个自动化代码生成器,可以直接根据数据库表生成对应的实体类、实体接口、xml配置文件,这里针对maven下的使用进行举例:
首先在pom.xml中进行配置:

        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.3</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>5.1.38</version>
                </dependency>
                <dependency>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-core</artifactId>
                    <version>1.3.3</version>
                </dependency>
            </dependencies>
        </plugin>复制代码

首先指定了插件依赖于mybatis-generator-maven-plugin,同时通过<configuration>标签指定了代码生成器的配置文件全路径。同时配上插件依赖的工具包。
generatorConfig.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">
<generatorConfiguration>
    <context id="mygenerator" targetRuntime="Mybatis3Simple" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="addRemarkComments" value="true"/>
        </commentGenerator>

        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mybatis"
                        userId="root"
                        password="root">
        </jdbcConnection>

        <javaModelGenerator targetPackage="test.model"
                            targetProject="src/main/java">
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <sqlMapGenerator targetPackage="test.xml"
                         targetProject="src/main/resources"/>

        <javaClientGenerator type="XMLMAPPER" targetPackage="test.dao"
                             targetProject="src/main/java"/>

        <table tableName="%">
            <generatedKey column="id" sqlStatement="Mysql"/>
        </table>
    </context>
</generatorConfiguration>复制代码

具体标签的使用说明在下面,然后选择maven projects——>Plugins——>mybatis-generator,单击运行插件,则可以生成对应的实体、接口和xml文件。

###2、XML配置详解
XML的dtd文件引用如下:
<?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>:

<generatorConfiguration>
<!--具体配置内容-->
</generatorConfiguration>复制代码

这两部分是必备内容。在<generatorConfiguration>标签下是三个子标签:properties、classPathEntry和context,这三者的配置顺序和这里的列举顺序也必须是一致的。

######properties标签(0 or 1)
resource:指定classpath下的属性文件,类似com/myproject/generatorConfig.properties这样的属性值。
url:指定文件系统上的特定位置,例如file:///C:/myfolder/generatorConfig.properties。

######classPathEntry标签(0 or N)
常见的用法是通过属性location 指定驱动的路径,代码如下:
<classPathEntry location="E:\mysql\mysql-connectorjava-5.1.29.jar"/>

######context标签(1 or N)
context标签用于指定生成一组对象的环境。例如指定要连接的数据库,要生成对象的类型和要处理的数据库中的表。
属性:
id:必选属性,用来唯一确定该标签。

defaultModelType:定义了如何生成实体类。该属性有以下可选值:

conditional:默认值,和下面的hierarchical 类似,如果一个表的主键只有一个字段,那么不会为该字段生成单独的实体类,而是会将该字段合并到基本实体类中。
flat:该模型只为每张表生成一个实体类。这个实体类包含表中的所有字段。这种模型最简单,推荐使用。
hierarchical:如果表有主键,那么该模型会产生一个单独的主键实体类,如果表还有BLOB 字段,则会为表生成一个包含所有BLOB 字段的单独的实体类,然后为所有其他的字段另外生成一个单独的实体类。MBG 会在所有生成的实体类之间维护一个继承关系。复制代码

targetRuntime:此属性用于指定生成的代码的运行时环境,支持以下可选值:

MyBatis3 : 默认值。
MyBatis3Simple : 这种情况不会生成与Example 相关的方法。复制代码

introspectedColumnimpl:该参数可以指定扩展org.mybatis.generator.api.Introspected Column 类的实现类。

一般情况下,使用如下配置即可:
<context id="Mysql" defaultModelType="flat">
如果不希望生成和Examp le 查询有关的内容,则可以按照如下方法进行配置:
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">

######context子标签:

property (0 or N)
autoDelimitKeywords:自动给关键字添加分隔符的属性。
beginningDelimiter:配置前置分隔符的属性。
endingDelimiter:配置后置分隔符的属性。
例:
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
    <property name="autoDelimitKeywords" value="true"/>
    <property name="beginningDelimiter" value="`"/>
    <property name="endingDelimiter" value="`"/>
</context>
javaFileEncoding:设置要使用的Java 文件的编码。复制代码

plugin (0 or N)
主要用于定义插件,未做深入研究和使用。

commentGenerator (0 or 1)
用来配置如何生成注释信息。

type:指定自己编写定义注释的类, 需要实现对应接口且有一个默认的空的构造方法。
suppressAllComments :阻止生成注释,默认为false 。
suppressDate : 阻止生成的注释包含时间戳,默认为false 。
addRemarkComments :注释是否添加数据库表的备注信息,默认为false复制代码

jdbcConnection (1)
指定要连接的数据库信息

driverClass : 访问数据库的JDBC 驱动程序的完全限定类名。(必选)
connectionURL : 访问数据库的JDBC 连接URL。(必选)
userId :访问数据库的用户ID 。
password : 访问数据库的密码。
该标签还可以接受多个property子标签,这里配置的property属性都会添加到JDBC驱动的属性中(使用proprety标签的name属性反射赋值) 。复制代码

javaTypeResolver ( 0 or 1)
指定JDBC 类型和Java 类型如何转换
一般不用配置

javaModelGenerator ( 1 )
用来控制生成的实体类

targetPackage:生成实体类存放的包名。一般就是放在该包下,实际还会受到其他配置的影响。(必选)
targetProject:指定目标项目路径,可以使用相对路径或绝对路径。(必选)
还支持以下几个property 子标签属性:
constructorBased:该属性只对MyBatis3有效,如果为true就会使用构造方法入参,如果为false就会使用setter方式。默认为falseenableSubPackages:如果为true,生成器会根据catalog和schema 来生成子包。如果为false就会直接使用targetPackage属性。默认为false 。
immutable:用来配置实体类属性是否可变。如果设置为true,那么constructorBased不管设置成什么,都会使用构造方法入参,并且不会生成setter方法。如果为false,实体类属性就可以改变。默认为false 。
rootClass:设置所有实体类的基类。如果设置,则需要使用类的全限定名称。
trimStrings:判断是否对数据库查询结果进行trim操作,默认值为false复制代码

sqlMapGenerator (0 or 1)
用于配置SQL 映射生成器(Mapper.xml文件)的属性

targetPackage:生成SQL映射文件(XML文件)存放的包名。一般就是放在该包下,实际还会受到其他配置的影响。(必选)
targetProject:指定目标项目路径,可以使用相对路径或绝对路径。(必选)
还有一个可选的property 子标签属性enableSubPackages,如果为true ,生成器会根据catalog和schema来生成子包。如果为false 就会直接用targetPackage属性,默认为false复制代码

javaClientGenerator (0 or 1)
用于配置Java客户端生成器(Mapper接口)的属性

type:用于选择客户端代码(Mapper接口)生成器,用户可以自定义实现, 需要继承指定的类,且必须有一个默认空的构造方法。。该属性提供了以下预设的代码生成器:(必选)
MyBatis3:
    ANNOTATEDMAPPER:基于注解的Mapper接口,不会有对应的XML 映射文件。
    MIXEDMAPPER:XML和注解的混合形式,上面这种情况中的SQLProvider注解方法会被XML方式替代。
    XMLMAPPER:所有的方法都在XML中,接口调用依赖XML文件。
MyBatis3Simple:
    ANNOTATEDMAPPER:基于注解的Mapper接口,不会有对应的XML 映射文件。
    XMLMAPPER:所有的方法都在XML中,接口调用依赖XML文件。
targetPackage:生成Mapper接口存放的包名。一般就是放在该包下,实际还会受到其他配置的影响。(必选)
targetProject:指定目标项目路径,可以使用相对路径或绝对路径。(必选)
还有一个可选属性implementationPackage,如果指定了该属性,Mapper 接口的实现类就会生成在这个属性指定的包中。复制代码

table (1 or N)
配置需要通过内省数据库的表,只有在table中配置过的表,才能经过上述其他配置生成最终的代码,该标签至少要配置一个,可以配置多个。
如要生成全部的表,可以如下配置:
<table tableName ="%"/>

tableName:指定要生成的表名,可以使用SQL通配符匹配多个表。(必选)
schema:数据库的schema,可以使用SQL通配符匹配。如果设置了该值,生成SQL的表名会变成如schema.tableName的形式。
catalog:数据库的catalog,如果设置了该值,生成SQL的表名会变成如catalog.tableName 的形式。
alias:如果指定,这个值会用在生成的select查询SQL表的别名和列名上,例如alias_actualColumnName (别名_实际列名)。
domainObjectName:生成对象的基本名称。如果没有指定,生成器会自动根据表名来生成名称。
enableXXX:XXX代表多种SQL方法,该属性用来指定是否生成对应的xxx语句。
...
table标签的可选属性较多,不多赘述,如有需要再查询详细文档进行编写...复制代码

转载于:https://juejin.im/post/5a0cf9f45188253ee45afe0d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值