Titan笔记

  • 首页
  • Java
  • 数据结构
  • C语言
  • Web
  • 杂谈
  • 移动开发
  • 逸笔挥墨
Titan笔记
分享学习,研究与开发的点滴记忆
  1. 首页
  2. Java
  3. 正文

(三) Mybatis动态SQL语句

2020年5月18日 570点热度 1人点赞 0条评论

Mybatis动态SQL语句

Mybatis 的映射文件中,前面我们的 SQL 都是比较简单的,有些时候业务逻辑复杂时,我们的 SQL 是动态变 化的,此时在前面的学习中我们的 SQL 就不能满足要求了。

<if> 标签

我们根据实体类的不同取值,使用不同的 SQL 语句来进行查询。比如在 id 如果不为空时可以根据 id 查询, 如果 username 不同空时还要加入用户名作为条件。这种情况在我们的多条件组合查询中经常会碰到。

持久层 Dao 接口

List<User> findByUser(User user); 

持久层 Dao 映射配置

<select id="findByUser" resultType="user" parameterType="user">  
        select * from user where 1=1 
 <if test="username!=null and username != '' ">
    and username like #{username}
 </if> 
 <if test="address != null">
    and address like #{address}
 </if>
 </select>

测试

@Test
public void testFindByUser() {
    User u = new User();
    u.setUsername("%王%");
    u.setAddress("%信阳%");   
    //6.执行操作   
    List<User> users = userDao.findByUser(u);
    for (User user : users) {
        System.out.println(user);
    }
}

<where>标签

映射文件中的where标签可以过滤掉条件语句中的第一个and或or关键字,也就是可以简化上面所写的动态SQL语句中的 where 1=1 这一部分。

<foreach>标签

经常会遇到这样的查询场景,查询ID在某个集合或某个范围中的用户信息。

传入多个 id 查询用户信息,用下边两个 sql 实现:

SELECT * FROM USERS WHERE username LIKE '%张%' AND (id =10 OR id =89 OR id=16) 
​
SELECT * FROM USERS WHERE username LIKE '%张%' AND id IN (10,89,16) 

这样我们在进行范围查询时,就要将一个集合中的值,作为参数动态添加进来。

使用foreach标签即可实现这样的动态SQL

<!-- 查询所有用户在 id 的集合之中 -->
<select id="findInIds" resultType="user" parameterType="queryvo">
    select * from user where id in
    <where>
        <if test="ids != null and ids.size() > 0">
            <foreach collection="ids" open="id in ( " close=")" item="uid" separator=",">#{uid}</foreach>
        </if>
    </where>
</select>

SQL 语句:

select 字段 from user where id in (?)

对应 <foreach>标签用于遍历集合,它的属性:

  1. collection: 代表要遍历的集合元素,注意编写时不要写#{}
  2. open: 代表语句的开始部分符号
  3. close: 代表结束部分符号

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: Mybatis学习笔记
最后更新:2020年5月18日

Titan

不为岁月流逝蹉跎,不为潮流的势头去附和

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论
最新 热点 随机
最新 热点 随机
腾讯Serverless体验,使用TypeScript编写并部署云函数 Go-Proxy-Checker,一款基于Go编写的高性能代理服务器验证工具 Jetbrains(IDEA)免费教育订阅申请指南 Appium移动测试入门指南(二) - Capability 配置 Appium移动测试入门指南(一)- Appium概述 线程类常用方法 - Java并发编程
[Java] 日期与时间的一些操作 Appium移动测试入门指南(二) - Capability 配置 SpringBoot整合JWT认证机制实现接口鉴权 Android数据存储方式之文件存储 提问的智慧 Go-Proxy-Checker,一款基于Go编写的高性能代理服务器验证工具
分类
  • Android
  • C语言
  • Hadoop
  • Hive
  • Java
  • JavaWeb
  • Linux运维之道
  • Mybatis学习笔记
  • Python
  • SpringCloud
  • Web
  • Web前端
  • Web后端
  • 并发编程
  • 开发工具
  • 数据库
  • 数据结构
  • 杂谈
  • 移动开发
  • 移动测试
  • 诗词歌赋
  • 软件测试
  • 逸笔挥墨
  • 随摘
标签聚合
JavaWeb Java Python 二叉树 Mybatis学习笔记 数据结构 链式存储 Apache-Hive

COPYRIGHT © 2013-2021 Titan. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备20001822号-1

豫公网安备 41010502004418号