首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mybatis 实用技巧:<trim prefix="where" prefixOverrides="and|or">

mybatis 实用技巧:<trim prefix="where" prefixOverrides="and|or">

作者头像
一个会写诗的程序员
发布2020-07-22 11:07:45
1.9K0
发布2020-07-22 11:07:45
举报

<where>标签

UserInfoMapper.xml 内容如下:

<select id="findUserInfoByUnoQuantity" parameterType="Map"  
       resultMap="UserInfoResult">  
       select * from userinfo  
       <where>  
           <if test="department!=null">  
               and department like #{department}  
           </if>  
           <if test="gender!=null">  
               AND gender=#{gender}  
           </if>  
           <if test="position!=null">  
               AND position like #{position}  
           </if>  
       </where>  
   </select> 

【解释】

a.select之后没有直接写Sql语句的where,而是使用<where>标签 b.按照标准写法,第一个<if>标签内的AND应该不写,但是,就算开发中书写也不会报错。这就是where标签帮助我们自动的移除了第一个AND链接。但是,第二个之后的<if>标签内,必须有AND链接。

c.如果没有一个条件符合,则返回所有条目。

d.<if>标签的其他用法请参考前文,这里不再赘述

3.修改单元测试方法,如下:

@Test  
    public void testSeletOne() {  
        try {  
  
            Map<String, Object> map = new HashMap<String, Object>();  
            map.put("department", "1");  
            map.put("gender", "1");  
            map.put("position", "工程师");  
            Departments d = new Departments("2", "%售%");  
            map.put("d", d);  
            UserInfoDao userInfo = sqlSession.getMapper(UserInfoDao.class);  
            List<UserInfo> UIList = userInfo.findUserInfoByUnoQuantity(map);  
            for (UserInfo ui : UIList) {  
                System.out.println(ui.toString());  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  

4.运行单元测试方法,观察输出即可。 5.结论:where 元素知道只有在一个以上的<if>条件有值的情况下才去插入“WHERE”子句。而且,若内容是“AND”或“OR”开头的,where 元素也知道如何将他们去除。

<trim>标签

1.该标签的功能与<where>类似,并且额外的提供了前缀后缀功能。具体用法如下:

2.修改Mapper文件,具体内容如下:

<select id="findUserInfoByTrim" parameterType="Map"  
        resultMap="UserInfoResult">  
        select * from userinfo  
        <trim prefix="where" prefixOverrides="and|or">  
            <if test="department!=null">  
                AND department like #{department}  
            </if>  
            <if test="gender!=null">  
                AND gender=#{gender}  
            </if>  
            <if test="position!=null">  
                AND position like #{position}  
            </if>  
        </trim>  
    </select>  

【解释】

a.我们使用<trim>替代<where>标签。

b.属性 prefix="where" 表示:加前缀 where

c.属性prefixOverrides="and|or" 表示:自动覆盖第一个and或者or.

d.后缀的用法类似;

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • <where>标签
  • <trim>标签
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档