一、引言
目前互联网大厂在搭建后端Java服务时,常使用Springboot
搭配Mybatis/Mybatis-plus
的框架。Mybatis/Mybatis-plus
之所以能成为当前国内主流的持久层框架,与其本身的优点有关:支持定制动态 SQL、存储过程及高级映射,简化数据库操作。
可能有人会问, 为什么要用动态SQL,在开发过程中把SQL写死不是比较方便、更加不容易出错吗?其实这是由开发过程中具体业务需求决定的,比如在用户注册场景下,用户注册填写信息时,会有必填字段和非必填字段,不同用户注册时传给后端的参数有区别,对应的插入用户表的SQL也不一样,因此,在这些的场景下开发人员需要使用动态SQL来完成。本文首先介绍Springboot项目中SQL映射方式,最后介绍动态SQL和支持动态SQL的核心标签。
欢迎关注工 众号:ItBeeCoder,查看更多高质量技术文章,发送“后端”获取资料
二、SQL映射方式
1、XML映射文件,该文件通常位于 resources/
自定义的包路径/mapper
目录。
示例:
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
<select id="selectUserById" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
2、注解映射
适用场景:简单 SQL 可直接在接口方法上使用注解。
示例:
public interface UserMapper {
@Insert("INSERT INTO user(name) VALUES(#{name})")
@Options(useGeneratedKeys = true, keyProperty = "id")
void insertUser(User user);
}
欢迎关注工 众号:ItBeeCoder,查看更多高质量技术文章,发送“后端”获取资料
三、动态SQL及常用标签
在 MyBatis中,动态SQL允许开发人员根据不同的条件构建不同的 SQL 语句。执行原理为,使用OGNL从SQL参数对象中计算表达式的值,根据表达式的值动态拼接SQL,以此来完成动态SQL的功能。动态SQL中常用的核心标签有:、、、、、等。
1、动态 SQL
- 以下SQL为XML文件中复杂动态SQL的示例:
<select id="searchUsers" resultType="User">
SELECT * FROM user
<where>
<if test="name != null">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="roles != null">
AND role IN
<foreach item="role" collection="roles" open="(" separator="," close=")">
#{role}
<