Titan笔记

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

(三) Mybatis动态SQL语句

2020年5月18日 767点热度 2人点赞 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

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

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论
最新 热点 随机
最新 热点 随机
Docker配置IPv6容器网络支持 什么是Elastic Stack,ELK的发展历程 K8s中Pod的基本概念 Pushkin AI - 基于OpenAI-ChatGPT / GPT3的问答机器人 云原生 - 浅谈容器基础与K8S架构设计 腾讯Serverless体验,使用TypeScript编写并部署云函数
Docker配置IPv6容器网络支持
Python爬虫获取豆瓣TOP250电影详情 Apache-Hive 使用MySQL存储Hive的元数据 Spring与Mybatis的整合 Docker配置IPv6容器网络支持 Spring Cloud 微服务学习笔记 - 负载均衡服务调用 [数据结构] 使用最小堆思想实现哈夫曼编解码
分类
  • Android
  • C语言
  • Elasticsearch
  • Hadoop
  • Hive
  • Java
  • JavaWeb
  • Kubernetes
  • Linux运维之道
  • Mybatis学习笔记
  • Python
  • SpringCloud
  • Web
  • Web前端
  • Web后端
  • 云原生
  • 并发编程
  • 开发工具
  • 数据库
  • 数据结构
  • 杂谈
  • 移动开发
  • 移动测试
  • 诗词歌赋
  • 软件测试
  • 逸笔挥墨
  • 随摘
标签聚合
JavaWeb Mybatis学习笔记 二叉树 Apache-Hive 链式存储 数据结构 Java Python

COPYRIGHT © 2013-2021 Titan. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备20001822号-1

豫公网安备 41010502004418号