<if test="">test中填写的是判断条件UserMapper.java中添加抽象方法实体类对象作为方法参数即可 /**
* 更新数据,比如密码或者年龄
* @param user User对象,其中封装了用户密码或者用户的年龄
* @return 受影响的行数,成功返回1,否则返回0
*/
Integer update(User user);UserMapper.xml中配置<update>节点sql语句将会少了一个逗号, <update id="update" parameterType="cn.tedu.spring.entity.User">
update user
set
<if test="password!=null">
password=#{password}
</if>
<if test="age!=null">
age=#{age}
</if>
where id=#{id}
</update>age,因此只需要在新建的User对象中添加age的值即可,那么此时password的值不能设置id的值 @Test
public void testUpdate() {
//加载Spring的配置文件
AbstractApplicationContext ac
= new ClassPathXmlApplicationContext(
"spring-mvc.xml",
"spring-dao.xml");
//获取UserMapper的bean,这个是spring通过扫描mapper.xml文件自动为mybatis自动创建的,首字母小写
UserMapper userMapper
= ac.getBean(
"userMapper", UserMapper.class);
//新建一个User对象
User user=new User();
user.setId(3); //设置id
user.setAge(33); //设置年龄
int affectRows=userMapper.update(user);
System.out.println(affectRows);
ac.close();
}UserMpper.java中添加接口方法 /**
* 查找用户信息,根据用户名或者用户id查询
* @param user User对象,其中封装了用户名或者用户id
* @return 用户对象
*/
User findUser(User user);UserMapper.xml中配置<!--
User findUser(User user);
不能同时查询,缺少连接符号 and or
-->
<select id="findUser" parameterType="cn.tedu.spring.entity.User" resultType="cn.tedu.spring.entity.User">
select * from user
where
<if test="id!=null">
id=#{id}
</if>
<if test="username!=null">
username=#{username}
</if>
</select>@Test
public void testFind() {
//加载Spring的配置文件
AbstractApplicationContext ac
= new ClassPathXmlApplicationContext(
"spring-mvc.xml",
"spring-dao.xml");
//获取UserMapper的bean,这个是spring通过扫描mapper.xml文件自动为mybatis自动创建的,首字母小写
UserMapper userMapper
= ac.getBean(
"userMapper", UserMapper.class);
//新建一个User对象
User user=new User();
user.setId(3); //设置id
//根据id查找
System.out.println(userMapper.findUser(user));
ac.close();
}switch,通常与when搭配使用<select>
select * from user where
<choose>
<when test="password!=null">
password=#{password}
</when>
<otherwise>
id=#{id}
</otherwise>
</choose>
</select><select id="findUser" parameterType="cn.tedu.spring.entity.User" resultType="cn.tedu.spring.entity.User" >
select * from user
where
<if test="password!=null">
password=#{password}
</if>
<if test="username!=null">
and username=#{username}
</if>
</select>User对象中只是设置了username的值,那么此时的sql语句将会变成select * from user where and username=#{username},很明显多了一个and<where>标签主要是用于简化where子句的编写,<where>可以替代sql语句中的where,而且还可以将后面多余的and或者or去掉select 字段 from 表名
<where>
.....
</where><where>标签解决上面的问题<select id="findUser" parameterType="cn.tedu.spring.entity.User" resultType="cn.tedu.spring.entity.User" >
select * from user
<where>
<if test="password!=null">
and password=#{password}
</if>
<if test="username!=null">
and username=#{username}
</if>
</where>
</select>User对象中只是设置了一个username的值,那么会去掉前面的and关键字,并且此时的sql语句会变成:select * from user where username=#{username}<update id="update" parameterType="cn.tedu.spring.entity.User">
update user
set
<if test="password!=null">
password=#{password},
</if>
<if test="age!=null">
age=#{age},
</if>
<if test="username!=null">
username=#{username}
</if>
where id=#{id}
</update><update>中可以看出,如果我们在User对象中没有设置password,age,username的值,那么构建出来的sql语句变成了update user set where id=#{id},很明显是一个错误的语句。User对象中值设置了password的值,那么这里的sql语句变成了update user set password=#{password}, where id=#{id},很明显,这个sql多了一个逗号<set>,可以在<set>元素所在位置输出一个set关键字,而且可以去除内容结尾中无关的逗号,有了<set>元素,那么我们可以动态的修改字段update table_name
<set>
......
</set><update id="update" parameterType="cn.tedu.spring.entity.User">
update user
<set>
<if test="password!=null">
password=#{password},
</if>
<if test="age!=null">
age=#{age},
</if>
<if test="username!=null">
username=#{username}
</if>
</set>
where id=#{id}
</update>SQL语句的编程,但是,使用动态SQL的原则应该是希望代码复用,而不是编程,更不要用动态sql解决业务方法的问题原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。