动态SQL

1.1 if+where的用法

多条件查询
在这里插入图片描述
以上是根据商品名称以及供应商的id是否支付进行的多条件查询,
元素中的test属性表示为:当test后面的表达式满足条件时会追加元素中的条件,从而达到动态查询的状态。
在这里插入图片描述
修改后测试结果依然正确:在这里插入图片描述
总结:where元素主要用来简化SQL语句中的where条件判断,并能智能的处理and和or,不必担心多余关键字导致的语法错误。
where元素标签会自动识别其标签内是否有返回值,若有就插入一个where。此外,若该标签返回的内容是以and后者or开头的,会自动剔除。

1.2 if+trim的用法

trim元素也会自动识别其标签内是否有返回值,若有就会插入某些前缀,也可在其后面加入某些后缀。与之对应的属性是:prefix和suffix;
trim可把包含内容首部的内容覆盖掉,或者把尾部的某些内容覆盖掉,与之对应的属性是:prefixOverrides和suffixOverrides;
在这里插入图片描述在这里插入图片描述
执行结果正常!
trim元素的属性:
prefix:前缀,作用是通过自动识别是否有返回值,如果有就加上某些前缀,如此处的where
suffix:后缀,作用是在trim包含的内容上加上后缀。
prefixOverrides:对于trim包含内容的首部进行指定内容的忽略(如此处的“and”).
suffixOverrides:对于trim包含内容的尾部进行制定内容的忽略。

1.3 if+set的用法

在这里插入图片描述
在这里插入图片描述
set元素主要用于根性操作,它的用法跟where类似,在包含的语句乾输出一个set,若包含的语句是以“,”结尾,则会自动把逗号忽略掉。在配合if就可以实现动态的更新需要更新的字段了,不需要更新的字段,则可以不更新。

1.4foreach迭代入参

foreach的主要属性有:
item:表示集合中每一个元素进行迭代时的别名。
index:指定一个名称,用于表示每次迭代过程中,每次迭代到的位置。
separator:表示在每次迭代之间以什么做为分隔符。
close:表示该语句以什么开始。
open:表示该语句以什么结尾。
collection:最关键也是最容易出错的属性。必须要指定,不同情况下,该属性的值是不一样的。主要有一下三种情况:
1.若入参为单参数且参数类型时一个List,collection的属性值是:list.
2.若入参为一个单参数且参数类型是一个数组,collection的属性值是:array;
3.若入参为多参数,就需要把他们封装成一个Map进行处理。
在这里插入图片描述

1.5 choose(when. otherwist)

只需要根据多个查询条件中的某一个条件进行查询时可以使用choose.它类似于switch选择结构。 <!–

根据用户的名称、角色、编码、创建时间 查询用户表根据其中任意一个条件进行查询-->
    <select id="getUserByUserNameRoleCodeCreateTime" resultMap="userList">
        select u.*,r.roleName from smbms_user u,smbms_role r where r.id = u.userRole
        <choose>
            <when test="userName != null and userName !=''">
                and userName like concat("%",#{userName},"%")
            </when>
            <when test="userRole != null and userRole !=''">
                and userRole = #{userRole}
            </when>
            <when test="userCode != null and userCode !=''">
                and userCode like concat("%",#{userCode},"%")
            </when>
            <otherwise>
                and Year(u.creationDate) = #{creationDate}
            </otherwise>

        </choose>
    </select>

choose一般与when、otherwise配套使用:
whene元素:当其test属性中条件满足的时候,就会输出when元素中的内容。跟java中的switch效果差不多的是。同样按照条件的顺序来进行处理,当when中一旦有条件满足,就会跳出choose,即所有的when和otherwise条件中,只有一个条件会输出。
otherwise元素:当when中的所有条件都不满足的时候,就会自动输出otherwise元素中的内容。

1.6分页查询

MySql的分页功能是基于内存的分页,即先查出所有结果。然后再按起始位置和页大小进行分页。 <!-

-//用户列表增加分页功能,要求结果按创建时间降序排列-->
    <select id="getUesrOrderByTime" resultMap="userList">
        select * from smbms_user order by creationDate desc limit  #{index},#{pageSize}
    </select>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值