zoukankan      html  css  js  c++  java
  • Mybatis自己主动生成代码

    在mybatis自己主动生成代码有两种方式:

    方式一:是通过使用eclipse作为开发工具。採用maven来构建项目生成的。以下的演示是通过第一种方式。


    今天来记录下mybatis-generator插件自己主动生成xml mapper和model还有dao接口,这样我们就能够把精力放在业务代码上。而不须要关心数据库的详细操作。

        这里我使用eclipse作为开发工具,採用maven来构建项目。

    1. 编写pom.xml文件

          这里仅仅有3个jar文件,数据库使用mysql

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.jacksoft.mybatis</groupId>
      <artifactId>mybatis-generator</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      
      <properties>
    		<mybatis-generator.version>1.3.1</mybatis-generator.version>
    		<mysql.version>5.1.13</mysql.version>
    		<mybatis.version>3.0.3</mybatis.version>
    	</properties>
    	
      <dependencies>
    
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<version>${mysql.version}</version>
    		</dependency>
    	
    		<dependency>
    			<groupId>org.mybatis.generator</groupId>
    			<artifactId>mybatis-generator-core</artifactId>
    			<version>${mybatis-generator.version}</version>
    		</dependency>
    
    		<dependency>
    			<groupId>org.mybatis</groupId>
    			<artifactId>mybatis</artifactId>
    			<version>${mybatis.version}</version>
    		</dependency>
    	</dependencies>
    	
    	<build>
    		<finalName>mybatis-generator</finalName>
    	<plugins>
    		<plugin>
    			<groupId>org.mybatis.generator</groupId>
    			<artifactId>mybatis-generator-maven-plugin</artifactId>
    			<version>${mybatis-generator.version}</version>
    			<dependencies>
    			<!-- 数据库驱动  -->
    				<dependency>
    					<groupId>mysql</groupId>
    					<artifactId>mysql-connector-java</artifactId>
    					<version>${mysql.version}</version>
    				</dependency>
    		
    			</dependencies>
    			<!-- 自己主动生成 -->
    			<executions>
    				<execution>
    					<id>Generate MyBatis Artifacts</id>
    					<goals>
    						<goal>generate</goal>
    					</goals>
    					<configuration>
    						<configurationFile>src/main/resources/config/mysqlGeneratorConfig.xml</configurationFile>
    						<overwrite>true</overwrite>
    						<jdbcDriver>com.mysql.jdbc.Driver</jdbcDriver>
    						<jdbcURL>jdbc:mysql://localhost:3306/demo</jdbcURL>
    						<jdbcUserId>root</jdbcUserId>
    						<jdbcPassword>hwroot</jdbcPassword>
    					</configuration>
    				</execution>
    			</executions>
    		</plugin>
    	
    		<plugin>
    			<groupId>org.apache.maven.plugins</groupId>
    			<artifactId>maven-compiler-plugin</artifactId>
    			<configuration>
    				<source>1.5</source>
    				<target>1.5</target>
    				<encoding>UTF-8</encoding>
    			</configuration>
    		</plugin>
    
    		</plugins>
    	</build>
    </project>

    我这里通过配置插件,让maven在运行install的时候。自己主动又一次生成代码。由于生成的代码中包括mybatis包中的类,所以也须要引入该包。

    2.创建mysqlGeneratorConfig.xml文件

        在src/main/resources/config文件夹以下创建mysqlGeneratorConfig.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="mysqlTables" targetRuntime="MyBatis3">
    		<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/demo"
    		 userId="root" password="hwroot"/>
    		
    		<!-- 指定生成的类型为java类型,避免数据库中number等类型字段 -->
    		<javaTypeResolver>
    			<property name="forceBigDecimals" value="false"/>
    		</javaTypeResolver>
    		
    		<!-- 生成model模型,相应的包。存放位置能够指定详细的路径,如/ProjectName/src,也能够使用MAVEN来自己主动生成 -->
    		<javaModelGenerator targetPackage="com.jacksoft.mybatis.generator.model" targetProject="MAVEN">
    			<property name="enableSubPackages" value="true"/>
    		</javaModelGenerator>
    		
    		<!--相应的xml mapper文件  -->
    		<sqlMapGenerator targetPackage="com.jacksoft.mybatis.generator.dao" targetProject="MAVEN">
    			<property name="enableSubPackages" value="true"/>
    		</sqlMapGenerator>
    		
    		<!-- 相应的dao接口 -->
    		<javaClientGenerator type="XMLMAPPER" targetPackage="com.jacksoft.mybatis.generator.dao" targetProject="MAVEN">
    			<property name="enableSubPackages" value="true"/>
    		</javaClientGenerator>
    		
    		
    		<table tableName="user" domainObjectName="User"/>
    	</context>
    </generatorConfiguration>

    3. 生成代码

        到这里就差点儿相同了。保存为该文件后,实际上就已经開始生成代码了,可是在source code界面,还是看不到代码,我们通过刷新或者 右键项目-->Maven-->Update Project Configuration

        这样就把生成的代码找到了。详细例如以下图:


    相应的mapper,xml,model,example都生成好了。是不是非常方便啊?

       可是该插件默认不带分页功能,分页插件将在下一次记录。

     

    对于自己写的插件无法初始化的问题,能够參照:

    http://code.google.com/p/mybatis/issues/detail?id=343

    也就是须要将自己的插件在配置plugin的时候增加,如:

    <plugin>
        			<groupId>org.mybatis.generator</groupId>
        			<artifactId>mybatis-generator-maven-plugin</artifactId>
        			<version>${mybatis-generator.version}</version>
        			<dependencies>
        				<dependency>
        					<groupId>mysql</groupId>
        					<artifactId>mysql-connector-java</artifactId>
        					<version>${mysql.version}</version>
        				</dependency>
        				<dependency>
        					 <groupId>com.jacksoft</groupId>
    						  <artifactId>mybatis-plugins-paging</artifactId>
    						  <version>${mybatis.paging.version}</version>
        				</dependency>
        			</dependencies>

    方式二:是通过mybatis插件的方式来自己主动生成的。以下的演示是通过另外一种方式。

    本文将简要介绍如何利用Mybatis Generator自己主动生成Mybatis的相关代码:

    一、构建一个环境: 

    1. 首先创建一个表:

     

    Sql代码  收藏代码
    1. CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);  
     

    2. 然后注入数据

    Sql代码  收藏代码
    1. insert into pet values('Fluffy''Harold''cat''f''1993-02-04'null);  
    2. insert into pet values('Claws''Gwen''cat''m''1994-03-17'null);  
    3. insert into pet values('Buffy''Harold''dog''f''1989-05-13'null);  
    4. insert into pet values('Fang''Benny''dog''m''1990-08-27'null);  
    5. insert into pet values('Bowser''Diane''dog''m''1979-08-31''1995-07-29');  
    6. insert into pet values('Chirpy''Gwen''bird''f''1998-09-11'null);  
    7. insert into pet values('Whistler''Gwen''bird'null'1997-12-09'null);  
    8. 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代码  收藏代码
    1. <?xml version="1.0" encoding="UTF-8"?

      >  

    2. <!DOCTYPE generatorConfiguration  
    3.   PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"  
    4.   "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">  
    5.   
    6. <generatorConfiguration>  
    7.     <classPathEntry location="mysql-connector-java-5.1.6-bin.jar" />  
    8.   
    9.     <context id="DB2Tables" targetRuntime="MyBatis3">  
    10.   
    11.         <commentGenerator>  
    12.             <property name="suppressDate" value="true" />  
    13.         </commentGenerator>  
    14.   
    15.         <jdbcConnection driverClass="com.mysql.jdbc.Driver"  
    16.             connectionURL="jdbc:mysql://localhost/test" userId="qgd" password="123456">  
    17.         </jdbcConnection>  
    18.   
    19.         <javaTypeResolver>  
    20.             <property name="forceBigDecimals" value="false" />  
    21.         </javaTypeResolver>  
    22.   
    23.         <javaModelGenerator targetPackage="test.model"  
    24.             targetProject="../src/main/java">  
    25.             <property name="enableSubPackages" value="true" />  
    26.             <property name="trimStrings" value="true" />  
    27.         </javaModelGenerator>  
    28.   
    29.         <sqlMapGenerator targetPackage="test.dao"  
    30.             targetProject="../src/main/java">  
    31.             <property name="enableSubPackages" value="true" />  
    32.         </sqlMapGenerator>  
    33.   
    34.         <javaClientGenerator type="XMLMAPPER"  
    35.             targetPackage="test.dao" targetProject="../src/main/java">  
    36.             <property name="enableSubPackages" value="true" />  
    37.         </javaClientGenerator>  
    38.   
    39.         <table tableName="pet" domainObjectName="Pet">  
    40.         </table>  
    41.   
    42.     </context>  
    43. </generatorConfiguration>  

     

    这个配置文件提供了 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代码  收藏代码
    1. 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代码  收藏代码
    1. <?xml version="1.0" encoding="UTF-8" ?>  
    2. <!DOCTYPE configuration  
    3.     PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
    4.     "http://mybatis.org/dtd/mybatis-3-config.dtd">  
    5. <configuration>  
    6.     <environments default="development">  
    7.         <environment id="development">  
    8.             <transactionManager type="JDBC" />  
    9.             <dataSource type="POOLED">  
    10.                 <property name="driver" value="com.mysql.jdbc.Driver" />  
    11.                 <property name="url" value="jdbc:mysql://localhost/test" />  
    12.                 <property name="username" value="qgd" />  
    13.                 <property name="password" value="123456" />  
    14.             </dataSource>  
    15.         </environment>  
    16.     </environments>  
    17.     <mappers>  
    18.         <mapper resource="test/dao/PetMapper.xml" />  
    19.     </mappers>  
    20. </configuration>  
     

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

    Java代码  收藏代码
    1. package test;  
    2.   
    3. import java.io.Reader;  
    4. import java.util.List;  
    5.   
    6. import org.apache.ibatis.io.Resources;  
    7. import org.apache.ibatis.session.SqlSession;  
    8. import org.apache.ibatis.session.SqlSessionFactory;  
    9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
    10.   
    11. import test.dao.PetMapper;  
    12. import test.model.Pet;  
    13. import test.model.PetExample;  
    14.   
    15. public class Test {  
    16.   
    17.     public static void main(String[] args) throws Exception {  
    18.         String resource = "MapperConfig.xml";  
    19.         Reader reader = Resources.getResourceAsReader(resource);  
    20.         SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);  
    21.         SqlSession sqlSession = sqlMapper.openSession();  
    22.   
    23.         PetExample pet = new PetExample();  
    24.         pet.or().andDeathIsNotNull();  
    25.         try {  
    26.             PetMapper mapper = sqlSession.getMapper(PetMapper.class);  
    27.             List<Pet> allRecords = mapper.selectByExample(pet);  
    28.             for (Pet s : allRecords)  
    29.                 System.out.println(s);  
    30.         } finally {  
    31.             sqlSession.close();  
    32.         }  
    33.     }  
    34. }  

     

    这样就能够打印出对应的查询结果信息了。

    四、小结 

    该演示样例的完整的Eclipseproject见附件mybatis-generator-usage.zip,当中已经包括了演示样例须要使用的jar包。



    本文中仅仅是用到了mybatis-generator 的一部分功能,mybatis-generator 生成代码的方式还包含ant或Maven脚本,或者直接使用java API生成。另外通过改动配置文件,generator还能够指定表的生成细节,并能够加入插件。其功能文档在generator的分发包的doc目录下有更具体的介绍。



    这里使用的表示没有主键的表。针对有一个主键或多个主键的表,mybatis-generator的生成的内容也有所不同,感兴趣的读者能够自行试验一下。



  • 相关阅读:
    类型转换器(InitBinder 初始化绑定器)
    transient关键字的用法
    Handler
    SpringMVC数据校验
    java中进程与线程的三种实现方式
    初识webservice 服务
    javaMail
    UI测试_错题解析
    ognl
    Struts2数据校验
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5123685.html
Copyright © 2011-2022 走看看