官方文档 MybatisX快速开发插件 | MyBatis-Plus
MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。
安装方法:打开 IDEA,进入 File -> Settings -> Plugins -> Browse Repositories,输入 mybatisx 搜索并安装。
官方生成的模版少了service,以及部分方法的定义,所以我在官方的基础上加了加了service模版以及底层方法的补充。主要修改的是default-all文件夹下的模版文件,具体如下:
.meta.xml 修改后代码
- <templates>
- <template>
- <property name="configName" value="serviceInterface"/>
- <property name="configFile" value="serviceInterface.ftl"/>
- <property name="fileName" value="${domain.fileName}Service"/>
- <property name="suffix" value=".java"/>
- <property name="packageName" value="${domain.basePackage}.service"/>
- <property name="encoding" value="${domain.encoding}"/>
- <property name="basePath" value="${domain.basePath}"/>
- template>
- <template>
- <property name="configName" value="serviceImpl"/>
- <property name="configFile" value="serviceImpl.ftl"/>
- <property name="fileName" value="${domain.fileName}ServiceImpl"/>
- <property name="suffix" value=".java"/>
- <property name="packageName" value="${domain.basePackage}.service.impl"/>
- <property name="encoding" value="${domain.encoding}"/>
- <property name="basePath" value="${domain.basePath}"/>
- template>
- <template>
- <property name="configName" value="mapperInterface"/>
- <property name="configFile" value="mapperInterface.ftl"/>
- <property name="fileName" value="${domain.fileName}Mapper"/>
- <property name="suffix" value=".java"/>
- <property name="packageName" value="${domain.basePackage}.mapper"/>
- <property name="encoding" value="${domain.encoding}"/>
- <property name="basePath" value="${domain.basePath}"/>
- template>
- <template>
- <property name="configName" value="mapperXml"/>
- <property name="configFile" value="mapperXml.ftl"/>
- <property name="fileName" value="${domain.fileName}Mapper"/>
- <property name="suffix" value=".xml"/>
- <property name="packageName" value="mapper"/>
- <property name="encoding" value="${domain.encoding}"/>
- <property name="basePath" value="src/main/resources"/>
- template>
- templates>
mapperXml.ftl 修改后代码
- "1.0" encoding="UTF-8"?>
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
"${mapperInterface.packageName}.${baseInfo.fileName}"> -
-
id="BaseResultMap" type="${tableClass.fullClassName}"> - <#list tableClass.pkFields as field>
- <id property="${field.fieldName}" column="${field.columnName}" jdbcType="${field.jdbcType}"/>
- #list>
- <#list tableClass.baseFields as field>
-
"${field.fieldName}" column="${field.columnName}" jdbcType="${field.jdbcType}"/> - #list>
-
-
-
id="Base_Column_List"> - <#list tableClass.allFields as field>${field.columnName}<#sep>,<#if field_index%3==2>${"\n "}#if>#list>
-
-
-
- select * from ${tableClass.tableName}
- <where>
-
"queryCondition"> -
- limit 1
-
-
-
- select count(1) from ${tableClass.tableName}
- <where>
-
"queryCondition"> -
-
-
-
- select * from ${tableClass.tableName}
- <where>
-
"queryCondition"> -
-
-
-
id="queryCondition"> - <#list tableClass.allFields as field>
- <if test="${field.fieldName} != null">and ${field.columnName} = ${'#'}{${field.fieldName},jdbcType=${field.jdbcType}}
- #list>
-
-
-
id="deleteByPrimaryKey" parameterType="java.lang.Long"> - delete from ${tableClass.tableName}
- where <#list tableClass.pkFields as field> ${field.columnName} = ${'#'}{${field.fieldName},jdbcType=${field.jdbcType}} <#if field_has_next>AND#if>#list>
-
-
-
id="insert"<#if (tableClass.pkFields?size==1)> keyColumn="${tableClass.pkFields[0].columnName}" keyProperty="${tableClass.pkFields[0].fieldName}" parameterType="${tableClass.fullClassName}" useGeneratedKeys="true"#if>> - insert into ${tableClass.tableName}
-
"(" suffix=")" suffixOverrides=","> - <#list tableClass.allFields as field>
- <if test="${field.fieldName} != null">${field.columnName},
- #list>
-
-
"values (" suffix=")" suffixOverrides=","> - <#list tableClass.allFields as field>
- <if test="${field.fieldName} != null">${'#'}{${field.fieldName},jdbcType=${field.jdbcType}},
- #list>
-
-
-
-
id="update" parameterType="${tableClass.fullClassName}"> - update ${tableClass.tableName}
- <set>
- <#list tableClass.baseBlobFields as field>
- <if test="${field.fieldName} != null">
- ${field.columnName} = ${'#'}{${field.fieldName},jdbcType=${field.jdbcType}},
-
- #list>
-
- where <#list tableClass.pkFields as field> ${field.columnName} = ${'#'}{${field.fieldName},jdbcType=${field.jdbcType}} <#if field_has_next>AND#if>#list>
-
-
mapperInterface.ftl 修改后代码
- package ${mapperInterface.packageName};
-
- import ${tableClass.fullClassName};
- import java.util.List;
-
- /**
- * @author ${author!}
- * @description 针对表【${tableClass.tableName}<#if tableClass.remark?has_content>(${tableClass.remark!})#if>】的数据库操作Mapper
- * @createDate ${.now?string('yyyy-MM-dd HH:mm:ss')}
- * @Entity ${tableClass.fullClassName}
- */
- public interface ${mapperInterface.fileName} {
-
- int deleteByPrimaryKey(Long id);
-
- int insert(${tableClass.shortClassName} record);
-
- ${tableClass.shortClassName} selectDetail(${tableClass.shortClassName} record);
-
- List<${tableClass.shortClassName}> selectList(${tableClass.shortClassName} record);
-
- int selectCount(${tableClass.shortClassName} record);
-
- int update(${tableClass.shortClassName} record);
- }
serviceInterface.ftl 修改后代码
- package ${baseInfo.packageName};
-
- import ${tableClass.fullClassName};
- <#if baseService??&&baseService!="">
- import ${baseService};
- <#list baseService?split(".") as simpleName>
- <#if !simpleName_has_next>
- <#assign serviceSimpleName>${simpleName}#assign>
- #if>
- #list>
- #if>
- import java.util.List;
-
- /**
- * @author ${author!}
- * @description 针对表【${tableClass.tableName}<#if tableClass.remark?has_content>(${tableClass.remark!})#if>】的数据库操作Service
- * @createDate ${.now?string('yyyy-MM-dd HH:mm:ss')}
- */
- public interface ${baseInfo.fileName} {
-
- public int deleteByPrimaryKey(Long id);
-
- public int insert(${tableClass.shortClassName} record);
-
- public ${tableClass.shortClassName} selectDetail(${tableClass.shortClassName} record);
-
- public List<${tableClass.shortClassName}> selectList(${tableClass.shortClassName} record);
-
- public int selectCount(${tableClass.shortClassName} record);
-
- public int update(${tableClass.shortClassName} record);
- }
serviceImpl.ftl 修改后代码
- package ${baseInfo.packageName};
-
- import ${tableClass.fullClassName};
- import ${serviceInterface.packageName}.${serviceInterface.fileName};
- import ${mapperInterface.packageName}.${mapperInterface.fileName};
- <#if baseService??&&baseService!="">
- import ${baseService};
- <#list baseService?split(".") as simpleName>
- <#if !simpleName_has_next>
- <#assign serviceSimpleName>${simpleName}#assign>
- #if>
- #list>
- #if>
- import org.springframework.stereotype.Service;
- import org.springframework.beans.factory.annotation.Autowired;
- import java.util.List;
-
- /**
- * @author ${author!}
- * @description 针对表【${tableClass.tableName}<#if tableClass.remark?has_content>(${tableClass.remark!})#if>】的数据库操作Service实现
- * @createDate ${.now?string('yyyy-MM-dd HH:mm:ss')}
- */
- @Service
- public class ${serviceImpl.fileName} implements ${serviceInterface.fileName}{
-
- @Autowired
- private ${mapperInterface.fileName} dao;
-
- public int deleteByPrimaryKey(Long id) {
- return dao.deleteByPrimaryKey(id);
- }
-
- public int insert(${tableClass.shortClassName} record) {
- return dao.insert(record);
- }
-
- public ${tableClass.shortClassName} selectDetail(${tableClass.shortClassName} record) {
- return dao.selectDetail(record);
- }
-
- public List<${tableClass.shortClassName}> selectList(${tableClass.shortClassName} record) {
- return dao.selectList(record);
- }
-
- public int selectCount(${tableClass.shortClassName} record) {
- return dao.selectCount(record);
- }
-
- public int update(${tableClass.shortClassName} record) {
- return dao.update(record);
- }
- }
-
-
-
-
二. 代码生成步骤:
接下来看下使用:



三. 查看生成的代码

domain文件jxzCustomer
- package com.train.domain;
-
- import java.io.Serializable;
- import lombok.Data;
-
- /**
- * 客户列表
- * @TableName jxzCustomer
- */
- @Data
- public class jxzCustomer implements Serializable {
-
- private static final long serialVersionUID = -4294857523757350782L; // 后面手动修改的,默认是1
- /**
- * 主键
- */
- private Long customerId;
-
- /**
- * 客户编码
- */
- private String customerCode;
-
- /**
- * 客户名称
- */
- private String customerName;
-
- /**
- * 简称
- */
- private String shortName;
- }
jxzCustomerMapper.xml
- mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.train.mapper.jxzCustomerMapper">
-
- <resultMap id="BaseResultMap" type="com.train.domain.jxzCustomer">
- <id property="customerId" column="customerId" jdbcType="BIGINT"/>
- <result property="customerCode" column="customerCode" jdbcType="VARCHAR"/>
- <result property="customerName" column="customerName" jdbcType="VARCHAR"/>
- <result property="shortName" column="shortName" jdbcType="VARCHAR"/>
- resultMap>
-
- <sql id="Base_Column_List">
- customerId,customerCode,customerName,
- shortName
- sql>
-
- <select id="selectDetail" parameterType="com.train.domain.jxzCustomer" resultType="com.train.domain.jxzCustomer">
- select * from jxzCustomer
- <where>
- <include refid="queryCondition">include>
- where>
- limit 1
- select>
-
- <select id="selectCount" parameterType="com.train.domain.jxzCustomer" resultType="java.lang.Integer">
- select count(1) from jxzCustomer
- <where>
- <include refid="queryCondition">include>
- where>
- select>
-
- <select id="selectList" parameterType="com.train.domain.jxzCustomer" resultType="com.train.domain.jxzCustomer">
- select * from jxzCustomer
- <where>
- <include refid="queryCondition">include>
- where>
- select>
-
- <sql id="queryCondition">
- <if test="customerId != null">and customerId = #{customerId,jdbcType=BIGINT},if>
- <if test="customerCode != null">and customerCode = #{customerCode,jdbcType=VARCHAR},if>
- <if test="customerName != null">and customerName = #{customerName,jdbcType=VARCHAR},if>
- <if test="shortName != null">and shortName = #{shortName,jdbcType=VARCHAR},if>
- sql>
-
- <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
- delete from jxzCustomer
- where customerId = #{customerId,jdbcType=BIGINT}
- delete>
-
- <insert id="insert" keyColumn="customerId" keyProperty="customerId" parameterType="com.train.domain.jxzCustomer" useGeneratedKeys="true">
- insert into jxzCustomer
- <trim prefix="(" suffix=")" suffixOverrides=",">
- <if test="customerId != null">customerId,if>
- <if test="customerCode != null">customerCode,if>
- <if test="customerName != null">customerName,if>
- <if test="shortName != null">shortName,if>
- trim>
- <trim prefix="values (" suffix=")" suffixOverrides=",">
- <if test="customerId != null">#{customerId,jdbcType=BIGINT},if>
- <if test="customerCode != null">#{customerCode,jdbcType=VARCHAR},if>
- <if test="customerName != null">#{customerName,jdbcType=VARCHAR},if>
- <if test="shortName != null">#{shortName,jdbcType=VARCHAR},if>
- trim>
- insert>
-
- <update id="update" parameterType="com.train.domain.jxzCustomer">
- update jxzCustomer
- <set>
- <if test="customerCode != null">
- customerCode = #{customerCode,jdbcType=VARCHAR},
- if>
- <if test="customerName != null">
- customerName = #{customerName,jdbcType=VARCHAR},
- if>
- <if test="shortName != null">
- shortName = #{shortName,jdbcType=VARCHAR},
- if>
- set>
- where customerId = #{customerId,jdbcType=BIGINT}
- update>
-
- mapper>
jxzCustomerMapper
- package com.train.mapper;
-
- import com.train.domain.jxzCustomer;
- import java.util.List;
-
- /**
- * @author sunww
- * @description 针对表【jxzCustomer(客户列表)】的数据库操作Mapper
- * @createDate 2022-08-02 15:36:15
- * @Entity com.train.domain.jxzCustomer
- */
- public interface jxzCustomerMapper {
-
- int deleteByPrimaryKey(Long id);
-
- int insert(jxzCustomer record);
-
- jxzCustomer selectDetail(jxzCustomer record);
-
- List
selectList(jxzCustomer record); -
- int selectCount(jxzCustomer record);
-
- int update(jxzCustomer record);
- }
jxzCustomerService
- package com.train.service;
-
- import com.train.domain.jxzCustomer;
- import java.util.List;
-
- /**
- * @author sunww
- * @description 针对表【jxzCustomer(客户列表)】的数据库操作Service
- * @createDate 2022-08-02 15:36:15
- */
- public interface jxzCustomerService {
-
- public int deleteByPrimaryKey(Long id);
-
- public int insert(jxzCustomer record);
-
- public jxzCustomer selectDetail(jxzCustomer record);
-
- public List
selectList(jxzCustomer record); -
- public int selectCount(jxzCustomer record);
-
- public int update(jxzCustomer record);
- }
jxzCustomerServiceImpl
- package com.train.service.impl;
-
- import com.train.domain.jxzCustomer;
- import com.train.service.jxzCustomerService;
- import com.train.mapper.jxzCustomerMapper;
- import org.springframework.stereotype.Service;
- import org.springframework.beans.factory.annotation.Autowired;
- import java.util.List;
-
- /**
- * @author sunww
- * @description 针对表【jxzCustomer(客户列表)】的数据库操作Service实现
- * @createDate 2022-08-02 15:36:15
- */
- @Service
- public class jxzCustomerServiceImpl implements jxzCustomerService{
-
- @Autowired
- private jxzCustomerMapper dao;
-
- public int deleteByPrimaryKey(Long id) {
- return dao.deleteByPrimaryKey(id);
- }
-
- public int insert(jxzCustomer record) {
- return dao.insert(record);
- }
-
- public jxzCustomer selectDetail(jxzCustomer record) {
- return dao.selectDetail(record);
- }
-
- public List
selectList(jxzCustomer record) { - return dao.selectList(record);
- }
-
- public int selectCount(jxzCustomer record) {
- return dao.selectCount(record);
- }
-
- public int update(jxzCustomer record) {
- return dao.update(record);
- }
- }
-
-
-
-