MyBatis Generator生成代码的四种方式

码博客贴图太麻烦,下载项目和文档看吧 下载地址http://download.youkuaiyun.com/detail/a_piaoyouareminemine/9312837

项目目录如下:dubbo是上一篇博客里写的,代码就没删可以借鉴学习


由于MyBatis属于一种半自动的ORM框架,所以主要的工作就是配置Mapping映射文件,但是由于手写映射文件很容易出错,所以可利用MyBatis生成器自动生成实体类、DAO接口和Mapper映射文件。这样可以省去一部分的功夫,下面将介绍四种生成方式

参考文档http://mybatis.org/generator

中文译版http://generator.sturgeon.mopaas.com/

Maven依赖查询http://mvnrepository.com/

MyBatisGeneator 详解博客地址:http://my.oschina.net/flags/blog/359419#OSC_h3_6

需要的jar包:

1.      mybatis-3.2.7.jar

2.      mysql-connector-java-5.1.25-bin.jar

3.      mybatis-generator-core-1.3.2.jar

生成方式有以下几种:


第一种: 命令行式创建

文件存放目录:

 命令行首先进到文件夹下面

粘贴执行命令:java -jar mybatis-generator-core-1.3.2.jar -configfilegeneratorConfig.xml -overwrite

在配置的路径下可以看到生成的文件

 

generatorConfig.xml配置文件如下:

<?xml version="1.0"encoding="UTF-8"?> 

<!DOCTYPE generatorConfiguration 

 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration1.0//EN" 

 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> 

<generatorConfiguration> 

<!-- 数据库驱动--> 

   <classPathEntry location="mysql-connector-java-5.1.25-bin.jar"/> 

   <context id="MyTables" targetRuntime="MyBatis3"> 

       <commentGenerator> 

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

           <!-- 是否去除自动生成的注释 true:是: false:否 --> 

           <property name="suppressAllComments"value="true"/> 

       </commentGenerator> 

       <!--数据库链接URL,用户名、密码 --> 

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

       </jdbcConnection> 

       <javaTypeResolver> 

           <property name="forceBigDecimals"value="false"/> 

       </javaTypeResolver> 

       <!-- 生成模型的包名和位置--> 

       <javaModelGenerator targetPackage="model" targetProject="src/main/java"

           <property name="enableSubPackages" value="true"/> 

<!--             <propertyname="trimStrings" value="true"/>  -->

       </javaModelGenerator> 

       <!-- 生成映射文件的包名和位置--> 

       <sqlMapGenerator targetPackage="mapper"targetProject="src/main/java"> 

           <property name="enableSubPackages"value="true"/> 

       </sqlMapGenerator> 

       <!-- 生成DAO的包名和位置--> 

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

           <property name="enableSubPackages" value="true"/> 

       </javaClientGenerator> 

       <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名--> 

       <table tableName="user" domainObjectName="User"enableCountByExample="false" enableUpdateByExample="false"enableDeleteByExample="false" enableSelectByExample="false"selectByExampleQueryId="false"></table>

   </context> 

</generatorConfiguration> 

 

第二种: IDEA 14中使用mybatis-generator-maven-plugin插件自动生成MyBatis代码

1.        首先需要创建一个Maven项目

2.        修改pom.xml文件

<build>

       <finalName>generatorConfig.xml</finalName>

        <plugins>

            <plugin>

               <groupId>org.mybatis.generator</groupId>

               <artifactId>mybatis-generator-maven-plugin</artifactId>

               <version>1.3.2</version>

                <configuration>

                   <configurationFile>src\main\resources\conf\generatorConfig.xml</configurationFile>

                   <verbose>true</verbose>

                    <overwrite>true</overwrite>

                </configuration>

                <executions>

                    <execution>

                        <id>GenerateMyBatis Artifacts</id>

                        <goals>

                           <goal>generate</goal>

                        </goals>

                    </execution>

                </executions>

                <dependencies>

                    <dependency>

                       <groupId>org.mybatis.generator</groupId>

                        <artifactId>mybatis-generator-core</artifactId>

                       <version>1.3.2</version>

                    </dependency>

                </dependencies>

            </plugin>

        </plugins>

    </build>

3.        配置Runner>VMOptions 、JRE、Environment variables、Properties

-Dmaven.multiModuleProjectDirectory=$M2_HOME

M2_HOME  D:\Tool\apache-maven-3.3.3

4.        在Intellij IDEA添加一个“Run运行”选项,使用maven运行mybatis-generator-maven-plugin插件 

 

之后弹出运行配置框,为当前配置配置一个名称,这里其名为"generator",然后在“Command line” 选项中输入“mybatis-generator:generate  -e

加了“-e ”是为了让该插件输出详细信息,这样可以定位问题

在Run选项中会出现generator选项

5.        配置generatorConfig.xml

<?xmlversion="1.0" encoding="UTF-8"?>

<!DOCTYPEgeneratorConfiguration

        PUBLIC "-//mybatis.org//DTDMyBatis Generator Configuration 1.0//EN"

       "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>

 

    <!--导入属性配置 -->

    <propertiesresource="\conf\generator.properties"></properties>

 

    <!--指定特定数据库的jdbc驱动jar包的位置 -->

    <!--<classPathEntrylocation="C:\\Users\\wanghaiyang\\.m2\\mvn_repository\\mysql\\mysql-connector-java\\5.1.13\\mysql-connector-java-5.1.13.jar"/>-->

    <classPathEntrylocation="${jdbc.driverLocation}"/>

 

    <context id="default"targetRuntime="MyBatis3">

 

        <!-- optional,旨在创建class时,对注释进行控制-->

        <commentGenerator>

            <propertyname="suppressDate" value="true"/>

            <!-- 是否去除自动生成的注释true:是: false:否 -->

            <propertyname="suppressAllComments" value="true"/>

        </commentGenerator>

 

 

        <!--jdbc的数据库连接 -->

        <jdbcConnectiondriverClass="${jdbc.driverClass}"connectionURL="${jdbc.connectionURL}"userId="${jdbc.userId}" password="${jdbc.password}">

        </jdbcConnection>

 

        <!-- <jdbcConnectiondriverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost/ome" userId="root"password="123"></jdbcConnection>-->

 

 

        <!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制-->

        <javaTypeResolver>

            <propertyname="forceBigDecimals" value="false"/>

        </javaTypeResolver>

 

        <!-- Model模型生成器,用来生成含有主键key的类,记录类

            targetPackage     指定生成的model生成所在的包名

            targetProject     指定在该项目下所在的路径

        -->

        <javaModelGeneratortargetPackage="com.dubbo.model"targetProject="src/main/java">

            <!-- 是否对model添加 构造函数 -->

            <propertyname="constructorBased" value="true"/>

 

            <!-- 是否允许子包,即targetPackage.schemaName.tableName-->

            <propertyname="enableSubPackages" value="false"/>

 

            <!-- 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法,只有构造方法-->

            <propertyname="immutable" value="false"/>

 

            <!-- 给Model添加一个父类 -->

            <propertyname="rootClass" value="com.dubbo.model"/>

 

            <!-- 是否对类CHAR类型的列的数据进行trim操作 -->

            <property name="trimStrings"value="false"/>

        </javaModelGenerator>

 

        <!--Mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 -->

        <sqlMapGeneratortargetPackage="com.dubbo.mapper"targetProject="src/main/java">

            <propertyname="enableSubPackages" value="false"/>

        </sqlMapGenerator>

 

 

        <!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码

               type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象

                type="MIXEDMAPPER",生成基于注解的JavaModel 和相应的Mapper对象

                type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口

        -->

        <javaClientGeneratortargetPackage="com.dubbo.dao" targetProject="src/main/java"type="XMLMAPPER">

            <propertyname="enableSubPackages" value=""/>

            <!--

                    定义Maper.java 源代码中的ByExample()方法的可视性,可选的值有:

                    public;

                    private;

                    protected;

                    default

                    注意:如果targetRuntime="MyBatis3",此参数被忽略

             -->

            <propertyname="exampleMethodVisibility" value=""/>

 

            <!--方法名计数器Important note: this property is ignored if the target runtime isMyBatis3.-->

            <propertyname="methodNameCalculator" value=""/>

 

            <!--为生成的接口添加父接口-->

            <property name="rootInterface"value=""/>

 

        </javaClientGenerator>

 

 

        <table tableName="user"domainObjectName="User" enableCountByExample="false"enableUpdateByExample="false"

              enableDeleteByExample="false" enableSelectByExample="false"selectByExampleQueryId="false"></table>

        <!--       <table tableName="user"schema="ome">

 

                   &lt;!&ndash;optional   , only for mybatis3 runtime

                        自动生成的键值(identity,或者序列值)

                      如果指定此元素,MBG将会生成<selectKey>元素,然后将此元素插入到SQLMap的<insert> 元素之中

                      sqlStatement 的语句将会返回新的值

                      如果是一个自增主键的话,你可以使用预定义的语句,或者添加自定义的SQL语句. 预定义的值如下:

                         Cloudscape    This will translate to: VALUESIDENTITY_VAL_LOCAL()

                         DB2:      VALUES IDENTITY_VAL_LOCAL()

                         DB2_MF:       SELECT IDENTITY_VAL_LOCAL() FROMSYSIBM.SYSDUMMY1

                         Derby:        VALUES IDENTITY_VAL_LOCAL()

                         HSQLDB:   CALL IDENTITY()

                         Informix:     select dbinfo('sqlca.sqlerrd1') fromsystables where tabid=1

                         MySql:        SELECT LAST_INSERT_ID()

                         SqlServer:    SELECT SCOPE_IDENTITY()

                         SYBASE:   SELECT @@IDENTITY

                         JDBC:     This will configure MBG to generate codefor MyBatis3 suport of JDBC standard generated keys. This is a databaseindependent method of obtaining the value from identity columns.

                         identity: 自增主键  If true, then the column is flagged as anidentity column and the generated <selectKey> element will be placedafter the insert (for an identity column). If false, then the generated <selectKey>will be placed before the insert (typically for a sequence).

 

                   &ndash;&gt;

                   <generatedKeycolumn="" sqlStatement="" identity=""type=""/>

 

 

                   &lt;!&ndash;optional.

                           列的命名规则:

                           MBG使用<columnRenamingRule> 元素在计算列名的对应名称之前,先对列名进行重命名,

                           作用:一般需要对BUSI_CLIENT_NO前的BUSI_进行过滤

                           支持正在表达式

                            searchString 表示要被换掉的字符串

                            replaceString 则是要换成的字符串,默认情况下为空字符串,可选

                   &ndash;&gt;

                   <columnRenamingRulesearchString="" replaceString=""/>

 

 

 

                   &lt;!&ndash;optional.告诉 MBG 忽略某一列

                           column,需要忽略的列

                          delimitedColumnName:true ,匹配column的值和数据库列的名称大小写完全匹配,false 忽略大小写匹配

                           是否限定表的列名,即固定表列在Model中的名称

                   &ndash;&gt;

                   <ignoreColumncolumn="delete" delimitedColumnName="true" />

 

 

                  &lt;!&ndash;optional.覆盖MBG对Model 的生成规则

                        column: 数据库的列名

                        javaType: 对应的Java数据类型的完全限定名

                        在必要的时候可以覆盖由JavaTypeResolver计算得到的java数据类型. Forsome databases, this is necessary to handle "odd" database types(e.g. MySql's unsigned bigint type should be mapped to java.lang.Object).

                        jdbcType:该列的JDBC数据类型(INTEGER,DECIMAL, NUMERIC, VARCHAR, etc.),该列可以覆盖由JavaTypeResolver计算得到的Jdbc类型,对某些数据库而言,对于处理特定的JDBC 驱动癖好很有必要(e.g. DB2's LONGVARCHAR type should be mapped to VARCHAR foriBATIS).

                        typeHandler:

 

                   &ndash;&gt;

                   <columnOverridecolumn="" javaType=""   jdbcType="" typeHandler=""  delimitedColumnName="" />

 

              </table>-->

    </context>

</generatorConfiguration>

6.        配置generator.properties

jdbc.driverLocation=C:\\Users\\wanghaiyang\\.m2\\mvn_repository\\mysql\\mysql-connector-java\\5.1.13\\mysql-connector-java-5.1.13.jar

jdbc.driverClass=com.mysql.jdbc.Driver

jdbc.connectionURL=jdbc:mysql://localhost:3306/ome

jdbc.userId=root

jdbc.password=123

7.        选择generator运行

会在项目文件夹src>main>java下产生配置的文件夹model、mapper、dao

 

第三种方式 通过MybatisGenerator类和配置文件生成

1.        配置文件使用上面的generatorConfig.xml

2.        创建MybatisGeneratorUtil类

importorg.mybatis.generator.api.MyBatisGenerator;

importorg.mybatis.generator.config.Configuration;

importorg.mybatis.generator.config.xml.ConfigurationParser;

importorg.mybatis.generator.exception.InvalidConfigurationException;

importorg.mybatis.generator.exception.XMLParserException;

importorg.mybatis.generator.internal.DefaultShellCallback;

 

importjava.io.File;

importjava.io.IOException;

importjava.sql.SQLException;

importjava.util.ArrayList;

importjava.util.List;

/**

 * Created by why on 2015/11/29.

 */

publicclass MybatisGeneratorUtil {

    public static void main(String[] args) {

        try {

            System.out.println("startgenerator ...");

            List<String> warnings = newArrayList<String>();

            boolean overwrite = true;

            File configFile = new File(MybatisGeneratorUtil.class.getResource("/conf/generatorConfig.xml").getFile());

            ConfigurationParser cp = newConfigurationParser(warnings);

 

            Configuration config =cp.parseConfiguration(configFile);

            DefaultShellCallback callback = newDefaultShellCallback(overwrite);

            MyBatisGenerator myBatisGenerator =new MyBatisGenerator(config, callback, warnings);

            myBatisGenerator.generate(null);

            System.out.println("endgenerator!");

        } catch (IOException e) {

            e.printStackTrace();

        } catch (XMLParserException e) {

            e.printStackTrace();

        } catch (InterruptedException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        } catch (InvalidConfigurationExceptione) {

            e.printStackTrace();

        }

    }

}

第四种方式 通过GeneratorAntTask类和配置文件生成

添加类

importorg.mybatis.generator.ant.GeneratorAntTask;

 

/**

 * Created by why on 2015/11/29.

 */

publicclass AntGenerator {

    public static void main(String[] args) {

        try {

            GeneratorAntTask task = newGeneratorAntTask();

           task.setConfigfile("src/main/resources/conf/generatorConfig.xml");  //(配置文件具体path)

            task.execute();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

 

 

测试生成代码的可用性

1.        添加mybatis配置文件

                   <?xmlversion="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration

       PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

       "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

   <environments default="development">

       <environment id="development">

           <transactionManager type="JDBC" />

           <dataSource type="POOLED">

                <propertyname="driver" value="com.mysql.jdbc.Driver" />

                <propertyname="url" value="jdbc:mysql://localhost:3306/ome" />

                <propertyname="username" value="root" />

                <propertyname="password" value="123" />

           </dataSource>

       </environment>

   </environments>

   <mappers>

       <mapper resource="UserMapper.xml" ></mapper>

   </mappers>

</configuration>

2.        新建测试类

packagecom.dubbo.testgenerator;

 

importcom.dubbo.client.UserMapper;

importcom.dubbo.model.User;

 

importorg.apache.ibatis.io.Resources;

importorg.apache.ibatis.session.SqlSession;

importorg.apache.ibatis.session.SqlSessionFactory;

importorg.apache.ibatis.session.SqlSessionFactoryBuilder;

 

importjava.io.IOException;

importjava.io.Reader;

 

 

/**

 * Created by wanghaiyang on 2015/11/30.

 */

publicclass Test {

 

    public static void main(String[] args) {

        String resource ="conf/mybatis.xml";

        Reader reader = null;

 

        try {

            reader =Resources.getResourceAsReader(resource);

        } catch (IOException e) {

            e.printStackTrace();

        }

 

        SqlSessionFactory sqlMapper = newSqlSessionFactoryBuilder().build(reader);

        SqlSession sqlSession = sqlMapper.openSession();

 

        try {

            UserMapper mapper =sqlSession.getMapper(UserMapper.class);

            User user =mapper.selectByPrimaryKey(1);

           System.out.println(user.toString());

        } finally {

            sqlSession.close();

        }

    }

}




评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值