ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SSM学习之路——Mybatis第三天_动态sql语句

2020-01-13 09:03:54  阅读:292  来源: 互联网

标签:List ids vo SSM user sql Mybatis id


一、where 和 if标签

1、在IUserDao接口中新建方法

在这里插入图片描述

2、在IUserDao.xml中编写相应内容

这里的if里面的test为判断的语句条件,里面的参数名字对应java文件里的字段 而不是数据库的
if标签里的内容为sql的语句的拼接
其中where标签其实为 select * from user where 1=1 的改写

特别注意当有多个if的时候,由于标签内容为sql语句的拼接,所以千万不能忘了and 的连接 如下面的
username like #{userName} and sex = …

<select id="findUserByCondition" resultMap="userMap" parameterType="user">
        select  * from user
        <where>
            <if test="userName != null and userName.length() > 0">
                username like #{userName}
            </if>
            <if test="userSex != null and userSex.length() > 0">
                and sex = #{userSex}
            </if>
        </where>
    </select>

还是提一下上面的resultMap为:

<resultMap id="userMap" type="user">
        <id property="userId" column="id"></id>
        <result property="userName" column="username"></result>
        <result property="userBirthday" column="birthday"></result>
        <result property="userSex" column="sex"></result>
        <result property="userAddress" column="address"></result>
    </resultMap>

3、编写测试方法

public void testFindUserByCondition(){
        User user = new User();
        user.setUserName("%老新%");
        user.setUserSex("女");
        List<User> users = userDao.findUserByCondition(user);
        for (User u : users){
            System.out.println(u);
        }
    }

二、foreach和sql标签

1、在IUserDao接口中写方法

返回一个List,传递的参数为QueryVo实体包装类
在这里插入图片描述

2、在QueryVo实体类中添加字段和get&set

创建一个List,里面全为要查找的id(多个)

private List<Integer> ids = new ArrayList<Integer>();

public List<Integer> getIds() {
    return ids;
}

public void setIds(List<Integer> ids) {
    this.ids = ids;
}

3、编写测试类

创建一个List名为ids,这个名字很重要,下面会提到
其余看注释就行

public void testFindUserByIds(){
    List<Integer> ids = new ArrayList<Integer>();
    //创建一个vo
    QueryVo vo = new QueryVo();
    //往ids列表中添加要查找的id们
    ids.add(67);  
    ids.add(73);  
    ids.add(74);  
    //将ids传给vo实体类
    vo.setIds(ids);
    //产生结果List
    List<User> users = userDao.findUserByIds(vo);
    for (User user: users) {
        System.out.println(user);
    }
}

4、在xml中添加

这里传入的参数为一个queryvo对象
if里的test依然是对应的查找条件

重点

<foreach>标签里面参数解释:
collection:需要传入的集合的对象名
open:条件,注意后面有一个左括号(开括号,所以为open)
item:内容和下面#{id}里的id对应
比如item="id"对应#{id}item="uid"对应#{uid},为传进来的参数的别名,
close:闭括号,与open连用
separator:sql语句多个参数之间的分隔符号,这里为逗号

<select id="findUserByIds" resultMap="userMap" parameterType="queryvo">
    select * from user
    <where>
        <if test="ids != null and ids.size() >0 ">
            <foreach collection="ids" open="and id in (" item="id" close=")" separator=",">
                #{id}
            </foreach>
        </if>
    </where>
</select>
学个锤子不学了 发布了6 篇原创文章 · 获赞 0 · 访问量 51 私信 关注

标签:List,ids,vo,SSM,user,sql,Mybatis,id
来源: https://blog.csdn.net/SixthMagnitude/article/details/103951174

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有