设为首页 收藏本站
查看: 1028|回复: 0

[经验分享] Mybatis自动生成代码

[复制链接]

尚未签到

发表于 2016-11-24 10:01:00 | 显示全部楼层 |阅读模式

在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


这样就把生成的代码找到了,具体如下图:


DSC0000.jpg






对应的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代码 DSC0001.png






  • CREATETABLEpet(nameVARCHAR(20),ownerVARCHAR(20),speciesVARCHAR(20),sexCHAR(1),birthDATE,deathDATE);





2. 然后注入数据


Sql代码






  • insertintopetvalues('Fluffy','Harold','cat','f','1993-02-04',null);

  • insertintopetvalues('Claws','Gwen','cat','m','1994-03-17',null);

  • insertintopetvalues('Buffy','Harold','dog','f','1989-05-13',null);

  • insertintopetvalues('Fang','Benny','dog','m','1990-08-27',null);

  • insertintopetvalues('Bowser','Diane','dog','m','1979-08-31','1995-07-29');

  • insertintopetvalues('Chirpy','Gwen','bird','f','1998-09-11',null);

  • insertintopetvalues('Whistler','Gwen','bird',null,'1997-12-09',null);

  • insertintopetvalues('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代码






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

  • <!DOCTYPEgeneratorConfiguration

  • PUBLIC"-//mybatis.org//DTDMyBatisGeneratorConfiguration1.0//EN"

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



  • <generatorConfiguration>

  • <classPathEntrylocation="mysql-connector-java-5.1.6-bin.jar"/>



  • <contextid="DB2Tables"targetRuntime="MyBatis3">



  • <commentGenerator>

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

  • </commentGenerator>



  • <jdbcConnectiondriverClass="com.mysql.jdbc.Driver"

  • connectionURL="jdbc:mysql://localhost/test"userId="qgd"password="123456">

  • </jdbcConnection>



  • <javaTypeResolver>

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

  • </javaTypeResolver>



  • <javaModelGeneratortargetPackage="test.model"

  • targetProject="../src/main/java">

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

  • <propertyname="trimStrings"value="true"/>

  • </javaModelGenerator>



  • <sqlMapGeneratortargetPackage="test.dao"

  • targetProject="../src/main/java">

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

  • </sqlMapGenerator>



  • <javaClientGeneratortype="XMLMAPPER"

  • targetPackage="test.dao"targetProject="../src/main/java">

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

  • </javaClientGenerator>



  • <tabletableName="pet"domainObjectName="Pet">

  • </table>



  • </context>

  • </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代码






  • java-jarmybatis-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代码






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

  • <!DOCTYPEconfiguration

  • PUBLIC"-//mybatis.org//DTDConfig3.0//EN"

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

  • <configuration>

  • <environmentsdefault="development">

  • <environmentid="development">

  • <transactionManagertype="JDBC"/>

  • <dataSourcetype="POOLED">

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

  • <propertyname="url"value="jdbc:mysql://localhost/test"/>

  • <propertyname="username"value="qgd"/>

  • <propertyname="password"value="123456"/>

  • </dataSource>

  • </environment>

  • </environments>

  • <mappers>

  • <mapperresource="test/dao/PetMapper.xml"/>

  • </mappers>

  • </configuration>





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


Java代码






  • packagetest;



  • importjava.io.Reader;

  • importjava.util.List;



  • importorg.apache.ibatis.io.Resources;

  • importorg.apache.ibatis.session.SqlSession;

  • importorg.apache.ibatis.session.SqlSessionFactory;

  • importorg.apache.ibatis.session.SqlSessionFactoryBuilder;



  • importtest.dao.PetMapper;

  • importtest.model.Pet;

  • importtest.model.PetExample;



  • publicclassTest{



  • publicstaticvoidmain(String[]args)throwsException{

  • Stringresource="MapperConfig.xml";

  • Readerreader=Resources.getResourceAsReader(resource);

  • SqlSessionFactorysqlMapper=newSqlSessionFactoryBuilder().build(reader);

  • SqlSessionsqlSession=sqlMapper.openSession();



  • PetExamplepet=newPetExample();

  • pet.or().andDeathIsNotNull();

  • try{

  • PetMappermapper=sqlSession.getMapper(PetMapper.class);

  • List<Pet>allRecords=mapper.selectByExample(pet);

  • for(Pets: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的生成的内容也有所不同,感兴趣的读者可以自行试验一下。






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-304846-1-1.html 上篇帖子: mybatis使用(3) 下篇帖子: Mybatis 入门学习,简单例子
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表