Maven工程使用mybatis插件generator生成映射文件和接口

  使用ssm框架开发,不免被一堆xml文件和接口的编写而感到厌烦,mybatis generator这个插件可以帮你从繁琐接口和xml编写中解放出来.

  • 准备工作
    除mybatis包以外,需要以下jar包:
     a.ojdbc6.jar(MySql数据库替换为MySql的驱动)
     b.mybatis-generator-core.jar
     c.tk.mybatis.mapper.jar
    1.pom文件中添加插件
      在<build>中添加<plugins>管理插件:
<plugins>
    <plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.3.2</version>
        <configuration>
            <!--generator 工具配置文件的位置-->generatorConfig.xml
            <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
            <!--允许移动生成的文件-->
            <verbose>true</verbose>
            <!--允许覆盖生成的文件-->
            <overwrite>true</overwrite>
        </configuration>
        <dependencies>
            <!--数据库驱动-->
            <dependency>
                <groupId>com.oracle</groupId>
                <artifactId>ojdbc6</artifactId>
                <version>11.2</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-core</artifactId>
                <version>1.3.5</version>
            </dependency>
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper</artifactId>
                <version>4.0.4</version>
            </dependency>
        </dependencies>
    </plugin>
</plugins>

2.配置generator 工具配置文件–>generatorConfig.xml:

<generatorConfiguration>
  <!--执行generator插件生成文件的命令:call mvn mybatis-generator:generate -e -->
    <!--引入配置文件-->
    <properties resource="mybatisGeneratorinit.properties"></properties>
    <!-- 由于在pom.xml中加入插件时已经配置数据库驱动包,所以此处不必配置了-->
    <!-- <classPathEntry location="D:\generator\mysql-connector-java-5.1.34.jar"  数据库的jdbc驱动 可选/> -->
    <!--<classPathEntry location="E:\Database\Oracle\jdbc\lib\ojdbc14.jar" />-->

    <!--一个数据库一个context-->
    <!--defaultModelType:指定生成对象的样式
    1,conditional:默认值 与hierachical模型相似,如果一个实体类只包含一个实体类,则不会单独生成此实体类,
    如果一个表的主键只有一个实体类,会将这个字段合并到基本实体类中;
    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="Mytables" targetRuntime="MyBatis3Simple" defaultModelType="conditional">
        <!--自动识别关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表
        一般保留默认值,遇到数据库关键字(java关键字),使用columnOverride覆盖-->
        <property name="autoDelimitKeywords" value="true"></property>
        <!--生成java文件的编码-->
        <property name="javaFileEncoding" value="utf-8"></property>
        <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如Oracle就是 双引号 MySQL时反引号  -->
       <!-- <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>-->

        <!--格式化Java代码-->
        <property name="javaFormat" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
        <!--格式化xml代码-->
        <property name="xmlFormat" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>

        <!--通用mapper 插件  生成的mapper会继承这个类-->
        <plugin type="${mapper.plugin}">
            <property name="mappers" value="${mapper.mapper}"/>
        </plugin>
        <!--注释-->
        <commentGenerator>
            <property name="suppressAllComments" value="false"></property><!--是否取消注释-->
            <property name="suppressDate" value="true"></property><!--是否生成注释带时间戳-->
        </commentGenerator>
        <!--jdbc连接-->
        <jdbcConnection driverClass="${jdbc_driver}" connectionURL="${jdbc_url}"
                        userId="${jdbc_user}" password="${jdbc_password}"></jdbcConnection>

        <!--类型转换-->
        <!-- java类型处理器
        用于处理DB中的类型到Java中的类型,默认使用JavaTypeResolverDefaultImpl;
        注意一点,默认会先尝试使用Integer,Long,Short等来对应DECIMAL和 NUMERIC数据类型;
        -->
        <javaTypeResolver>
            <!--是否使用bigDecimal,false可以自动转化一下类型(long,Integer,short,etc.)-->
            <property name="forceBigDecimals" value="false"></property>
        </javaTypeResolver>

        <!--<javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
            true:使用BigDecimal对应DECIMAL和 NUMERIC数据类型
            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> -->
        <!--生成实体类的地址-->
        <javaModelGenerator targetPackage="cn.txx.domain" targetProject="${project}">
            <!-- for MyBatis3/MyBatis3Simple
            自动为每一个生成的类创建一个构造方法,构造方法包含了所有的field;而不是使用setter;
            -->
            <property name="constructorBased" value="false"/>
            <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
            <property name="enableSubPackages" value="false"></property>
            <!-- 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"></property>
        </javaModelGenerator>
        <!--生成mapxml文件-->
        <sqlMapGenerator targetPackage="mappers" targetProject="${resources}">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>
        <!--生成mapxml对应的client,就是接口dao-->
        <!-- 对于mybatis来说,即生成Mapper接口,注意,如果没有配置该元素,那么默认不会生成Mapper接口
        targetPackage/targetProject:同javaModelGenerator
        type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
                 1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML;
                 2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中;
                 3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML;
             注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER
         -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="cn.txx.mapper" targetProject="${project}">
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <table tableName="emp" domainObjectName="Emp" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
    </context>
</generatorConfiguration>

相关属性配置参考:脚本之家关于Generator的使用
最后是我的properties文件:

#Generator configuration
#dao类和实体类的位置
project=src/main/java
#mapper文件的位置 xml文件
resources=src/main/resources
#根据数据库生成对应的domainl类,dao类,mapper.xml
jdbc_driver=oracle.jdbc.driver.OracleDriver
jdbc_url=jdbc:oracle:thin:@127.0.0.1:1521/XE
jdbc_user=bdms
jdbc_password=bdms
#通用mapper插件
mapper.plugin=tk.mybatis.mapper.generator.MapperPlugin
#生成通过dao文件需要继承的类
mapper.mapper=tk.mybatis.mapper.common.Mapper

请各位大佬多多指教.
ps:机会多半都是自己放走的.

猜你喜欢

转载自blog.csdn.net/labviewxx/article/details/83031526