通用mapper代码生成

tech2025-09-27  19

通用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"/>--> <!-- &lt;!&ndash;默认值是下面这个,可以不配置&ndash;&gt;--> <!-- <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; }

 

最新回复(0)