❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️
Spring + Spring MVC + MyBatis_冷兮雪的博客-CSDN博客
终于到了MyBatis最后一篇,这篇讲的是动态SQL的使用。
动态 SQL 是Mybatis的强大特性之⼀,能够完成不同条件下不同的 SQL 拼接。 可以参考官方文档:mybatis – MyBatis 3 | 动态 SQL
在注册用户的时候,可能会有这样⼀个问题,有的信息是必填,有的是选填,那如果在添加⽤户的时候有不确定的字段传入,程序应该 如何实现呢?
这个时候就需要使用动态标签
insert into user(
username,
password,
sex,
birthday,
head
) values (
#{username},
#{password},
#{sex},
#{birthday},
#{head}
)
需要注意 test 中的 sex,是传入对象中的属性,不是数据库字段。而且if标签都是成对出现的
之前的插入用户功能,只是有⼀个 sex 字段可能是选填项,如果所有字段都是非必填项,就考虑使用
调整 UserMapper.xml 的插入语句为:
insert into user
username,
password,
sex,
birthday,
head,
create_time,
#{username},
#{password},
#{sex},
#{birthday},
#{head},
#{createTime},
在以上 sql 动态解析时,会将第⼀个
传入的用户对象,根据属性做 where 条件查询,用户对象中属性不为 null 的,都为查询条件。如user.username 为 "a",则查询条件为 where username="a":
UserMapper:
List selectByCondition(User user);
UserMapper.xml:
根据传入的用户对象属性来更新用户数据,可以使用
UserMapper 接口中修改用户方法:根据传入的用户 id 属性,修改其他不为 null 的属性:
int updateById(User user);
UserMapper.xml 中添加更新用户 SQL:
update user
username=#{username},
password=#{password},
sex=#{sex},
birthday=#{birthday},
head=#{head},
create_time=#{createTime},
where id=#{id}
以上
对集合进⾏遍历时可以使用该标签。
示例:根据多个文章 id 来删除文章数据。
ArticleMapper 中新增接口方法:
int deleteByIds(List ids);
ArticleMapper.xml 中新增删除 SQL:
delete from article where id in
#{item}
单元测试代码,删除id为5和6的用户:
@Test
void deleteByIds() {
List ids=new ArrayList<>();
ids.add(5);
ids.add(6);
int result=userMapper.deleteByIds(ids);
System.out.println("删除:"+result);
}
类似于Java中的switch语句,根据不同条件选择不同的SQL片段。
动态SQL是MyBatis的一个重要特性,它允许你在SQL语句中根据条件动态地添加、修改或删除语句片段,以便更灵活地构建SQL查询和更新操作。
上面这些示例只是MyBatis动态SQL的一小部分用法。你可以根据自己的需求和情况,结合使用这些特性来构建更灵活、可维护的数据库操作语句。记得阅读MyBatis的官方文档以深入了解动态SQL的更多用法和细节。