mybatis动态sql语句学习
2022/3/2 19:16:17
本文主要是介绍mybatis动态sql语句学习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
动态 SQL
MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。
- if
- choose (when, otherwise)
- trim (where, set)
- foreach
if 元素
有条件的执行where语句,if 元素是与(and)的关系。
<select id="selectStudentInfoFive" parameterType="map" resultType="com.springboot02.dao.entity.StudentInfoEntity"> SELECT * FROM student_t WHERE state = 1 <if test="id != null"> AND _id = #{id,jdbcType=VARCHAR} </if> <if test="name != null"> AND name = #{name,jdbcType=VARCHAR} </if> </select> <!--SELECT * FROM student_t WHERE state = 1 AND _id = '1'-->
choose, when, otherwise 元素
类似于Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。choose 是或(or)的关系。
<select id="selectUserInfoTwo" parameterType="java.lang.String" resultMap="BaseResultMap"> SELECT * FROM user WHERE status = 1 <choose> <when test="username != null and username != ''"> AND username = #{username,jdbcType = VARCHAR} </when> <when test="password != null and password != ''"> AND password = #{password,jdbcType = VARCHAR} </when> <otherwise> AND power = '1' </otherwise> </choose> </select> <!--SELECT * FROM user WHERE status = 1 AND username = 'nana'--> <!--SELECT * FROM user WHERE status = 1 AND power = '1'-->
trim, where, set 元素
trim 元素可以定制我们想要的功能,例如set或者是where元素的功能。
where 元素只有在一个以上的if条件有值的情况下才去插入“WHERE”子句。而且,若最后的内容是“AND”或“OR”开头的where 元素会将他们去除。
set 元素可以被用于动态包含需要更新的列,去除内容中最后一个“,”。
例子1:trim 元素替换where 元素
<select id="selectUserInfoByPowerTwo" parameterType="java.lang.String" resultMap="BaseResultMap"> SELECT * FROM user <where> <if test="power != null and power != ''"> AND power = #{power,jdbcType = VARCHAR} </if> <if test="status != null and status != ''"> AND status = 1 </if> </where> </select> <select id="selectUserInfoByPower" parameterType="java.lang.String" resultMap="BaseResultMap"> SELECT * FROM user <trim prefix=" where" prefixOverrides="AND|OR"> <if test="power != null and power != ''"> power = #{power,jdbcType = VARCHAR} </if> <if test="status != null and status != ''"> AND status = 1 </if> </trim> </select> <!--select * from user WHERE power = '1'--> <!--select * from user WHERE status = 1-->
prefix:前缀
prefixoverride:去掉第一个and或者是or
例子2:trim 元素替换set 元素
<update id="updateStudentInfoTwo" parameterType="com.springboot02.dao.entity.StudentInfoEntity"> UPDATE student_t <set> <if test="name != null and name !=''"> name=#{name,jdbcType = VARCHAR}, </if> <if test="age != null and age != ''"> age = #{age,jdbcType = VARCHAR}, </if> </set> WHERE _id = #{id,jdbcType = VARCHAR} </update> <!--UPDATE student_t SET name='name', age = '12' WHERE _id = 1--> <update id="updateStudentInfoOne" parameterType="com.springboot02.dao.entity.StudentInfoEntity"> UPDATE student_t <trim prefix="set" suffixOverrides="," suffix="WHERE _id = #{id,jdbcType=VARCHAR}"> <if test="name != null and name !=''"> name=#{name,jdbcType = VARCHAR}, </if> <if test="age != null and age != ''"> age = #{age,jdbcType =VARCHAR}, </if> </trim> </update> <!--UPDATE student_t SET name = 'nanana' WHERE _id = 1-->
suffix:后缀
suffixoverride:去掉最后一个,
foreach 元素
foreach 元素主要用于构建in条件,可以在sql中对集合进行迭代。可以在批量删除、添加等操作中使用。
<delete id="deleteStudentInfoOne" parameterType="arraylist"> DELETE FROM student_t WHERE _id IN <foreach collection="array" item="id" index="index" open="(" close=")" separator=","> #{id} </foreach> </delete> <!--DELETE FROM student_t WHERE _id IN (1,2)-->
collection :collection属性的值有3种:list、array、map,分别对应的参数类型为:List、数组、map集合。
item : 表示迭代元素的别名。
index :表示当前迭代的次数
open :前缀
close :后缀
separator :分隔符,表示迭代时每个元素之间以什么分隔。
sql 片段
在mybatis中通过使用SQL片段可以提高代码的重用性。
例子1:
<!--创建动态sql--> <sql id="sql_count">select count(*)</sql> <!--查找学生表,状态为1的全部学生数量--> <select id="selectListCount" resultType="java.lang.String"> <include refid="sql_count"/> FROM student_t where status = 1 </select> <!--select count(*) FROM student_t where status = 1-->
例子2:
<!--创建动态sql--> <sql id="sql_student">select * from student_t </sql> <sql id="sql_where"> <trim prefix="where" prefixOverrides="AND|OR"> <if test="id != null">AND _id = #{id}</if> <if test="name != null and name.length() > 0">AND name = #{name}</if> <if test="age != null and age.length() > 0">AND age = #{age}</if> </trim> </sql> <!--根据输入条件,查找学生信息--> <select id="selectStudentInfoThree" parameterType="map" resultMap="BaseResultMap"> <include refid="sql_student"/> <include refid="sql_where"/> </select> <!--SELECT * FROM student_t WHERE _id = 1 AND name = 'nana'-->
这篇关于mybatis动态sql语句学习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-10百万架构师第十三课:源码分析:Spring 源码分析:Spring核心IOC容器及依赖注入原理|JavaGuide
- 2025-01-10便捷好用的电商API工具合集
- 2025-01-09必试!帮 J 人团队解决物流错发漏发的软件神器!
- 2025-01-09不容小觑!助力 J 人物流客服安抚情绪的软件!
- 2025-01-09为什么医疗团队协作离不开智能文档工具?
- 2025-01-09惊叹:J 人团队用啥软件让物流服务快又准?
- 2025-01-09如何利用数据分析工具优化项目资源分配?4种工具推荐
- 2025-01-09多学科协作难?这款文档工具可以帮你省心省力
- 2025-01-09团队中的技术项目经理TPM:工作内容与资源优化策略
- 2025-01-09JIT生产管理法:优化流程,提升竞争力的秘诀