通用mapper代码生成
基于maven插件方式
pom.xml
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</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>5.1.34</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-generator</artifactId>
<version>1.1.5</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
</dependencies>
</plugin>
generate.properties
## DB config
jdbc.url=jdbc:mysql://localhost:3306/foo?useUnicode=true&serverTimezone=GMT%2B8&characterEncoding=utf-8&allowMultiQueries=true
jdbc.username=root
jdbc.password=root
project=E:/CODE/foo-bar
mapper.plugin=tk.mybatis.mapper.generator.MapperPlugin
baseMapper=com.foo.bar.framework.common.base.BaseMapper
baseBean=com.foo.bar.framework.common.base.BasicBean
package=com.foo.bar.web.mapper
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>
<properties resource="generator/generate.properties"/>
<context id="Mysql" targetRuntime="MyBatis3" defaultModelType="flat">
<property name="javaFileEncoding" value="UTF-8"/>
<!--配置是否使用通用 Mapper 自带的注释扩展,默认 true-->
<!--<property name="useMapperCommentGenerator" value="false"/>-->
<!--通用 Mapper 插件,可以生成带注解的实体类-->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="${baseMapper}"/>
<property name="caseSensitive" value="true"/>
<property name="forceAnnotation" value="false"/>
<!-- <property name="beginningDelimiter" value="`"/>-->
<!-- <property name="endingDelimiter" value="`"/>-->
<!--配置是否启用lombok, 支持如下6种注解-->
<!--使用Data注解时,Getter,Setter,ToString,EqualsAndHashCode注解无效-->
<property name="lombok" value="Getter,Setter"/>
<!-- <property name="lombok" value="Data"/>-->
<!-- <property name="lombok" value="Getter,Setter,ToString,EqualsAndHashCode"/>-->
<!-- <property name="lombokEqualsAndHashCodeCallSuper" value="true"/>-->
</plugin>
<!--通用代码生成器插件-->
<!--mapper接口-->
<plugin type="tk.mybatis.mapper.generator.TemplateFilePlugin">
<property name="baseMapper" value="${baseMapper}"/>
<property name="targetProject" value="src/main/java"/>
<property name="targetPackage" value="${package}"/>
<property name="templatePath" value="file:src/main/resources/generator/mapper.ftl"/>
<property name="mapperSuffix" value="Mapper"/>
<property name="fileName" value="${tableClass.shortClassName}${mapperSuffix}.java"/>
<!--默认值是下面这个,可以不配置-->
<property name="templateFormatter"
value="tk.mybatis.mapper.generator.formatter.FreemarkerTemplateFormatter"/>
</plugin>
<!--mapper.xml-->
<!-- <plugin type="tk.mybatis.mapper.generator.TemplateFilePlugin">-->
<!-- <property name="targetProject" value="src/main/resources"/>-->
<!-- <property name="targetPackage" value="mappers"/>-->
<!-- <property name="mapperPackage" value="${package}"/>-->
<!-- <property name="templatePath" value="file:src/main/resources/generator/mapperXml.ftl"/>-->
<!-- <property name="mapperSuffix" value="Mapper"/>-->
<!-- <property name="fileName" value="${tableClass.shortClassName}${mapperSuffix}.xml"/>-->
<!-- <!–默认值是下面这个,可以不配置–>-->
<!-- <property name="templateFormatter"-->
<!-- value="tk.mybatis.mapper.generator.formatter.FreemarkerTemplateFormatter"/>-->
<!-- </plugin>-->
<!--数据库链接URL,用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="${jdbc.url}" userId="${jdbc.username}"
password="${jdbc.password}"></jdbcConnection>
<!--MyBatis 生成器只需要生成 Model-->
<javaModelGenerator targetPackage="${package}.entity" targetProject="${project}/src/main/java">
<property name="rootClass" value="${baseBean}" />
</javaModelGenerator>
<table tableName="t_answer" domainObjectName="Answer">
<generatedKey column="id" sqlStatement="Mysql"/>
</table>
</context>
</generatorConfiguration>
读取自定模板时需要注意路径<property name="templatePath" value="file:src/main/resources/generator/mapper.ftl"/>
mapper.ftl
package ${package};
import ${tableClass.fullClassName};
import ${baseMapper};
/**
* 通用 Mapper 代码生成器
*
* @author mapper-generator
*/
public interface ${tableClass.shortClassName}${mapperSuffix} extends BaseMapper<${tableClass.shortClassName}> {
}
mapperXml.ftl
<?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="${mapperPackage}.${tableClass.shortClassName}${mapperSuffix}">
</mapper>
生成效果:
mapper接口
package com.foo.bar.web.mapper;
import com.foo.bar.web.mapper.entity.Answer;
import com.foo.bar.framework.common.base.BaseMapper;
/**
* 通用 Mapper 代码生成器
*
* @author mapper-generator
*/
public interface AnswerMapper extends BaseMapper<Answer> {
}
entity实体
package com.foo.bar.web.mapper.entity;
import com.foo.bar.framework.common.base.BasicBean;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Getter
@Setter
@Table(name = "t_answer")
public class Answer extends BasicBean {
/**
* 自增ID
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "SELECT LAST_INSERT_ID()")
private Long id;
/**
* 提问id
*/
@Column(name = "question_id")
private Long questionId;
/**
* 答复内容
*/
private String content;
/**
* 图片
*/
private String picture;
/**
* 答复人工号
*/
@Column(name = "answerer_code")
private String answererCode;
/**
* 答复人名字
*/
@Column(name = "answerer_name")
private String answererName;
/**
* 是否删除
*/
private Byte deleted;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
/**
* 创建人
*/
private String creator;
/**
* 修改时间
*/
@Column(name = "modified_time")
private Date modifiedTime;
/**
* 修改人
*/
private String modifier;
}