MyBatis3
博文目录
动态SQL
问题:
我有一个SQL语句,根据用户名和密码来查一个用户!前面的博文讲到了,将条件封装到一个对象中进行传值!
SQL语句:
select id,username,password from t_user where username=#{username} and password=#{password}
传参的代码如下:
User user=new User(); user.setUsername("tom"); user.setPassword("000000"); userMapper.findByUsernameAndPassword(user);
这样就可以实现多条件查询了,但是如果我们传给方法的user没有设置password,即:
User user=new User(); user.setUsername("tom"); userMapper.findByUsernameAndPassword(user);
这样会报错的!!!
这时我们可以MyBatis提供的动态查询:
上面的问题可以使用if条件查询进行解决!
在UserMapper.xml将方法的配置修改如下:
<select id="findByUsernamePassword" parameterType="User" resultType="User"> select id,username,password from t_user where username=#{username} <!--如果password!=null,查询条件加一条,否则只有username=*--> <if test="password!=null"> and password=#{password} </if> </select>
这样就可以实现if动态查询了!!
你可以使用多个If进行条件的过滤,但是看起来挺怪的,我们介绍下面的:choose(where,otherwise)
<select id="findByUsernamePassword" parameterType="User" resultType="User"> select id, <!--当password!=null时,选择id,username,password,否则选择id,username--> <choose> <when test="password!=null"> username,password </when> <otherwise> username </otherwise> </choose> from t_user where username=#{username} <if test="password!=null"> and password=#{password} </if> </select>
对于下面这种情况,当两个 If 条件都不符合时,剩下一个where怎么办呢?肯定是错的!
<select id="findByUsernamePassword" parameterType="User" resultType="User"> select id, <choose> <when test="password!=null"> username,password </when> <otherwise> username </otherwise> </choose> from t_user where <!-- 若下面的都不成立,上面的where就是多余的,SQL就是错误的 --> <if test="username!=null"> username=#{username} </if> <if test="password!=null"> and password=#{password} </if> </select>
我们使用where标签进行条件的封装,如果一个都不成立,则就没有where否则自动添加where。
<select id="findByUsernamePassword" parameterType="User" resultType="User"> select id, <choose> <when test="password!=null"> username,password </when> <otherwise> username </otherwise> </choose> from t_user <where> <!-- 若下面的都不成立,就不会出现where--> <if test="username!=null"> username=#{username} </if> <if test="password!=null"> and password=#{password} </if> </where> </select>
使用trim可以实现跟where相同的效果:
<select id="findByUsernamePassword" parameterType="User" resultType="User"> select id, <choose> <when test="password!=null"> username,password </when> <otherwise> username </otherwise> </choose> from t_user <trim prefix="WHERE" prefixOverrides="AND |OR "> <!-- 若下面的都不成立,就不会出现where--> <if test="username!=null"> username=#{username} </if> <if test="password!=null"> and password=#{password} </if> </trim> </select>
注意:
条件修改后的返回数据是多个还是单个,要注意修改其resultType
对于我们要修改某一记录时,我们使用set来实现对数据的修改:
<update id="edit" parameterType="User"> update t_user <set> <if test="username!=null">username=#{username},</if> <if test="password!=null">password=#{password} </if> </set> where id=#{id} </update>
同样可以使用trim来替换set:
<update id="edit" parameterType="User"> update t_user <trim prefix="SET" suffixOverrides=","> <if test="username!=null">username=#{username},</if> <if test="password!=null">password=#{password} </if> </trim> where id=#{id} </update>
对于:where ** in ()查询,我们使用foreach:
<select id="findUserIn" resultType="User" parameterType="List"> select id,username,password from t_user where id in <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> </select>
list指示这里的参数需要的是一个List
item表示每一项
open,separator,close表示Item们包裹在 () 中,并以 , 分隔!!!
测试:
UserMapper userMapper=session.getMapper(UserMapper.class); List<Integer> l=new ArrayList<Integer>(); l.add(1); l.add(2); List<User> userList=userMapper.findUserIn(l); System.out.println(userList.size());//2
相关推荐
Mybatis入门教程,让你瞬间明白Mybatis的配置方法。
Springboot整合Mybatis MyBatis 的前身是 Apache 的开源项目 iBatis。MyBatis 几乎可以代替 JDBC,是一个支持普通 SQL 查询,存储过程和高级映射的...可以帮助读者轻松掌握代码的内容,快速入门,持续深化,举一反三。
SpringMvc_day01.spring入门-springMVC三大核心器(视图解析器,处理器映射器and适配器).springMvc整合myBatis SpringMvc_day02高级参数.上传图片.JSON数据交互.拦截器 15-SSM企业案例-客户管理系统(学习1天) ...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
4. SpringBoot入门程序 5. SpringBoot配置文件类型 6. 配置文件与配置类的属性映射方式 7. SpringBoot整合Mybatis 8. SpringBoot整合Junit 9. SpringBoot整合Redis 阶段二: SpringBoot核心原理 1. 起步依赖原理分析...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
同时,它还集成了 MyBatis 数据库持久层框架,方便毕业生进行数据库操作和管理。 在功能方面,MeyboMail Web 提供了丰富的邮件发送功能。毕业生可以使用它来实现群发邮件、邮件合并和邮件追踪等功能。这些功能可以...
3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
用于练手的SSM小项目,从数据库表的SQL语句,后台DAO层代码编写,前端使用Bootstrap3搭建一个简单的后台页面,数据的CRUD通过SSM框架进行完成,可以很好地用来巩固和复习应用SSM框架做项目的过程。.zip SSM框架学习...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...