1.动态SQL
1.1动态更新
测试类
@Test
public void testUpdate(){
User user = new User();
user.setId(5).setName("御弟哥哥").setAge(18); //sex=null
userMapper.updateUser(user);
System.out.println("修改操作成功!!!");
}
Mapper接口
void updateUser(User user);
Mapper映射
<update id="updateUser">
update demo_user
<set>
<if test="name !=null">name=#{name},</if>
<if test="age !=null">age=#{age},</if>
<if test="sex !=null">sex=#{sex}</if>
</set>
where id=#{id}
</update>
1.2动态SQL
choos when otherwise
如果不想使用所有的条件可以使用choose 类似于java中的switch 语法
如果name有值,则按照name查询, if
如果age有值,则按照age查询, else-if
否则按照sex查询数据. else
测试类
@Test
public void testFindChoose(){
User user = new User();
user.setName("御弟哥哥").setAge(18).setSex("男");
List<User> list = userMapper.findUserChoose(user);
System.out.println(list);
}
Mapper接口
List<User> findUserChoose(User user);
Mapper映射
<select id="findUserChoose" resultType="User">
select * from demo_user where
<choose>
<when test="name !=null">name=#{name}</when>
<when test="age !=null">age=#{age}</when>
<otherwise>sex = #{sex}</otherwise>
</choose>
</select>
2.数据封装-resultMap
数据封装的要求 sql的结果集中的数据,必须与对象中的属性一致.
表中的数据:
Pojo属性
测试类
测试接口
Mapper映射
3.Mybatis
3.1常见的关联性
核心从一头出发看向另一头
1.一对一
员工对应一个部门 用户对应一个ID
2.一对多
一个老师对应多个学生
3.多对一
多对一本质还是一对一
4.多对多
一个老师对应多个学生 一对多
一个学生对应多个老师 一对多 双向一对多
3.2编辑表
表1:emp
字段 id name age dept_id
表2:dept
3.3关联关系实现
编辑Emp对象
编辑Dept对象
代码搭建