利用Mybatis Generator自动生成Mybatis的相关代码

    xiaoxiao2021-12-14  20

    本文将简要介绍怎样利用Mybatis Generator自动生成Mybatis的相关代码: 一、构建一个环境:  1. 首先创建一个表:

     

    Sql代码    CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);   [sql]  view plain  copy   CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);    

    2. 然后注入数据

    Sql代码    insert into pet values('Fluffy''Harold''cat''f''1993-02-04'null);   insert into pet values('Claws''Gwen''cat''m''1994-03-17'null);   insert into pet values('Buffy''Harold''dog''f''1989-05-13'null);   insert into pet values('Fang''Benny''dog''m''1990-08-27'null);   insert into pet values('Bowser''Diane''dog''m''1979-08-31''1995-07-29');   insert into pet values('Chirpy''Gwen''bird''f''1998-09-11'null);   insert into pet values('Whistler''Gwen''bird'null'1997-12-09'null);   insert into pet values('Slim''Benny''snake''m''1996-04-29'null);   [sql]  view plain  copy   insert into pet values('Fluffy''Harold''cat''f''1993-02-04'null);   insert into pet values('Claws''Gwen''cat''m''1994-03-17'null);   insert into pet values('Buffy''Harold''dog''f''1989-05-13'null);   insert into pet values('Fang''Benny''dog''m''1990-08-27'null);   insert into pet values('Bowser''Diane''dog''m''1979-08-31''1995-07-29');   insert into pet values('Chirpy''Gwen''bird''f''1998-09-11'null);   insert into pet values('Whistler''Gwen''bird'null'1997-12-09'null);   insert into pet values('Slim''Benny''snake''m''1996-04-29'null);  

     

    注:这里的sql例子来自 http://dev.MySQL.com/doc/refman/5.5/en/creating-tables.html 3. 在 Mybatis 主页 http://code.google.com/p/mybatis/ 上下载 Mybatis mybatis-generator-core [本文使用的是 1.3.0 版本]。当然运行 mybatis-generator 生成的代码还需要下载 mybatis 的 jar 包[本例使用的是 3.0.2 版本],和相关数据库的 jdbc [本文中使用的是MySql的jdbc] 。

     

    二、运行 mybatis-generator  1. 要运行 generator ,需要给 generator 提供一个配置文件,指定其生成的数据库的相关信息。 以下是一个示例:

    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>       <classPathEntry location="mysql-connector-java-5.1.6-bin.jar" />          <context id="DB2Tables" targetRuntime="MyBatis3">              <commentGenerator>               <property name="suppressDate" value="true" />           </commentGenerator>              <jdbcConnection driverClass="com.mysql.jdbc.Driver"               connectionURL="jdbc:mysql://localhost/test" userId="qgd" password="123456">           </jdbcConnection>              <javaTypeResolver>               <property name="forceBigDecimals" value="false" />           </javaTypeResolver>              <javaModelGenerator targetPackage="test.model"               targetProject="../src/main/java">               <property name="enableSubPackages" value="true" />               <property name="trimStrings" value="true" />           </javaModelGenerator>              <sqlMapGenerator targetPackage="test.dao"               targetProject="../src/main/java">               <property name="enableSubPackages" value="true" />           </sqlMapGenerator>              <javaClientGenerator type="XMLMAPPER"               targetPackage="test.dao" targetProject="../src/main/java">               <property name="enableSubPackages" value="true" />           </javaClientGenerator>              <table tableName="pet" domainObjectName="Pet">           </table>          </context>   </generatorConfiguration>  

    table其他属性:  enableCountByExample="false"  enableUpdateByExample="false"  enableDeleteByExample="false"  enableSelectByExample="false"  selectByExampleQueryId="false"  schema即为数据库名, tableName为对应的数据库表, domainObjectName是要生成的实体类,  如果想要mapper配置文件加入sql的where条件查询, 可以将enableCountByExample等设为true,  这样就会生成一个对应domainObjectName的Example类, enableCountByExample等设为false时,  就不会生成对应的Example类了.  如果table里边不配置property,默认字段都生成为类属性。  <ignoreColumn column="FRED" />//忽略字段  <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />//无论字段是什么类型,生成的类属性都是varchar。 

    a) 建表时,字段名称建议用"_"分隔多个单词,比如:AWB_NO、REC_ID...,这样生成的entity,属性名称就会变成漂亮的驼峰命名,即:awbNo、recId

    b)oracle中,数值形的字段,如果指定精度,比如Number(12,2),默认生成entity属性是BigDecimal型 ,如果不指定精度,比如:Number(9),指默认生成的是Long型

    c)oracle中的nvarchar/nvarchar2,mybatis-generator会识别成Object型,建议不要用nvarchar2,改用varchar2

    这个配置文件提供了 mybatis-generator所需要的参数信息:

      * 其中classPathEntry 是引用的jdbc的类路径,这里将jdbc jar和generator的jar包放在一起了;   * commentGenerator 是用来除去时间信息的,这在配合类似subversion的代码管理工具时使用很有效,因为可以减少没有必要的注释迁入;   * jdbcConnection是指定的jdbc的连接信息;   * javaTypeResolver式类型转换的信息,这里并没有用到;   * javaModelGenerator是模型的生成信息,这里将指定这些Java model类的生成路径;   * sqlMapGenerator是mybatis 的sqlMapper XML文件的生成信息,包括生成路径等;   * javaClientGenerator是应用接口的生成信息;   * table是用户指定的被生成相关信息的表,它必须在指定的jdbc连接中已经被建立。 2. mybatis-generator 有多种运行方式,最简单的就是命令行的方式,只需要指定相应的配置文件的路径即可:

    Java代码    java -jar mybatis-generator-core-1.3.0.jar -configfile ../src/main/resource/config.xml -overwrite   [java]  view plain  copy   java -jar mybatis-generator-core-1.3.0.jar -configfile ../src/main/resource/config.xml -overwrite  

     

    运行后生成的代码包括模型类 test.model.Pet 和 test.model.PetExample , test.dao.PetMapper 接口以及其相对应的 xml 映射文件,在这里就不在赘述了。 三、使用 mybatis-generator 生成的代码  1. 现在我们要利用这些生成的代码,首先我们需要一个关于所有映射的配置文件。需要我们手写如下:【不知道为什么generator没有选择自动生成这个文件,毕竟这些信息generator都可以得到】

    Xml代码    <?xml version="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">                   <property name="driver" value="com.mysql.jdbc.Driver" />                   <property name="url" value="jdbc:mysql://localhost/test" />                   <property name="username" value="qgd" />                   <property name="password" value="123456" />               </dataSource>           </environment>       </environments>       <mappers>           <mapper resource="test/dao/PetMapper.xml" />       </mappers>   </configuration>   [xml]  view plain  copy   <?xml version="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">                   <property name="driver" value="com.mysql.jdbc.Driver" />                   <property name="url" value="jdbc:mysql://localhost/test" />                   <property name="username" value="qgd" />                   <property name="password" value="123456" />               </dataSource>           </environment>       </environments>       <mappers>           <mapper resource="test/dao/PetMapper.xml" />       </mappers>   </configuration>    

    2. 另外还要使用然后我们还需要一个Main示例方法来调用这些已生成的代码:

    Java代码    package test;      import java.io.Reader;   import java.util.List;      import org.apache.ibatis.io.Resources;   import org.apache.ibatis.session.SqlSession;   import org.apache.ibatis.session.SqlSessionFactory;   import org.apache.ibatis.session.SqlSessionFactoryBuilder;      import test.dao.PetMapper;   import test.model.Pet;   import test.model.PetExample;      public class Test {          public static void main(String[] args) throws Exception {           String resource = "MapperConfig.xml";           Reader reader = Resources.getResourceAsReader(resource);           SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);           SqlSession sqlSession = sqlMapper.openSession();              PetExample pet = new PetExample();           pet.or().andDeathIsNotNull();           try {               PetMapper mapper = sqlSession.getMapper(PetMapper.class);               List<Pet> allRecords = mapper.selectByExample(pet);               for (Pet s : allRecords)                   System.out.println(s);           } finally {               sqlSession.close();           }       }   }   [java]  view plain  copy   package test;      import java.io.Reader;   import java.util.List;      import org.apache.ibatis.io.Resources;   import org.apache.ibatis.session.SqlSession;   import org.apache.ibatis.session.SqlSessionFactory;   import org.apache.ibatis.session.SqlSessionFactoryBuilder;      import test.dao.PetMapper;   import test.model.Pet;   import test.model.PetExample;      public class Test {          public static void main(String[] args) throws Exception {           String resource = "MapperConfig.xml";           Reader reader = Resources.getResourceAsReader(resource);           SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);           SqlSession sqlSession = sqlMapper.openSession();              PetExample pet = new PetExample();           pet.or().andDeathIsNotNull();           try {               PetMapper mapper = sqlSession.getMapper(PetMapper.class);               List<Pet> allRecords = mapper.selectByExample(pet);               for (Pet s : allRecords)                   System.out.println(s);           } finally {               sqlSession.close();           }       }   }  

     

    这样就可以打印出相应的查询结果信息了。 四、小结  该示例的完整的Eclipse工程见附件mybatis-generator-usage.zip,其中已经包含了示例需要使用的jar包。 本文中只是用到了mybatis-generator 的一部分功能,mybatis-generator 生成代码的方式还包括ant或Maven脚本,或者直接使用Java API生成;另外通过修改配置文件,generator还可以指定表的生成细节,并可以添加插件。其功能文档在generator的分发包的doc文件夹下有更详细的介绍。 这里使用的表示没有主键的表,针对有一个主键或多个主键的表,mybatis-generator的生成的内容也有所不同,感兴趣的读者可以自行试验一下。

    mybatis-generator-usage.zip (1.6 MB)下载次数: 4000
    转载请注明原文地址: https://ju.6miu.com/read-969885.html

    最新回复(0)