mybatis自动生成代码 IDEA
mybatis是一个基于java的持久层框架,有了它,我们可以方便的进行数据库的增删改查(好吧,我承认我对于增删改查已经吐了)。。。mybatis可以根据数据库的表,自动生成xml,mapper以及model类,节省了程序员的大量时间。网上eclipse和mybatis的教程比较常见,IDEA则比较少。本文就来介绍一下IDEA中mybatis如何自动生成上述代码。上图中,红色括号的部分,都是myb
mybatis是一个基于java的持久层框架,有了它,我们可以方便的进行数据库的增删改查(好吧,我承认我对于增删改查已经吐了)。。。mybatis可以根据数据库的表,自动生成xml,mapper以及model类,节省了程序员的大量时间。
网上eclipse和mybatis的教程比较常见,IDEA则比较少。本文就来介绍一下IDEA中mybatis如何自动生成上述代码。
上图中,红色括号的部分,都是mybatis自动生成的代码。(如果没有mybatis自动生成插件,不知道要多做多少无谓的工作量)。
1 maven中添加依赖
使用mybatis,先要在maven中添加mybatis的依赖。在微服务的根pom.xml中,添加如下代码:
<properties>
<mybatis.version>3.3.0</mybatis.version>
<mybatis-spring.version>1.2.0</mybatis-spring.version>
<!--分页用 -->
<mybatis_pagehelper_version>4.1.6</mybatis_pagehelper_version>
<mysql-connector-java.version>5.1.38</mysql-connector-java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${mybatis_pagehelper_version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
我们的目的是在某个微服务的dao层自动生成代码,在dao层的pom.xml中也要做相应依赖:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- mvn mybatis-generator:generate -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
<configurationFile>./generatorConfig.xml</configurationFile>
</configuration>
<dependencies>
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
2 generatorConfig.xml
在dao层下添加generatorConfig.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="context1" targetRuntime="MyBatis3">
<!-- 抑制警告 -->
<property name="suppressTypeWarnings" value="true"/>
<!-- generate entity时,生成hashcode和equals方法 -->
<!-- <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin" /> -->
<!-- generate entity时,生成serialVersionUID -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<!-- 这个插件只会增加字符串字段映射到一个JDBC字符的方法 -->
<plugin type="org.mybatis.generator.plugins.CaseInsensitiveLikePlugin"/>
<!-- genenat entity时,生成toString -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<commentGenerator>
<property name="suppressAllComments" value="true"/>
<property name="suppressDate" value="true"/>
</commentGenerator>
<!-- 数据库配置文件的url是不能直接拷贝过来用的,需要把&换成'&' -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://*.*.*.*:3306/XXX?useUnicode=true&charaterEncoding=utf-8&allowMultiQueries=true"
userId="***" password="***">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- generate Model -->
<javaModelGenerator targetPackage="com.sf.sfpp.academy.common.model"
targetProject="${project.build.directory}/../../sfpp-academy-common/src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
<property name="isMergeable" value="false"/>
</javaModelGenerator>
<!-- generate xml -->
<sqlMapGenerator targetPackage="sqlmap.db.academy"
targetProject="${project.build.directory}/../src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- generate Mapper -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.sf.sfpp.pcomp.dao"
targetProject="${project.build.directory}/../src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--
catalog CDATA #IMPLIED
schema CDATA #IMPLIED
tableName CDATA #REQUIRED
alias CDATA #IMPLIED
domainObjectName CDATA #IMPLIED
enableInsert CDATA #IMPLIED
enableSelectByPrimaryKey CDATA #IMPLIED
enableUpdateByPrimaryKey CDATA #IMPLIED
enableDeleteByPrimaryKey CDATA #IMPLIED
enableCountByExample CDATA #IMPLIED
enableUpdateByExample CDATA #IMPLIED
enableDeleteByExample CDATA #IMPLIED
enableSelectByExample CDATA #IMPLIED
selectByExampleQueryId CDATA #IMPLIED
selectByPrimaryKeyQueryId CDATA #IMPLIED
modelType CDATA #IMPLIED
escapeWildcards CDATA #IMPLIED
delimitIdentifiers CDATA #IMPLIED
delimitAllColumns CDATA #IMPLIED
-->
<table schema="" tableName="acad_activity" domainObjectName="AcademyActivity" modelType="flat"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration>
3 插件自动生成代码
在IDEA中,点击下图中左上角的刷新图标,reImport maven
接下来就会在dao层的plugins中看到多了一个mybatis-generator,双击,所有代码就会自动生成。
4 注意事项
mybatis自动生成的xml文件,如果自己需要额外的sql语句,最后新建一个extend包,例如本例中自动生成AcademyActivityMapper.xml,在extend包中可以新建AcademyActivityExtMapper.xml。为什么要这样做呢?
我们知道,业务开发的过程中,有可能后期需要增加数据库字段。此时再用mybatis自动生成代码,会出现两个后果:
- 在原来的文件中重复生成一遍代码,也就是一个文件中两份一样的代码,这个我是自己做过实验的,不会有新的文件覆盖掉旧的文件;
- 此时最大的危害是,原来自己在mapper中添加的方法也会很难筛选。
也就是说,新建extend文件的根本目的是,日后数据库增加字段,自己添加的SQL语句不受影响。
新建的ExtMapper.xml,只需要和原来的Mapper.xml,namespace指向同一个mapper.java即可。
我们还用之前的例子,在原来自动生成的AcademyActivityMapper.xml中,代码是这样的:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sf.sfpp.pcomp.dao.AcademyActivityMapper" >
.
.
.
</mapper>
在新的AcademyActivityExtMapper.xml中,保证mapper的namespace相同即可。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sf.sfpp.pcomp.dao.AcademyActivityMapper">
</mapper>
5 只生成插入方法怎么办
有一次新建了一张表,然后用自动生成工具,结果发现只有插入的代码自动生成,即insert和insertSelective,还以为是插件本身的问题,死活找不到在哪里。后来才发现,数据库建表仓促,忘记给id加上主键标识了。加上之后重新生成,一切正常。
说明
如有转载,请务必注明出处
http://blog.csdn.net/antony9118/article/details/54314653
更多推荐
所有评论(0)