• MyBatis动态SQL(一)


    MyBatis 的强大特性之一便是它的动态 SQL。动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多元素需要花时间了解。MyBatis 3 大大精简了元素种类,现在只需学习原来一半的元素便可。MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。

    1.if标签

    映射文件配置:

      	<select id="query" resultMap="baseMap" parameterType="user">
    		select * from t_user
    		<!-- 这里的1=1方便测试 -->
    		 where 1=1
    		 <!-- 条件if标签通过判断name参数是否为空决定是否使用这个SQL语句 -->
    		<if test="name!=null" >
    			and name=#{name}
    		</if>
    	</select>
    

    测试代码name=null的情况下:

    @Test
    	public void test() {
    		List<User> list = mapper.query(new User());
    		for (User user : list) {
    			System.err.println("在name=null的情况下"+user);
    		}
    	}
    

    测试结果:
    在这里插入图片描述
    测试代码name!=null的情况下:

    @Test
    	public void test() {
    		User testUser = new User();
    		testUser.setName("zhangsan");
    		List<User> list = mapper.query(testUser);
    		for (User user : list) {
    			System.err.println("在name=null的情况下"+user);
    		}
    	}
    

    在这里插入图片描述

    2. choose,when,otherwise

    choose选择语句,差不多等同于java语句中的switch语句。通过创建多个标签元素来选择符合要求的元素。when表示在满足某种情况下调用该内容,otherwise表示在所有情况都不满足的情况下调用的内容。
    配置标签代码使用方式:

    <select id="query" resultMap="baseMap" parameterType="user">
    		select * from t_user
    		 where 1=1
    		 <!-- 如果满足其中的条件就调用其中的SQL语句 -->
    		<choose>
    			<when test="no!=null">
    				and no=#{no}
    			</when>
    			<when test="name!=null">
    				and name=#{name}
    			</when>
    			<otherwise>
    				<if test="age!=null" >
    					and age=#{age}
    				</if>
    			</otherwise>
    		</choose>
    	</select>
    

    3.where

    上述配置代码中为了方便测试我都在where后面添加1=1来方便测试,但是有时候我们对where是否使用也需要动态决定。这个时候就可以使用where标签来解决这个问题。

    <select id="queryById" resultType="user" parameterType="int">
    		select * 
    		from t_user 
    		<where>
    			<if test="no!=null" >
    					 no=#{no}
    				</if>
    		</where>
    	</select>
    

    这里满足条件就会自动添加where并调用其中的SQL代码。

    4.set

    set标签主要用于SQL更新UPDATE代码中,用法如下代码:

    <update id="update" parameterType="user">
    		update t_user 
    		<!-- 通过set来动态设置更新的参数 -->
    		<set>
    			<if test="name!=null">name=#{name}</if>
    			<if test="age!=null">age=#{age}</if>
    		</set>
    		where no = #{no} 
    	</update>
    

    5.trim

    trim标签是一个格式化标签,可以用来代替set或者where标签的功能。具体用法如下代码:

    <update id="update" parameterType="user">
    		update t_user 
    		<!-- <set>
    			<if test="name!=null">name=#{name}</if>
    			<if test="age!=null">age=#{age}</if>
    		</set> -->
    		<!-- prefix表示调用SQL语句时在最前面添加的前缀
    			prefixOverrides表示调用SQL语句时去掉的第一个指定内容
    			suffix表示调用SQL语句时在最后面添加的后缀
    			suffixOverride表示调用SQL语句时去掉的最后一个指定内容
    		 -->
    		<trim prefix="set" prefixOverrides="and | or">
    			<if test="name!=null"> and name=#{name}</if>
    			<if test="age!=null"> or age=#{age}</if>
    		</trim>
    		where no = #{no} 
    	</update>
    

    通过这个trim获得了跟set一样的效果,不过更具有灵活性。

  • 相关阅读:
    轻量级数据库sqlite的使用
    Integer引发的思考
    css限制显示行数
    数据库 chapter 17 数据仓库与联机分析处理技术
    数据库 chapter 15 对象关系数据库系统
    数据库 chapter 16 XML数据库
    数据库 chapter 14 分布式数据库系统
    数据库 chapter 11 并发控制
    数据库 chapter 12 数据库管理系统
    数据库 chapter 13 数据库技术新发展
  • 原文地址:https://www.cnblogs.com/xj619/p/11182318.html
Copyright © 2020-2023  润新知