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

手机怎么自己创造网站个人动漫网站怎么做页面

手机怎么自己创造网站,个人动漫网站怎么做页面,装饰设计做什么的,钓鱼网站二维码制作软件MyBatis 动态SQL 📖 目录 动态SQL概述if元素 - 条件判断choose/when/otherwise元素 - 分支选择trim元素 - 前后缀处理where元素 - 智能条件处理set元素 - 动态更新foreach元素 - 集合遍历bind元素 - 变量绑定总结 🔍动态SQL概述 动态SQL是MyBatis的核…

MyBatis 动态SQL

📖 目录

  • 动态SQL概述
  • if元素 - 条件判断
  • choose/when/otherwise元素 - 分支选择
  • trim元素 - 前后缀处理
  • where元素 - 智能条件处理
  • set元素 - 动态更新
  • foreach元素 - 集合遍历
  • bind元素 - 变量绑定
  • 总结

🔍动态SQL概述

动态SQL是MyBatis的核心特性之一,它能够根据不同条件动态生成SQL语句,解决了传统静态SQL在复杂业务场景下的局限性。

为什么需要动态SQL? 在实际开发中,我们经常遇到这样的场景:

  • 根据用户输入的不同条件进行查询
  • 批量操作时参数数量不确定
  • 更新操作时只更新有值的字段
  • 不同业务逻辑需要不同的SQL片段

动态SQL通过各种标签元素,让我们能够在XML映射文件中编写灵活的SQL逻辑,提高代码的复用性和可维护性。

了解动态SQL的重要性后,让我们从最基础的条件判断开始学习。

🔍if元素 - 条件判断

<if> 元素是动态SQL中最基础也是最常用的元素,用于根据条件决定是否包含某个SQL片段。

2.1 基本用法

<!-- 使用if元素,根据条件动态查询用户信息 -->
<select id="selectUserByIf" resultType="com.po.MyUser" parameterType="com.po.MyUser">select * from user where 1=1        <if test="uname != null and uname != ''">and uname like concat('%', #{uname}, '%')</if><if test="usex != null and usex != ''">and usex = #{usex}</if>
</select>

2.2 test属性详解

test 属性中可以使用的表达式:

  • 空值判断uname != nulluname == null
  • 字符串判断uname != ''uname == ''
  • 数值比较age > 18score >= 60
  • 逻辑运算andornot

注意事项:

  • 使用 1=1 作为基础条件,避免第一个条件前的 and 造成语法错误
  • 字符串类型建议同时判断 != null!= ''
  • 数值类型只需判断 != null

🔍choose/when/otherwise元素 - 分支选择

当需要在多个条件中选择一个执行时,使用 <choose> 元素,类似于Java中的 switch-case 语句。

3.1 基本结构

<!-- 使用choose、when、otherwise元素,根据条件动态查询用户信息 -->
<select id="selectUserByChoose" resultType="com.po.MyUser" parameterType="com.po.MyUser">select * from user where 1=1        <choose><when test="uname != null and uname != ''">and uname like concat('%', #{uname}, '%')</when><when test="usex != null and usex != ''">and usex = #{usex}</when><otherwise>and uid > 10</otherwise></choose>
</select>

3.2 执行逻辑

  • <choose> 相当于 switch
  • <when> 相当于 case,按顺序检查条件
  • <otherwise> 相当于 default,当所有 when 条件都不满足时执行

使用场景:

  • 多个互斥条件中选择一个
  • 设置默认查询条件
  • 根据不同条件使用不同的排序方式

🔍trim元素 - 前后缀处理

<trim> 元素提供了强大的前后缀处理能力,是处理动态SQL中最灵活的元素。

4.1 属性说明

<!-- 使用trim元素,根据条件动态查询用户信息 -->
<select id="selectUserByTrim" resultType="com.po.MyUser" parameterType="com.po.MyUser">select * from user      <trim prefix="where" prefixOverrides="and |or "><if test="uname != null and uname != ''">  and uname like concat('%', #{uname}, '%')</if><if test="usex != null and usex != ''">  and usex = #{usex} </if></trim>
</select>

属性详解:

  • prefix:在内容前添加指定前缀(如 “where”)
  • suffix:在内容后添加指定后缀
  • prefixOverrides:去除内容开头的指定字符(如 "and "、"or ")
  • suffixOverrides:去除内容结尾的指定字符(如 “,”)

4.2 应用场景

<!-- 动态插入语句 -->
<insert id="insertUser" parameterType="com.po.MyUser">insert into user<trim prefix="(" suffix=")" suffixOverrides=","><if test="uname != null">uname,</if><if test="usex != null">usex,</if><if test="uage != null">uage,</if></trim>values<trim prefix="(" suffix=")" suffixOverrides=","><if test="uname != null">#{uname},</if><if test="usex != null">#{usex},</if><if test="uage != null">#{uage},</if></trim>
</insert>

🔍where元素 - 智能条件处理

<where> 元素是 <trim> 的简化版本,专门用于处理查询条件

5.1 基本用法

<!-- 使用where元素,根据条件动态查询用户信息 -->
<select id="selectUserByWhere" resultType="com.po.MyUser" parameterType="com.po.MyUser">select * from user      <where><if test="uname != null and uname != ''">and uname like concat('%', #{uname}, '%')</if><if test="usex != null and usex != ''">and usex = #{usex}</if></where>
</select>

5.2 智能处理

<where> 元素会智能地处理以下情况:

  • 当包含内容为空时,不会生成 where 关键字
  • 自动去除开头的 andor
  • 只有当包含内容不为空时才生成 where 子句

等价的trim写法:

<trim prefix="where" prefixOverrides="and |or "><!-- 内容 -->
</trim>

🔍set元素 - 动态更新

<set> 元素专门用于动态更新操作,能够智能处理更新字段。

6.1 基本用法

<!-- 使用set元素,动态修改一个用户 -->
<update id="updateUserBySet" parameterType="com.po.MyUser">update user     <set><if test="uname != null">uname = #{uname},</if><if test="usex != null">usex = #{usex},</if><if test="uage != null">uage = #{uage},</if></set>where uid = #{uid}  
</update>

6.2 智能处理特性

  • 自动添加 SET 关键字
  • 自动去除最后一个多余的逗号
  • 防止生成空的 SET 子句

🔍foreach元素 - 集合遍历

<foreach> 元素用于遍历集合,常用于 IN 查询、批量插入等场景。

7.1 基本用法

<!-- 使用foreach元素,查询用户信息 -->
<select id="selectUserByForeach" resultType="com.po.MyUser" parameterType="List">select * from user where uid in     <foreach item="item" index="index" collection="list" open="(" separator="," close=")">#{item}</foreach>
</select>

7.2 属性详解

属性说明示例值
collection指定要遍历的集合类型list/array/map
item集合中每个元素的变量名item/user
index当前元素的索引位置index/i
open遍历开始时的拼接字符(
close遍历结束时的拼接字符)
separator元素之间的分隔符,

7.3 collection属性规则

collection的值取决于参数类型

  • 单个List参数collection="list"
  • 单个Array参数collection="array"
  • Map参数collection="map中的key"
  • 对象属性collection="对象.属性名"

🔍bind元素 - 变量绑定

<bind> 元素用于创建变量并绑定到上下文中,主要解决模糊查询中的SQL注入问题和数据库兼容性问题。

8.1 解决的问题

传统方式的问题:

  • 使用 ${} 拼接存在SQL注入风险
  • 不同数据库的字符串拼接函数不同(MySQL的concat、Oracle的||

8.2 基本用法

<!-- 使用bind元素进行模糊查询 -->
<select id="selectUserByBind" resultType="com.po.MyUser" parameterType="com.po.MyUser"><!-- bind中uname是com.po.MyUser的属性名,paran_uname是自定义变量名 --><bind name="paran_uname" value="'%' + uname + '%'"/>select * from user where uname like #{paran_uname}  
</select>

8.3 表达式语法

<bind>value 属性支持:

  • 字符串拼接'%' + name + '%'
  • 条件表达式age > 18 ? '成年' : '未成年'
  • 对象属性访问user.name + '(' + user.id + ')'
  • 方法调用name.toLowerCase()

🔍总结

MyBatis动态SQL通过不同的标签元素实现了灵活的SQL生成:

元素作用适用场景核心特性
<if>条件判断根据条件包含SQL片段简单条件判断
<choose>分支选择多个条件中选择一个类似switch-case
<trim>前后缀处理灵活的前后缀管理高度可定制化
<where>条件子句动态生成WHERE条件智能处理and/or
<set>更新子句动态UPDATE操作智能处理逗号
<foreach>集合遍历批量操作、IN查询支持多种集合类型
<bind>变量绑定模糊查询、变量处理防SQL注入,跨数据库兼容

最后希望这份笔记能给你带来微薄的帮助!🎉


文章转载自:

http://bwljV8gu.nkkpp.cn
http://FUO3gFMi.nkkpp.cn
http://Uc1uxrfm.nkkpp.cn
http://JEnLbb3V.nkkpp.cn
http://tK0tVoaX.nkkpp.cn
http://9LxIcYy3.nkkpp.cn
http://jXP9KA3f.nkkpp.cn
http://nFmWwXuU.nkkpp.cn
http://gd1H7Yi8.nkkpp.cn
http://pxGxSsoL.nkkpp.cn
http://wbTElsYP.nkkpp.cn
http://kDKqjrmx.nkkpp.cn
http://QiZknRf6.nkkpp.cn
http://nPnw2VXE.nkkpp.cn
http://f2NUIruS.nkkpp.cn
http://XaZfqVU5.nkkpp.cn
http://XDIu6855.nkkpp.cn
http://Ujix68fK.nkkpp.cn
http://gMUXzatY.nkkpp.cn
http://q3xeA5HY.nkkpp.cn
http://FPI1UQB4.nkkpp.cn
http://cnGCzv8k.nkkpp.cn
http://fGQ0h8La.nkkpp.cn
http://4WLLA6EU.nkkpp.cn
http://k4732MTe.nkkpp.cn
http://ha704YWj.nkkpp.cn
http://L5Qsrffr.nkkpp.cn
http://kV0AN0yL.nkkpp.cn
http://rdvL1OtB.nkkpp.cn
http://taa068eU.nkkpp.cn
http://www.dtcms.com/wzjs/713219.html

相关文章:

  • 指定网站建设项目规划书wordpress改了ip
  • 可不可以自己做网站企业采购平台哪个好
  • akm建站系统友点企业网站模板下载
  • 地产建站规划如何免费做网页
  • 自己买服务器做网站网站统计源码
  • 湛江廉江网站建设网站授权书
  • 定制网站建设官网中国10大品牌网官网
  • 网站下面 备案室内设计联盟课堂
  • 浙江省住房和城乡建设厅 官方网站wordpress加载中
  • 晾衣架 东莞网站建设广州建设总承包集团
  • 西安网站快速优化南宁网页设计培训机构
  • 建设网站模块需要哪些内容学网络运营什么学校好
  • 建设招标网官方网站电脑版wordpress用哪个国外空间
  • 网站订单系统模板网站流量分析指标
  • 网站开发公司推荐软件开发教程培训
  • 大气网站欣赏西安百度公司怎么样
  • 工作站做网站宁晋网站建设网络公司
  • 做网站公司哪家比较好做网站建设公司crm在线
  • 本人想求做网站手机电影网站源码模板
  • 如何策划网站桂林两江四湖属于哪个区
  • 学生个人网站模板如何设置的iis后台服务网站地址
  • 专业自动化网站建设睢宁建设局网站
  • 做购物网站数据库分析网页设计与网站制作知识框架
  • 长春网站建设论坛wordpress文章导入 id
  • 如何使用wordpress制作网站建设网站都需要下载那些软件
  • 深圳专业网站建设网站制作8年专注wordpress块引用美化
  • 福州城市建设规划网站免费注册网站域名
  • 建设网站资质查询微信公众号运营模式
  • 移动端高端网站开发广告网络推广怎么做
  • 大连网站哪家做的好?网站的策划建设方案书