mapper.java.ftl(Mapper 接口模板参考示例1)

mybatisx 插件使用 阅读详情

以下是符合 MyBatis-Plus 最佳实践、遵循 企业级开发规范 的两个核心模板文件:

  • mapper.java.ftl(Mapper 接口)
  • mapper.xml.ftl(Mapper XML 映射文件)

这两个模板均包含详尽的中文注释,适用于 MyBatis-Plus Generator 代码生成,可直接用于实际项目开发。


✅ 1. mapper.java.ftl(Mapper 接口模板)

package ${package.Mapper};

<#if entity??>
import ${package.Entity}.${entity};
</#if>
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

/**
 * <p>
 * ${table.comment!} Mapper 接口
 * </p>
 *
 * <p>
 * 本接口继承 MyBatis-Plus 提供的 {@link BaseMapper},自动获得通用 CRUD 方法(如 insert、delete、update、select 等),
 * 无需编写基础 SQL。若需自定义复杂查询(如多表关联、动态统计、分组聚合等),可在此接口中声明方法,
 * 并在对应的 XML 文件中编写 SQL 实现。
 * </p>
 *
 * <p>
 * 【设计说明】
 * - 使用 {@code @Mapper} 注解标识为 MyBatis Mapper 接口(Spring Boot 项目也可通过 {@code @MapperScan} 扫描,但显式标注更清晰)
 * - 泛型指定实体类,确保类型安全
 * - 所有自定义方法应遵循命名规范(如:selectActiveList、countByStatus)
 * - 方法参数建议使用实体或 DTO,避免过多原始参数
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
@Mapper
public interface ${table.mapperName} extends BaseMapper<${entity}> {

    /**
     * 示例:根据状态查询启用的 ${table.comment!} 列表
     *
     * <p>
     * 此方法展示了如何扩展自定义查询。MyBatis-Plus 的 BaseMapper 已覆盖 90% 的单表操作,
     * 仅当需要复杂 SQL(如 JOIN、子查询、窗口函数等)时才需在此声明方法。
     * </p>
     *
     * @param status 状态值(例如:1 表示启用)
     * @return 启用状态的实体列表
     */
    // List<${entity}> selectByStatus(@Param("status") Integer status);

    /**
     * 示例:批量逻辑删除(软删除)——通常不需要,因为 BaseMapper 的 delete 方法已支持逻辑删除
     *
     * <p>
     * 若实体类使用 {@code @TableLogic} 注解标记逻辑删除字段,
     * 调用 {@code deleteById} 或 {@code deleteByMap} 会自动转为 UPDATE 操作。
     * </p>
     */
    // int batchSoftDelete(@Param("ids") List<Long> ids);
}

✅ 2. mapper.xml.ftl(Mapper XML 映射文件模板)

<?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">

<!--
  | ${table.comment!} Mapper XML 映射文件
  |
  | 【设计原则】
  | 1. 仅当需要复杂 SQL(如多表 JOIN、动态 GROUP BY、自定义分页等)时才编写 XML
  | 2. 简单单表 CRUD 应优先使用 MyBatis-Plus 的 LambdaQueryWrapper 或 QueryWrapper,避免冗余 XML
  | 3. 所有 SQL 必须使用 #{param} 防止 SQL 注入,禁止使用 ${param}
  | 4. 动态 SQL 使用 <if>、<choose> 等标签,保持可读性
  | 5. 字段名建议使用实体类属性对应的数据库列名(可通过 @TableField 指定)
  |
  | 【注意事项】
  | - namespace 必须与 Mapper 接口全限定名一致
  | - id 必须与 Mapper 接口中方法名一致
  | - resultType 指向实体类,MyBatis-Plus 会自动映射(需确保字段名匹配)
  | - 若使用逻辑删除,WHERE 条件中无需手动添加 deleted = 0,MyBatis-Plus 全局插件会自动处理
  |
  | @author ${author}
  | @since ${date}
  -->
<mapper namespace="${package.Mapper}.${table.mapperName}">

    <!--
      示例:根据状态查询列表(取消注释后需在 Mapper 接口中声明对应方法)
      
      注意:
      - 使用 #{status} 而非 ${status},防止 SQL 注入
      - 表名使用 ${table.name}(由代码生成器填充)
      - 字段名建议与数据库实际列名一致(如 status 而非 statusField)
    -->
    <!--
    <select id="selectByStatus" resultType="${package.Entity}.${entity}">
        SELECT
        <include refid="Base_Column_List" />
        FROM ${table.name}
        WHERE status = #{status}
          AND deleted = 0  <!-- 若未启用全局逻辑删除插件,需手动添加;否则可省略 -->
    </select>
    -->

    <!--
      示例:复杂分页查询(带动态条件)
      
      适用于:
      - 多条件组合查询
      - 需要手动控制分页逻辑(如 COUNT + LIST 分开写)
      - MyBatis-Plus 分页插件无法满足的场景
      
      注意:MyBatis-Plus 推荐使用 IPage + lambdaQuery() 实现分页,此处仅为展示 XML 写法
    -->
    <!--
    <select id="selectPageByCondition" resultType="${package.Entity}.${entity}">
        SELECT
        <include refid="Base_Column_List" />
        FROM ${table.name}
        <where>
            <if test="name != null and name != ''">
                AND name LIKE CONCAT('%', #{name}, '%')
            </if>
            <if test="status != null">
                AND status = #{status}
            </if>
            AND deleted = 0
        </where>
        ORDER BY create_time DESC
        LIMIT #{page.offset}, #{page.size}
    </select>

    <select id="countByCondition" resultType="java.lang.Long">
        SELECT COUNT(*)
        FROM ${table.name}
        <where>
            <if test="name != null and name != ''">
                AND name LIKE CONCAT('%', #{name}, '%')
            </if>
            <if test="status != null">
                AND status = #{status}
            </if>
            AND deleted = 0
        </where>
    </select>
    -->

    <!--
      【重要】基础字段列表,避免在每个 SELECT 中重复书写
      - 字段顺序建议与数据库表定义一致
      - 若字段较多,可考虑使用 MyBatis-Plus 的自动映射(无需显式列出)
    -->
    <sql id="Base_Column_List">
        <#-- 遍历表字段,生成列名列表 -->
        <#list table.fields as field>
            <#if field_index == 0>${field.name}<#else>, ${field.name}</#if>
        </#list>
    </sql>

    <!--
      【扩展建议】以下为常见场景示例(按需启用)
      
      1. 批量插入(使用 foreach)
      2. 动态更新(仅更新非空字段)
      3. 多表关联查询(LEFT JOIN)
      
      示例:动态更新(MyBatis-Plus 的 updateById 已支持自动忽略 null,通常无需此写法)
    -->
    <!--
    <update id="updateSelective">
        UPDATE ${table.name}
        <set>
            <if test="name != null and name != ''">
                name = #{name},
            </if>
            <if test="status != null">
                status = #{status},
            </if>
            update_time = NOW()
        </set>
        WHERE id = #{id}
          AND deleted = 0
    </update>
    -->

</mapper>

🔍 关键设计说明与最佳实践

1. 关于是否需要 XML 文件
  • ✅ 推荐原则:能不用 XML 就不用 XML
  • MyBatis-Plus 的 QueryWrapper / LambdaQueryWrapper 可覆盖 95% 的单表操作
  • 仅在以下场景使用 XML:
    • 多表 JOIN 查询
    • 复杂聚合(GROUP BY + HAVING + 子查询)
    • 数据库特有函数(如 JSON_EXTRACT、窗口函数)
    • 需要极致性能优化的手写 SQL
2. 字段安全与 SQL 注入防护
  • 必须使用 #{}:MyBatis 会预编译,防止注入
  • 禁止使用 ${}:除非是动态表名/列名(极少见,且需严格校验)
3. 逻辑删除处理
  • 若全局配置了 MyBatis-Plus 逻辑删除插件(MybatisPlusInterceptor + TableLogic):
    • 所有 SELECT 自动追加 AND deleted = 0
    • 所有 DELETE 自动转为 UPDATE ... SET deleted = 1
    • XML 中无需手动处理 deleted 字段
4. 代码生成器变量说明
  • ${table.name}:数据库表名(如 user_info)
  • ${table.fields}:表字段列表,每个字段包含 name(列名)、property(Java 属性名)等
  • <#list table.fields as field>:FreeMarker 循环语法,用于生成字段列表
5. 性能与维护性建议
  • 避免在 XML 中写业务逻辑(如状态判断),应放在 Service 层
  • 复杂查询建议拆分为多个简单方法,而非一个“万能查询”
  • 使用 <sql> 标签复用字段列表,减少重复

📦 项目结构示例

src/main/resources
└── mapper
    └── user
        └── UserMapper.xml   ← 按模块或实体分类存放

并在 application.yml 中配置:

mybatis-plus:
  mapper-locations: classpath*:mapper/**/*Mapper.xml
  configuration:
    map-underscore-to-camel-case: true

✅ 这两份模板体现了 “约定优于配置” 和 “最小化 XML” 的现代 MyBatis-Plus 开发理念,既保留了 XML 的灵活性,又充分发挥了 MyBatis-Plus 的自动化优势,是企业级项目的理想选择。

根据mybatis-plus生成器自动生成:Entity、Mapper、Mapper XML、Service、Controller AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。 某天我发现了这种方式,使用这种方式去创建项目练习项目真是太方便啦。 官方使用介绍:https://mp.baomidou.com/guide/generator.html#%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B 下面是我根 阅读详情

相关推荐

Spring Boot+MyBatis+Freemarker(ftl)增删改查

搭建项目所需要选择的东西 1.pom.xml所需jar包 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoca...

weixin_44914784的博客 1598

Mybatis通用Mapper和自动代码生成

一、通用Mapper配置: 1、依赖jar包: <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>3.2.0</version> </dependency> 2、Mapper需要继承Mapper<BeanName>例如: import tk.my.

qq_39731741的博客 2116

mybatis-plus代码生成器 & 增加Mapper注解

背景:为了提升开发效率,利用mybatisplus API读取数据库表结构生成对应的实体entity、服务service,通过模板生成映射mapper。实现思路: 利用元对象字段填充控制器MetaObjectHandler,在插入和修改时,为字段指定默认值。Java使用ftl模板文件生成Word,以及Word转换图片或Pdf工具类。代码生成器完善: 增加Mapper注解和Fill填充。

专注于计算机研发知识和资讯分享 2834

SpringBoot整合Mybatis-Plus之代码生成器配置

SpringBoot工程中整合Mybatis-Plus时,配置一下代码生成器可以节省开发时间。 AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。 官网链接: Mybatis-Plus代码生成器 Mybatis-Plus代码生成器配置 接下来看下整合Mybatis-Plus的3.3.X版本的步骤: 一.引入依

smile radiantly 1730

【代码生成器】Java项目代码生成器核心逻辑

Java项目代码生成器核心逻辑

Hello, New World! 1927

Freemarker代码生成器实体映射xml的ftl模板文件

基于Freemarker模板的代码生成器实体映射xml的ftl模板文件

mapper.java.ftl(Mapper 接口模板标准规范版2)

MyBatis-Plus最佳实践代码生成模板 摘要:提供MyBatis-Plus代码生成器的标准模板文件,包含mapper.java.ftl和mapper.xml.ftl两个核心组件。模板遵循企业级开发规范,具有以下特点: 接口与XML分离设计 继承BaseMapper自动获得CRUD方法 强制使用@Mapper注解 包含详细中文注释说明 支持自定义SQL片段 方法命名规范统一 参数校验和异常处理明确 预留扩展方法示例 模板严格遵循MyBatis-Plus最佳实践,确保生成的代码具有规范性、可维护性和扩展性

python15397的博客 380

招标信息爬取工具

一个能帮你节省大量时间的实用小工具,我自己用了挺久,分享出来给有需要的朋友

qq_56877290的博客 834

maven模板freemarker引擎代码

依次在src–resource–template–新建模板引擎mapper.xml.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="${package.Mapper}.${table.map

qq_42946963的博客 1万+

学习Ultralytics (下载)

Ultralytics由创立,最初是为了简化目标检测模型的开发和应用,专注于构建高效、易用、性能卓越的深度学习框架。其主要产品之一是 YOLO 系列模型,尤其是最新的YOLOv5和YOLOv8,因其在精度、速度和可扩展性方面的出色表现而广受欢迎。

2301_76846375的博客 2863

Visual Studio 2022 社区版安装指南:从下载到配置的完整流程

本文详细介绍了Visual Studio 2022社区版的完整安装与配置流程,包括系统要求检查、官方下载步骤、工作负载选择、安装位置配置等关键环节。作为微软推出的免费集成开发环境,VS2022社区版支持多种编程语言,适合个人开发者和小型团队使用。文章还提供了常见问题解决和性能优化技巧,帮助用户高效完成开发环境搭建。

weixin_28829339的博客 873

通过MybaitsX插件实现自定义代码生成器

自定义代码生成器、MyBatisX

qq_39841173的博客 4261

对于基本的捕鱼游戏设计思路(五)——鱼

今天讲捕鱼游戏里鱼的部分,也是比较关键的一部分。 一步一步来,先分析游戏,首先鱼是从屏幕外生成,然后它有个移动的动作,而且分为不同的类型。 然后就可以进入代码部分,首先设置一个计时器,控制时间生成鱼,而鱼分种类,所以就用到随机函数,随机输出一个值,传入switch语句,从而生成不同的鱼。 void GameScene::xiaoyuupdate(float dt){ Size visibl

Cineze的博客 1万+

代码自动生成(二)数据库表字段生成mybaties 映射配置文件**mapper.xml

数据库表字段生成mybaties 映射配置文件**mapper.xml

信 2739

【UE5】Vosk插件实战:离线语音识别与TTS朗读全流程解析

本文详细解析了如何在UE5中利用Vosk插件实现离线实时语音转文字功能。从环境配置、插件与模型准备,到核心C++组件封装与蓝图系统搭建,提供了完整的实战教程。重点解决了离线语音识别在游戏开发中的延迟、隐私和网络依赖问题,并演示了从语音识别到TTS朗读的完整交互闭环,为开发安全、实时的语音交互应用提供可靠方案。

weixin_29021291的博客 509

TMF8801 ToF激光测距传感器原理图设计,已量产(距离传感器)

这张 TMF8801 小板的外围结构就很有代表性。核心传感器是 U1 TMF8801,但真正构成量产价值的是外围那一圈:U2 把 VCC 整理成 3V,R1/R2/R5 与 R3/R4/R6 两组 10K 电阻稳定默认态,Q2 2N7002 和 U3 SN74LVC2G07DCKR 处理控制链路,传感器边上还有 C1/C4/C5 三颗 100nF 紧贴去耦。

不脱发的程序猿 159

Java通过FreeMarker实现代码生成(以SSM的Mapper和实体类为例)

Java通过FreeMarker实现代码生成(以SSM的Mapper和实体类为例) 代码生成的模板使用的时ftl编写的,需要先了解下基本语法 官方文档:http://freemarker.foofun.cn/ref_directive_ftl.html 参考文章: https://www.jianshu.com/p/b549b25e669b https://blog.csdn.net/niuch1029291561/article/details/8190617 一丶实现思路 1.首先创建相关字段,赋予信息

qq_44375666的博客 1179

基于FreeRedis实现的.NET Redis客户端缓存缓存键条件优雅过滤

在.NET开发中,使用Redis作为缓存解决方案是很常见的。FreeRedis是一个功能强大的Redis客户端库,它提供了丰富的功能和灵活性,使我们能够轻松地与Redis进行交互。在本文中,我们将探讨如何使用FreeRedis实现缓存键条件的优雅过滤,以提高缓存的效率和准确性。

RzuScala的博客 328

基于Freemarker模板引擎的Java代码生成器

目录 一、前言 二、FreeMarker简介 三、实现原理 (一)编写模板文件 (二)配置FreeMarker (三)统一文件生成工具 (四)数据库操作 (五)封装填充数据 一、前言 对于Java开发人员来说,在做好框架整合进入开发阶段后,依然存在大量的重复工作,比如在Spring、SpringMVC、Mybatis架构下,我们需要构建Entity、Mapper、dao、ser...

一颗贪婪的星 6548

如何使用PostgreSQL数据库进行数据仓库的ETL操作

本文旨在为数据工程师、数据库管理员和分析师提供使用PostgreSQL进行数据仓库ETL操作的全面指南。ETL流程的基本原理PostgreSQL在ETL中的独特优势实际ETL实现的技术细节性能优化和最佳实践常见问题的解决方案首先介绍ETL和PostgreSQL的基本概念然后深入探讨核心技术和实现方法接着提供实际案例和代码示例最后讨论优化技巧和未来趋势ETL:提取(Extract)、转换(Transform)、加载(Load)的缩写,描述数据从源系统移动到目标数据仓库的过程。

2502_91592937的博客 873

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java mapper control_基于MybatisGenerator扩展的 Model & Mapper & Service & Controller代码生成器...

新鲜出炉的基于 数据库 表自动生成Mybatis的 Model & Mapper & Service & Controller 等的代码的代码生成器,基于Mybatis Generator扩展其JavaMapper和XmlMapper的实现,一个普通业务网站的后端逻辑,点一下鼠标就实现了,项目链接:Java代码生成器介绍这是一个基于数据库表用来自动生成 Model &amp...

weixin_39593340的博客 140

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SpringBoot使用freemarker模板引擎(作业二)

使用freemarker模板引擎一、pom.xml中导入freemarker的依赖:template下新建freemarker.ftlcontroller里添加有兴趣学freemarker的 简单应用,应付作业 在之前基础上 一、pom.xml中导入freemarker的依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-f

橘足轻重的博客 200

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

mybatisx 插件模板

【代码】mybatisx 插件模板。

npk191954的专栏 994

springboot模板

目录 thymeleaf模板 Freemarker模板 thymeleaf模板 thymeleaf模板和freemarker模板都一套可以替代JSP开发的一套引擎模板,它可以生成静态页面,可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。 相关pom依赖 <d...

li___kang的博客 189

MybatisX自定义生成模板

MybatisX自定义生成代码模板在模板文件下创建文件文件,生成代码时使用自定义的模板使用mybatisPlus3,文档注解使用openapi3,entity继承BaseEntity。

m0_51703800的博客 436

基于MybatisGenerator扩展的 Model & Mapper & Service & Controller代码生成器

新鲜出炉的基于数据库表 自动生成Mybatis的 Model &amp; Mapper &amp; Service &amp; Controller 等的代码的代码生成器,基于Mybatis Generator扩展其JavaMapper和XmlMapper的实现,一个普通业务网站的后端逻辑,点一下鼠标就实现了,项目链接:https://github.com/fenglibin/CodeGenera...

冯立彬的博客 6902
上一篇: api-response.java.ftl 统一响应结果封装类模板标准规范版
下一篇: mapper.java.ftl(Mapper 接口模板标准规范版2)
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值