Mybatis--如何在注解式sql中写入动态的SQL语句

突然需要用到动态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值不会自动添加

你可能感兴趣的:(#,Mybatis)