概述
目录
- 1、if-set动态标签
- 1-1、测试类添加代码
- 1-2、接口添加代码
- 1-3、常规写法——映射文件添加代码
- 1-4、测试结果
- 1-4-1、接口代码保持不变
- 1-4-2、修改测试代码,保留id和age
- 1-4-3、运行单元测试,结果如下
- 1-4-4、映射文件中加if标签
- 1-4-3-1、加入set标签删除多余的" , "号
- 1-4-4、接口代码保持不变
- 1-4-5、运行测试结果
- 一定要区分null和0的区别:
- 1、null是空且没有确定的值。
- 2、0为确定的值。
- 2、sql动态分支查询
- 2-1、动态choose when otherwrise
- 2-1-1、测试类添加代码
- 2-1-2、接口添加代码
- 2-1-3、映射文件添加代码
- 2-1-4、测试结果
- 2-1-4-1、sex满足条件就按sex查询
- 2-1-4-1、sex不满足条件就按age查询
- 2-1-4-1-1、接口和映射文件代码保持不变
- 2-1-4-1-2、修改测试类代码
- 2-1-4-1-3、运行单元测试结果
- 2-2、小结
- choose when otherwise和java中的if--if else--if else--.....--else的用法是一样的,哪一个满足条件就会去运行哪一个
1、if-set动态标签
1、动态实现数据更新操作,条件id=8,将八戒改为天蓬元帅,性别 未知
2、未被修改的八戒数据
1-1、测试类添加代码
代码如下:
//动态实现数据更新操作,条件id=8,将八戒改为天蓬元帅,年龄:18 ,性别 未知
@Test
public void upade1(){
Demo_User_Mapper d = session.getMapper(Demo_User_Mapper.class);
Demo_User d1 = new Demo_User(8,"天蓬元帅",18,"未知");
int rows = d.updateU(d1);
if(rows > 0){
System.out.println("受影响行数"+rows);
}
}
1-2、接口添加代码
代码如下:
int updateU(Demo_User d1);
1-3、常规写法——映射文件添加代码
代码如下:
<!-- 动态实现数据更新操作,条件id=8,将八戒改为天蓬元帅,年龄:18 ,性别 未知
-->
<update id="updateU">
update demo_user
set
name = #{name},
age = #{age},
sex = #{sex}
where
id = #{id}
</update>
1-4、测试结果
当用户把所有的数据都传递过来的时候,这种语法是没问题的,那如果用户他只传递了 id和age ,其他的忘了,会出现什么问题呢?
1-4-1、接口代码保持不变
1-4-2、修改测试代码,保留id和age
代码如下:
//动态实现数据更新操作,条件id=8,将八戒改为天蓬元帅,年龄:18 ,性别 未知
@Test
public void upade1(){
Demo_User_Mapper d = session.getMapper(Demo_User_Mapper.class);
Demo_User d1 = new Demo_User();
d1.setId(8).setAge(520);
int rows = d.updateU(d1);
if(rows > 0){
System.out.println("受影响行数"+rows);
}
}
1-4-3、运行单元测试,结果如下
把null作为值写进了数据库。
1-4-4、映射文件中加if标签
以不为null的属性参数作为set条件
1-4-3-1、加入set标签删除多余的" , "号
代码如下:
<!-- 动态实现数据更新操作,条件id=8,将八戒改为天蓬元帅,年龄:18 ,性别 未知
-->
<update id="updateU">
update demo_user
<set>
<if test="name != null">name = #{name} , </if>
<if test="age != null">age = #{age} , </if>
<if test="age != null">sex = #{sex} </if>
</set>
where
id=#{id}
</update>
1-4-4、接口代码保持不变
1-4-5、运行测试结果
一定要区分null和0的区别:
1、null是空且没有确定的值。
2、0为确定的值。
2、sql动态分支查询
以条件进行数据查询:如果存在sex,则按sex查询,如果sex不存在,则按age查询
多个条件:sex=“xxx”,age=xxx
**SQL:
1、select * from demeo_user where sex=“xxx” and age = xxx **
**2、select * from demeo_user where sex=“xxx” or age = xxx **
这种语法能满足上述的条件查询吗?
答案:不能,这两条sql单独使用是都不能满足,两者合在一起就能满足,如果sql提供if–else结构多好,可是SQL可没有提供这种语法。
2-1、动态choose when otherwrise
2-1-1、测试类添加代码
以“马云”为例:
代码如下:
//以条件进行数据查询:如果存在sex,则按sex查询,如果sex不存在,则按age查询
@Test
public void select1(){
Demo_User_Mapper d = session.getMapper(Demo_User_Mapper.class);
Demo_User d1 = new Demo_User();
d1.setSex("男").setAge(46);
List<Demo_User> list = d.choose(d1);
System.out.println(list);
}
2-1-2、接口添加代码
代码如下:
List<Demo_User> choose(Demo_User d1);
2-1-3、映射文件添加代码
代码如下:
<!-- 以条件进行数据查询:如果存在sex,则按sex查询,如果sex不存在,则按age查询
choose: 是分支结构的标识标签,有且只有一个条件体有效
when: 判定条件体和<if>标签差不多
otherwise: 当<when>的条件都不满足时,就会生效
choose、when、otherwise 和 java里的 if——if else——if else....else 用法是一样的
-->
<select id="choose" resultType="Demo_User">
select * from demo_user
where
<choose>
<when test="sex != null"> sex = #{sex} </when>
<otherwise>age = #{age}</otherwise>
</choose>
</select>
2-1-4、测试结果
2-1-4-1、sex满足条件就按sex查询
2-1-4-1、sex不满足条件就按age查询
2-1-4-1-1、接口和映射文件代码保持不变
2-1-4-1-2、修改测试类代码
代码如下:
//以条件进行数据查询:如果存在sex,则按sex查询,如果sex不存在,则按age查询
@Test
public void select1(){
Demo_User_Mapper d = session.getMapper(Demo_User_Mapper.class);
Demo_User d1 = new Demo_User();
d1.setAge(46);
List<Demo_User> list = d.choose(d1);
System.out.println(list);
}
2-1-4-1-3、运行单元测试结果
2-2、小结
choose when otherwise和java中的if–if else–if else–…–else的用法是一样的,哪一个满足条件就会去运行哪一个
最后
以上就是可耐小天鹅为你收集整理的java后台管理系统项目学习day09--mybatis<if -set,choose when otherwris>1、if-set动态标签2、sql动态分支查询的全部内容,希望文章能够帮你解决java后台管理系统项目学习day09--mybatis<if -set,choose when otherwris>1、if-set动态标签2、sql动态分支查询所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复