首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis中的动态sql语句 if标签 where标签 foreach标签 sql标签

Mybatis中的动态sql语句 if标签 where标签 foreach标签 sql标签

原创
作者头像
韦恩少爷的背
修改2020-02-24 18:18:56
5.2K0
修改2020-02-24 18:18:56
举报
文章被收录于专栏:SSM框架学习SSM框架学习

Mybatis中的动态sql语句

首先写个方法

 /**
     * 跟进传入参数条件查询
     * @param user 查询的条件:有可能有用户名,有可能有性别,也有可能有地址,还有可能都有
     * @return
     */
    List<User> findByCondition(User user);

if标签

对应resource中也要添加

<!--根据条件查询-->
    <select id="findByCondition" resultType="com.bruce.domain.User" parameterType="user">
        select * from user where 1=1
        <if test="username!=null">
        and username=#{username}
        </if>
    </select>
    如果还有就继续在</if>后面添加
    <if test="xxx!=null">
     and xxx=#{xxx}
    </if>

条件太多了的话 where 1=1看起来很别扭可以用where标签

where标签

	 <select id="findByCondition" resultType="com.bruce.domain.User" parameterType="user">
        select * from user 
        <where>
        <if test="username!=null">
            and username=#{username}
        </if>
        </where>
    </select>

foreach标签

传入多个 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)

这样我们在进行范围查询时,就要将一个集合中的值,作为参数动态添加进来。

SQL 语句:

	select 字段 from user where id in (?) 
	<foreach>标签用于遍历集合,它的属性:
	collection:代表要遍历的集合元素,注意编写时不要写#{}  
	open:代表语句的开始部分 
	 close:代表结束部分
	item:代表遍历集合的每个元素,生成的变量名 
	sperator:代表分隔符

创建一个实现类来存放

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

方法

/**
 * 根据queryvo中提供的id集合,查询用户信息
 * @param vo
 * @return
 */
List<User> findUserInIds(QueryVo vo);

sql实现

 <!--queryvo中的id集合实现查询用户列表-->
    <select id="findUserInIds" resultType="user" parameterType="com.bruce.domain.QueryVo">
        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>

测试方法

	/**
     * 测试foreach标签的使用
     */
    @Test
    public void testFindInIds() {
        QueryVo vo = new QueryVo();
        List<Integer> list = new ArrayList<Integer>();
        list.add(41);
        list.add(43);
        list.add(46);
        vo.setIds(list);
        //5.执行查询一个方法
        List<User> users = userDao.findUserInIds(vo);
        for (User user : users) {
            System.out.println(user);
        }

sql标签

Sql 中可将重复的 sql 提取出来,使用时用 include 引用即可,最终达到 sql 重用的目的。

	<!--抽取重复的sql语句,就可以避免每次都写select*from user
        别加;要不然自动结束了如果你下面还有语句的话就不行咯
    -->
    <sql id="defaultUser" >
        select * from user
    </sql>

举例说明

<!-- 配置查询所有操作 --> 
<select id="findAll" resultType="user"> 
	 <include refid="defaultSql"></include>
</select>   

<!-- 根据 id 查询 --> 
<select id="findById" resultType="UsEr" parameterType="int"> 

注意

sql语句不在乎大小写,其他的就需要注意大小写 最好是一开始就按表中统一标准去写

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mybatis中的动态sql语句
    • if标签
      • where标签
        • foreach标签
          • sql标签
            • 注意
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档