前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis 动态SQL

Mybatis 动态SQL

作者头像
暴躁的程序猿
发布2022-03-23 16:51:35
6930
发布2022-03-23 16:51:35
举报
文章被收录于专栏:阿飞的学习记录
动态SQL官方文档
动态SQL官方文档

一、动态SQL----if标签

我们根据实体类的不同取值,使用不同的 SQL 语句来进行查询。比如在 id 如果不为空时可以根据 id 查询,如果 username 不为空时还要加入用户名作为条件。这种情况在我们的多条件组合查询中经常会碰到。 1.dao层接口

代码语言:javascript
复制
 List<User> findUser(User user);

2.映射文件编写

代码语言:javascript
复制
<select id="findUser" resultType="User" parameterType="User">
        select * from user where 1=1
            <if test="username!=null">
                and username=#{username}
            </if>
            <if test="sex!=null">
                and sex=#{sex}
            </if>
    </select>

3.测试类编写

代码语言:javascript
复制
@Test
public void testFindUser() {
User u1= new User();
u1.setUsername("张三");
u1.setSex("男");
//6.执行操作
List<User> users = userDao.findByUser(u1);
for(User user : users) {
System.out.println(user);
}
}

二、动态SQL----where标签

为了简化上面 where 1=1 的条件拼装,我们可以采用标签来简化开发 1、映射配置文件编写

代码语言:javascript
复制
 <select id="findUser" resultType="User" parameterType="User">
        select * from user
        <where>
            <if test="username!=null">
                and username=#{username}
            </if>
            <if test="sex!=null">
                and sex=#{sex}
            </if>
            <if test="address!=null">
                and address=#{address}
            </if>
        </where>
    </select>

2、测试类编写

代码语言:javascript
复制
   @Test
        public void testFindUser() {
            User u1 = new User();
            u1.setUsername("老王");
            u1.setSex("女");
            List<User> users = userDao.findUser(u1);
            for (User user : users) {
                System.out.println(user);
            }
        }

三、动态SQL----froeach标签

传入多个 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) 这样我们在进行范围查询时,就要将一个集合中的值,作为参数动态添加进来。 这样我们将如何进行参数的传递? 1、 在pojo中加入加入一个 List 集合用于封装参数

代码语言:javascript
复制
private List<Integer> ids;
public List<Integer> getIds() {
return ids;
}
public void setIds(List<Integer> ids) {
this.ids = ids;
 }
}

2、编写DAO层接口

代码语言:javascript
复制
List<User> findIds(QueryVo vo);

3、编写映射文件

代码语言:javascript
复制
<select id="findIds" resultType="user" parameterType="user">
      select * from user
 <where>
        <if test="ids != null and ids.size()>0">
            <foreach collection="ids" open="and id in (" close=")" item="uid" separator=",">
                #{uid}
            </foreach>
        </if>
       </where>
    </select>

SQL 语句: select 字段 from user where id in (?) foreach标签用于遍历集合,它的属性: collection:代表要遍历的集合元素,注意编写时不要写#{} open:代表语句的开始部分 close:代表结束部分

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、动态SQL----if标签
  • 二、动态SQL----where标签
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档