mybatis-plugin-util
整这么一个工具类的原因有二:
- 通常我们用mybatis generator生成的代码,在开发过程中,有需要添加或修改的地方,比如在Mapper中添加接口,在mapper.xml里面新增sql配置。当开发后期需要增加字段的时候,麻烦就来了,再次生成新的代码中不含自主添加的内容,不能简单的覆盖,需要把原来自主添加的内容移到新生成的代码中整合。这个过程是费时的,没有创造性的,枯橾的,而且容易有遗漏的。而利用Mybatis的mapper.xml的可继承性,和Mapper接口的可继承性,就可以做到,将生成的代码与扩展的代码相分离,符合开闭原则,更利于维护。这时,新增字段,只需用它再次生成覆盖原来生成的即可。
- 第二个原因,算是个人偏好吧。偿试用过tkMybatis,虽然少了很多mapper.xml配置,但是个人感觉可能会更消耗性能。因为据相关资料了解,它的sql是执行过程中动态生成的。每一次持久层的操作,即便是相同的操作,都要再次动态生成sql,而mapper.xml中的sql,是项目启动就加载到内存中,每次调用,直接拿出sql语句来就可以用,相当于以空间换性能,是不是更好呢?另外,从逆向生成的mapper.xml文件,复制字段,属性,去书写新的sql配置,也是很便捷的。
参考文献:
让MyBatis Generator产生的Mapper更简洁https://my.oschina.net/wangmengjun/blog/784697
项目gitee源码下载地址:https://gitee.com/a114533627/mybatis-plugin-util
使用方法:
步聚1:
<dependency>
<groupId>my.xh</groupId>
<artifactId>mybatis-plugin-util</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>2.8</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- mybatis generator 自动生成代码插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<dependencies>
<dependency>
<groupId>my.xh</groupId>
<artifactId>mybatis-plugin-util</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<configuration> <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
步聚2:
配置文件generatorConfig.xml的配置:
<?xml version=" <?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="D:\\xuanhu\\myMavenRepository\\repository\\mysql\\mysql-connector-java\\5.1.46\\mysql-connector-java-5.1.46.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<plugin type="my.mybatis.plugin.BaseMapperGeneratorPlugin"></plugin>
<plugin type="my.mybatis.plugin.ExtendMapperPlugin">
<property name="targetProject" value=".\src\main\java"/>
<property name="targetPackage" value="com.gotway.gotway.mapper"/>
<property name="extendTargetPackage" value="com.gotway.gotway.mapper.extend"/>
</plugin>
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库链接URL,用户名、密码 -->
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/gotway" userId="root"
password="root">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="com.gotway.gotway.pojo"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="mapping"
targetProject=".\src\main\resources">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.gotway.gotway.mapper"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<table tableName="t_%">
<generatedKey column="id" sqlStatement="Mysql" identity="true" />
<domainObjectRenamingRule searchString="^T" replaceString="" />
<columnOverride column="content" jdbcType="VARCHAR" />
</table>
</context>
</generatorConfiguration>
步聚3:
最终效果:
package my.mybatis.base;
import org.apache.ibatis.annotations.Param;
import java.io.Serializable;
import java.util.List;
/**
*
* @author wangmengjun
*
*/
public interface BaseMapper<T, E, PK extends Serializable> {
long countByExample(E example);
int deleteByExample(E example);
int deleteByPrimaryKey(PK pk);
int insert(T record);
int insertSelective(T record);
List<T> selectByExample(E example);
T selectByPrimaryKey(PK pk);
int updateByExampleSelective(@Param("record") T record, @Param("example") E example);
int updateByExample(@Param("record") T record, @Param("example") E example);
int updateByPrimaryKeySelective(T record);
int updateByPrimaryKey(T record);
}
因为时间有限,没有太多的文字说明,如果对您有用,不明之处,欢迎探讨