突然需要用到动态SQL,应为之前我们用的是在Mapper层创建一个接口类,然后通过注解式来查询数据库的:如下
@Select("SELECT user_id " +
" FROM sp_user_relation WHERE up_user_id=#{userId} OR user_id=#{user_id}")
@Results({
@Result(property = "userId", column = "user_id")
})
List getId(String userId);
这样子写死后不之如何才能写成动态,便去网上查询,发现如下写法: 动态SQL(创建一个类生成SQL)
但是发现这样子太麻烦了,便找寻其他方式,功夫不负有心人,真被我找到了,话不多说,上代码:
@Select("")
@Results({
@Result(property = "userId", column = "promo_user_id"),
@Result(property = "name", column = "promoed_name"),
@Result(property = "phone", column = "promoed_phone")
})
List getAbloud(@Param("name")String name,@Param("phone")String phone);
这段代码也是用了注解式SQL,在其中用script标签包围,然后像xml语法一样书写;
其中动态SQL处使用 If 标签做判断
注:
@Param 标签用于 传入值 用 标签括号里的参数接收,然后在放入sql中运用
测试成功了,可是如果多条数据判断则出现另一个问题,if内要判断多次,并且多参数中的逗号不好确定,这是绝不可取的,然后我又找到一个标签解决了:
代码如下
@Select("")
@Results({
@Result(property = "userId", column = "promo_user_id"),
@Result(property = "name", column = "promoed_name"),
@Result(property = "phone", column = "promoed_phone")
})
List getAbloud(@Param("name")String name,@Param("phone")String phone);
这次使用了
trim主要功能是可以在Trim包含的内容前加上某些前缀(prefix),也可以在Trim包含的内容之后加上某些后缀(suffix)
还可以把Trim包含内容的首部的某些内容忽略掉(prefixOverrides) ,也可以把Trim包含的内容的尾部的某些内容忽略掉(suffixOverrides),
使用了这个标签后,之前的问题变很轻松的解决了.
注:
xxxx
之前我在这段标签前加一个 if 标签包含这段代吗,应为担心 标签中为空 但SQL 会加 order by 但经测试后发现标签内容为空则presfix值不会自动添加