在项目中使用MBG,tkmapper和pageHelper可以极大的提高开发效率,单表的增删改查都可以很方便的实现
本文参考:
maven的generatorConfig.xml文件详解:http://git.oschina.net/free/Mapper
本文以idea+maven+mysql作为参照,按步骤说明如何使用tkmapper
1.导入jar包
<!-- mybatis generator插件 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
<!-- 通用Mapper 及其依赖-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>${mapper.version}</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
</dependency>
<!-- 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pagehelper.version}</version>
</dependency>
<!-- 数据库依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
其中的mapper.version 和 pagehelper.version 是在pom.xml的 properties 属性中配置,如下:
<properties>
<!-- 通用mapper版本 -->
<mapper.version>3.2.1</mapper.version>
<!-- pageHelper版本 -->
<pagehelper.version>4.0.1</pagehelper.version>
<!-- mysql版本号 -->
<mysql.version>5.1.36</mysql.version>
</properties>
2.加入MBG插件
pom.xml文件:
<build>
<!-- 一键生成插件 -->
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>${mapper.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
这其中的 jdk.version 也是在 properties 属性中配置的,同 步骤1 中一样
<properties>
...
<jdk.version>1.8</jdk.version>
...
</properties>
而 basedir 则是maven自带的变量,指的是当前项目的实际路径,比如:D:/ideaworkspace/demo
做完这一步,相当于在maven中加入了插件generator,在idea的 MavenProject中就可以看到插件了
3.编辑generatorConfig.xml文件
这里就不作详细说明了,我在文章开始处也作了说明,直接看大神写的详细的配置文档就行,我贴一下自己的配置文件,都是最基础的。
在 src/main/resource下,我创建了一个generator目录,用来存放这个配置文件
<?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>
<!-- 引入外部配置文件 -->
<properties resource="init.properties"></properties>
<!-- 指定数据库连接驱动,如果项目引入了mysql驱动jar,就可以不写 -->
<!--<classPathEntry location="..."></classPathEntry>-->
<context id="MysqlContext" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="javaFileEncoding" value="UTF-8"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- 引入插件 tkmapper -->
<plugin type="${mapper.plugin}">
<property name="mappers" value="${mapper.Mapper}"/>
</plugin>
<!-- 注释 -->
<commentGenerator>
<property name="suppressDate" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="${jdbc.driverClass}"
connectionURL="${jdbc.url}"
userId="${jdbc.user}"
password="${jdbc.password}">
</jdbcConnection>
<javaModelGenerator targetPackage="${targetModelPackage}" targetProject="${targetJavaProject}"></javaModelGenerator>
<sqlMapGenerator targetPackage="${targetXmlPackage}" targetProject="${targetResourceProject}"/>
<javaClientGenerator type="XMLMAPPER" targetPackage="${targetMapperPackage}" targetProject="${targetJavaProject}"/>
<table tableName="bill"></table>
</context>
</generatorConfiguration>
做几点说明:
1.这个配置文件的各个属性配置是有次序的,不能颠倒,
2.引入外部的配置文件,默认是从当前项目路径,也可以理解为是从 src/main/resource 下找的,所以我的 initproperties配置文件是放在 src/main/resource 根路径下的。
init.properties:
#mysql数据库
jdbc.user=root
jdbc.password=****
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf-8
#通用mapper插件
mapper.plugin=tk.mybatis.mapper.generator.MapperPlugin
mapper.Mapper=tk.mybatis.mapper.common.Mapper
3.在pom.xml文件中配置生成mapper,dao,model等文件的位置,同样是在 properties 属性中
<properties>
...
<!--java接口和实体类-->
<targetJavaProject>${basedir}/src/main/java</targetJavaProject>
<targetMapperPackage>com.study.mybatis.dao</targetMapperPackage>
<targetModelPackage>com.study.mybatis.model</targetModelPackage>
<!--xml路径-->
<targetResourceProject>${basedir}/src/main/resources/mybatis</targetResourceProject>
<targetXmlPackage>mapper</targetXmlPackage>
...
</properties>
如上,我将mapper.xml文件放在 src/main/resource/mybatis/mapper 文件夹下
4.在 Spring中配置 tkmapper
<!-- 集成通用mapper-->
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.study.mybatis.dao"/>
<!-- 3.2.2版本新特性,markerInterface可以起到mappers配置的作用,详细情况需要看Marker接口类 -->
<property name="markerInterface" value="com.study.base.mapper.MyMapper"/>
<!-- 通用Mapper通过属性注入进行配置,默认不配置时会注册Mapper<T>接口 -->
<property name="properties">
<value>
mappers=tk.mybatis.mapper.common.Mapper,tk.mybatis.mapper.common.special.InsertListMapper
</value>
</property>
</bean>
说明:为了方便开发,我们可以自己自定义MyMapper继承Mapper和 MySqlMapper
public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
}
配置完以上4步,在maven中插件 mybatis-generator:generate(就在这篇文章唯一的一个图内),就可以生成对应着数据库表的dao文件,mapper文件和model文件了
5.需要注意的事项
1.在4中, 我自定义了一个接口MyMapper,目的是让其他mapper文件继承这个接口,但是使用MBG生成的dao文件默认继承的是Mapper接口,如下:
public interface BillMapper extends Mapper<Bill> {}
这个时候运行项目会报错,需要将其改为继承我们自己的MyMapper
public interface BillMapper extends MyMapper<Bill> {}
2. 如何使用MyMapper??
继承 Mapper 和 MySqlMapper的自定义 MyMapper接口,提供了大量写好的单表增删该查方法,我们可以写一个baseService 然后让其他Service继承BaseService
public interface IBaseService<T> {
T selectByKey(Object key);
List<T> selectByExample(Object example);
List<T> selectAll();
int save(T object);
int saveAll(List<T> list);
int update(T object);
int updateNotNull(T object);
int deleteByKey(Object key);
int deleteByExample(T object);
}
实现这个接口
public class BaseServiceImpl<T> implements IBaseService<T> {
@Autowired
private MyMapper<T> mapper;
@Override
public T selectByKey(Object key) {
return mapper.selectByPrimaryKey(key);
}
......
}
写完这些之后,我们自己的Service接口继承IBaseService,接口实现类继承BaseServiceImp,这样就省去了单表CRUD的书写了
public interface IBillService extends IBaseService<Bill>{}
public class BillServiceImpl extends BaseServiceImpl<Bill> implements IBillService{}
大功告成!!!!!