动态查询功能 在 MyBatis 的 映射文件中 配置 动态sql 语句

2 篇文章 0 订阅

动态代理对象说明

通过动态代理开发模式,只编写一个接口,不写实现类,通过 getMapper() 方法最终获取到 org.apache.ibatis.binding.MapperProxy 代理对象,然后执行功能,而这个代理对象正是 MyBatis 使用了 JDK 的动态代理技术,生成了代理实现类对象。可以进行相关持久化操作。

动态代理实现类对象在执行方法的时候最终调用了 mapperMethod.execute() 方法,这个方法中通过 switch 语句根据操作类型来判断是新增、修改、删除、查询操作,最后一步回到了 MyBatis 最原生的 SqlSession 方式来执行增删改查。

动态sql语句概述

Mybatis 的映射文件中,有些时候业务逻辑复杂时,的 SQL是动态变化的,

动态 SQL 之<if> 标签的作用 语法:

<where>:条件标签。如果有动态条件,则使用该标签代替 where 关键字。
<if>:条件判断标签。
<if test=“条件判断”>
	查询条件拼接
</if>

动态 SQL 之<foreach> 标签的作用 语法
作用 ---- >>> 循环执行sql的拼接操作
例如:查询 id 是 1、2、5 的数据信息
SELECT * FROM student WHERE id IN (1,2,5)。

<select id="findByIds" parameterType="list" resultType="student">
    select * from student
    <where>
<foreach>:循环遍历标签。适用于多个参数或者的关系。
    <foreach collection="array" open="id in(" close=")" item="id" separator=",">
            #{id}
        </foreach>
    </where>
</select>

parameterType=“list” 传入的参数 就是 通过一个集合容器 封装 多个 id 传送进来
resultType=“student” 返回值 这里要与代码中的对象一致
作用:将 查询到的 结果对象 发送到 调用代码里
属性
collection:参数容器类型, (list-集合, array-数组)。 是传入进来的容器
open:开始的 SQL 语句。 从 id in( 开始进行循环
close:结束的 SQL 语句。 到 ) 结束循环
item:参数变量名。 参数 是 要 查询的条件 就是 传入进来 的 id
separator:分隔符。就是 (1,2,5) 这里面的 逗号

SQL片段抽取

Sql 中可将重复的 sql 提取出来,
使用时用 include 引用即可,
`最终达到 sql 重用的目的

在 sql 标签里 写 需要重复使用的 sql语句
设置 id 属性 后面 通过获取 id 的名称 得到 重复使用 的 sql语句

<sql id="selectStudent"> select * from student</sql>

获取重复使用的 sql语句 用 include 标签,
用 include 标签 的 refid属性 来 指定 使用的是 那个 sql 标签里的语句
refid 写成 与 sql 标签 id属性 相同的名称就可以了
但 在 include 标签内不要写 sql语句 来连接重复使用的 sql语句
重复使用的 sql语句 要写到 include的下面
也可以连接 需要使用 循环 与 if判断 进行连接的 sql语句

<select id="findById" parameterType="int" resultType="student">
    <include refid="selectStudent"></include> 
    where id=#{id}
</select>
<select id="findByIds" parameterType="list" resultType="student">
    <include refid="selectStudent"></include>
    <where>
        <foreach collection="array" open="id in(" close=")" item="id" separator=",">
            #{id}
        </foreach>
    </where>
</select>
-  <sql>:抽取 SQL 语句标签。 
-  <include>:引入 SQL 片段标签。 
   <sql id=“片段唯一标识”>抽取的 SQL 语句</sql> <include refid=“片段唯一标识”/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

普希托夫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值