动态SQL语句
参考MyBatis讲解文章中的User假设,我们有这样一个需求: 想根据传入UserDO模型
- id或username中不为null的参数进行查询
- 均不为null的时候,要同时符合才能查询
- 均为null的时候不进行查询
SQL语句
按照上文需求,三个需求分别要用以下三条SQL语句才能实现
1 | 1. select id, user_id, username, password from users where id=xxxx |
我们可以看出,这三条语句除了where之外的部分重复性很高,所以可以使用MyBatis的动态SQL语句来完成
动态语句标签
MyBatis提供了一系列标签可以进行SQL语句的拼接
标签 | 功能 |
---|---|
trim | 修剪功能,可以添加去除动态语句的前缀或者后缀 |
if | if判断功能 |
choose…when…otherwise | 多选一功能,类似于swith…case…default |
构造动态语句
我们利用trim功能可以完成以上的三条语句的动态语句,就可以根据传入的模型不同构造出不同的SQL语句
1 | <select id="select" resultMap="BaseResultMap" parameterType="com.company.project.dal.model.user.UserDO" > |
注意使用SQL动态语句的时候,不要留下拖库的可能性
在以上的例子中,如果id和username全部为空,很有可能出现这样的语句
1 | select id, user_id, username, password from users where |
为了避免这种情况发生,必须添加
1 | <if test="id == null and username == null" > |