当前位置: 首页 > news >正文

Mybatis的常用标签

        Mybatis的常用标签主要分为四大类,如果掌握了这些标签的使用可以应对百分之九十的工作场景。

一.核心CRUD标签

1.<select>

<select id="selectUserById" resultType="com.example.entity.User">SELECT id, name, age, email FROM user WHERE id = #{id}
</select>

这是用的最多的一个标签。关键点说明:

  1. #{}:是 MyBatis 的参数占位符,它会进行预编译,能有效防止 SQL 注入。

  2. resultType:结果集映射,告诉 MyBatis 将 SQL 查询结果中的每一行数据,自动封装成一个 com.example.entity.User 类的对象。

特殊查询示例:

<select id="queryDefaultData" resultType="java.util.LinkedHashMap">SELECT id,${fieldName}FROM(${tableName}) as t</select>

Mapper接口方法:

 List<Map<String,Object>> queryDefaultData(@Param("fieldName") String fieldName, @Param("tableName") String tableName);

        这是一个高度灵活的查询,可以动态地指定要查询的字段和表,并将结果以 LinkedHashMap 的形式返回。可以看到 ${fieldName}是从接口里面传进来的,${} 是直接字符串拼接,不会进行预编译。这样会有风险,攻击者可以传入恶意字符串来操纵SQL语句。

其中resultType="java.util.LinkedHashMap"关键的部分。

它表示查询结果的每一行都不会被映射到一个预定义的 Java Bean(如 User),而是被映射到一个 LinkedHashMap<String, Object> 对象。

Map 的 Key:是查询结果集的列名id, 以及 ${fieldName} 的值)。

Map 的 Value:是对应列的值。

例如,查询结果可能是这样的一个 Map:{"id": 1, "user_name": "Alice", "age": 25}

使用 LinkedHashMap 而不是普通的 HashMap 可以保持列的顺序(即查询时字段的顺序)。

         

2.<insert>

<insert id="insertUser" parameterType="com.example.entity.User" useGeneratedKeys="true" keyProperty="id">INSERT INTO user (name, age, email)VALUES (#{name}, #{age}, #{email})
</insert>

   parameterType 属性通常是可以省略的并且parameterType 不仅可以指定自定义的 Java Bean,还可以是:

  • 基本类型及其包装类parameterType="java.lang.Long" 或别名 long

  • 字符串parameterType="java.lang.String" 或别名 string

  • MapparameterType="java.util.Map" 或别名 map

  • 集合/数组:虽然不常用,但也可以指定。

3.<update>

<update id="updateUser" parameterType="com.example.entity.User">UPDATE userSET name = #{name}, age = #{age}, email = #{email}WHERE id = #{id}
</update>

4.<delete>

<delete id="deleteUserById">DELETE FROM user WHERE id = #{id}
</delete>

二.SQL片段重用标签

示例:

1.下面是定义的sql片段

<sql>:

<!-- 通用查询结果列 --><sql id="Base_Column_List">id, creater, updater, create_time, update_time</sql>

2.引用通用列

<include>:

<select id="selectByCodeOrName" resultType="com.test.Pool">select<include refid="Base_Column_List"/>fromtbl_poolwherecode = #{code}
</select>

三.动态SQL标签

1.if标签

  • 用途:简单的条件判断。如果test条件为真,则包含其内部的SQL。

  • 关键属性test(OGNL表达式)。

<if test="req.user!= null and req.user != ''">AND q.user= #{req.user}</if>

2.<choose><when><otherwise>

    多选标签,类似Java中的if....else判断语句。

<if test="req != null"><choose><when test="req.exportFieldIds != null and req.exportFieldIds.size()>0">AND fp.id = #{fieldId}</when><otherwise><if test="req.cype != null and req.cype != ''">AND fp.cype = #{req.cype}</if></otherwise></choose>
</if>

3.<foreach>标签

  • 用途:遍历集合(如List、数组),常用于IN条件查询和批量插入操作。

  • 关键属性collectionitemindexopencloseseparator

示例:

 <select id="selectByFieldCodeList" resultType="com.Pool">select<include refid="Base_Column_List"/>fromtbl_poolwhere code in<foreach collection="codeList" item="item" open="(" separator="," close=")">#{item}</foreach></select>

http://www.dtcms.com/a/356474.html

相关文章:

  • word去空格去空行_word辅助工具 word批量处理
  • 【C++】类与对象(上)
  • Matlab实现基于CPO-QRCNN-BiGRU-Attention注意力多变量时间序列区间预测
  • FPGA实现1553B BC控制器IP方案
  • 【AOSP】Android Dump 开发与调试指南
  • Replay – AI音乐伴奏分离工具,自动分析音频内容、提取主唱、人声和伴奏等音轨
  • 栈和队列OJ习题
  • 【物联网】关于 GATT (Generic Attribute Profile)基本概念与三种操作(Read / Write / Notify)的理解
  • 如何在mysql中执行创建数据库的脚本文件?
  • Spring Boot 使用 RestTemplate 调用 HTTPS 接口时报错:PKIX path building failed 解决方案
  • Linux下的网络编程SQLITE3详解
  • 神经语言学视角:脑科学与NLP深层分析技术的交叉融合
  • Java的CAS机制:无锁并发控制及其高频面试题
  • OpenCSG月度更新2025.8
  • 1 分钟 Maya 动画渲染要多久?5 天还是 5 小时
  • 基于Java、GeoTools与PostGIS的GeoJSON动态属性注入实战指南
  • 在 Go 项目的 DDD 分层架构中,Echo Web 框架及其 middleware 应该归属到哪一层?
  • mysql安全运维之安全模型与原则-构建坚不可摧的数据库防护体系
  • 自然语言提取PDF表格数据
  • 电影交流|基于SprinBoot+vue的电影交流平台小程序系统(源码+数据库+文档)
  • 在基于 Go 的 DDD 分层架构中,包含多个server的项目目录结构应如何组织?
  • LoraConfig target modules加入embed_tokens(64)
  • 设计模式-行为型模式-命令模式
  • Spring 微服务架构下的单元测试优化实践:从本地连接到真实开发数据库的集成测试
  • Qt节点编辑器设计与实现:动态编辑与任务流可视化(一)
  • WebStorm-在WebStorm中使用Git管理项目
  • 【WPF】WPF 自定义控件实战:从零打造一个可复用的 StatusIconTextButton (含避坑指南)
  • 循环高级(2)
  • 面试八股文之——JVM与并发编程/多线程
  • Azure、RDP、NTLM 均现高危漏洞,微软发布2025年8月安全更新