IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MYBATIS05_if、where、choose、when、trim、set、forEach标签、sql片段 -> 正文阅读

[大数据]MYBATIS05_if、where、choose、when、trim、set、forEach标签、sql片段

①. 动态sql语句概述

  • ①. 动态SQL是MyBatis的强大特性之一。如果你使用过JDBC或其它类似的框架,你应该能理解根据不同条件拼接SQL语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态SQL,可以彻底摆脱这种痛苦。

  • ②. 使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性

  • ③. 如果你之前用过JSTL或任何基于类XML语言的文本处理器,你对动态SQL元素可能会感觉似曾相识。在MyBatis之前的版本中,需要花时间了解大量的元素。借助功能强大的基于OGNL的表达式,MyBatis 3 替换了之前的大部分元素,大大精简了元素种类,现在要学习的元素种类比原来的一半还要少。

②. if判断标签

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’
  <if test="title != null">
    AND title like #{title}
  </if>
  <if test="author != null and author.name != null">
    AND author_name like #{author.name}
  </if>
</select>

③. where标签

  • where:可以自动去掉条件中的第一个and或者or
	<select id="findByCondition" parameterType="user" resultType="user">
	    select * from User
	    <where>
	        <if test="id!=0">
	            and id=#{id}
	        </if>
	        <if test="username!=null">
	            and username=#{username}
	        </if>
	    </where>
	</select>

④. choose、when、otherwise

  • ①. 有时候,我们不想使用所有的条件,而只是想从多个条件中选择一个使用。针对这种情况,MyBatis提供了choose元素,它有点像Java中的 switch 语句

  • ②. 传入了"title”就按"title”查找,传入了 "author” 就按"author”查找的情形。若两者都没有传入,就返回标记为featured的BLOG

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’
  <choose>
    <when test="title != null">
      AND title like #{title}
    </when>
    <when test="author != null and author.name != null">
      AND author_name like #{author.name}
    </when>
    <otherwise>
      AND featured = 1
    </otherwise>
  </choose>
</select>

⑤. trim语句

  • ①. trim标记是一个格式化的标记。可以完成set或者where标记的功能
属性说明
prefix前缀
prefixOverrides去掉第一个指定内容
suffix后缀
suffixoverrides去掉最后一个指定内容
  • ②. 替代where的实现
<select id="queryWhere" parameterType="user" resultType="user"> 
	select *from t_user 
	<trim prefix="where" prefixOverrides="AND |OR "> 
		<if test="username != null"> 
			and username = #{username} 
		</if> 
		<if test="address != null"> 
			and address like #{address} 
		</if> 
		<if test="gender != null"> 
			and gender = #{gender} 
		</if> 
	</trim> 
</select>

在这里插入图片描述在这里插入图片描述

  • ③. 替换set标签
<update id="updateUser" parameterType="user" > 
	update t_user 
	<trim prefix="set" suffixOverrides=","> 
		<if test="username != null"> 
			username = #{username}, 
		</if> 
		<if test="address != null"> 
			address = #{address}, 
		</if> 
		<if test="gender != null"> 
			gender = #{gender}, 
		</if>
	</trim> 
	where id = #{id} 
</update>

⑥. set标签

  • set元素主要用于更新操作,其主要作用是在动态包含的sql语句前输出一个SET关键字,并将SQL语句中最后一个逗号去除

⑦. forEach遍历

  • ①. foreach一共有List,array,Map三种类型的使用场景。foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合
属性说明
collectioncollection属性的值有三个分别是list、array、map三种
open前缀
close后缀
separator分隔符,表示迭代时每个元素之间以什么分隔
item表示在迭代过程中每一个元素的别名
index用一个变量名表示当前循环的索引位置
  • ②. 传入集合list
    <!--forEach的使用-->
    <select id="findByIds" parameterType="list" resultType="user">
        select * from User
        <where>
            <foreach collection="list" open="id in(" close=")" item="id" separator=",">
                #{id}
            </foreach>
        </where>
    </select>
    /*根据用户ids进行查询*/
    List<User> findByIds(List<Integer>list);
    @Test
    public void test2(){
        List<Integer>ids=new ArrayList<>();
        ids.add(1);
        ids.add(2);
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User>users = mapper.findByIds(ids);
        System.out.println(users);
    }
  • ③. 批量插入数据的时候使用
    在这里插入图片描述
  • ④. 传入数组array
	List<User>selectByIdS(@Param("ids") Integer[]ids)
<select id="selectByIdS" resultType="user">
    select * from user where id in
    <foreach collection="array" separator="," open="(" close=")" item="id">
        #{id}
    </foreach>
</select>
  • ⑤. 传入map
<select id="selectByIdSWithMap" resultType="user">
    select * from user where id in
    <foreach collection="idsByMap.split(',')" separator="," open="(" close=")" item="id">
        #{id}
    </foreach>
</select>
List<User>selectByIdSWithMap(Map<String,String>maps);
    @Test
    public void forEachByMaps()throws Exception{
        //1.获取会话对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2.执行sql
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        HashMap<String, String> map = new HashMap<>();
        map.put("idsByMap","1,512,513");
        List<User> users = mapper.selectByIdSWithMap(map);
        users.forEach(System.out::print);
        sqlSession.commit();
    }

⑧. sql片段

  • ①. 先定义一个sql片段
    在这里插入图片描述
  • ②. 引用sql片段
    在这里插入图片描述
<!--抽取sql片段简化编写-->
<sql id="selectUser"></sql> select * from User</sql>
<select id="findById" parameterType="int" resultType="user">
    <include refid="selectUser"></include> where id=#{id}
</select>
<select id="findByIds" parameterType="list" resultType="user">
    <include refid="selectUser"></include>
    <where>
        <foreach collection="array" open="id in(" close=")" item="id" separator=",">
            #{id}
        </foreach>
    </where>
</select>
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:42:19  更:2022-05-18 17:44:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:40:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码