如何在mybatis注解开发中使用动态SQL

1、使用脚本sql

      脚本sql和xml配置基本类似,只需在外层包裹上<script></script>即可

      例如:

public interface UserMapper {
    @Select("<script>select * from user <where><if test='username != null'>and username = #{username}</if></where></script>")
    List<User> getUsers(User user);
}

 

2、使用方法构建sql

       使用方法构建sql需要用到内部类,此外要将@select替换成@selectProvider,另外insert,update,delete也都有相应的Provider方法使用

       具体使用方法如下:

    @SelectProvider(type = UserMapperProvider.class,method = "getUsers")
    List<User> getUsers(User user);

    class UserMapperProvider{
        public String getUsers(User user){
            String sql = "select * from user";
            if(user != null){
                if(user.getUsername() != null){
                    sql = sql + " where username = '"+user.getUsername()+"'";
                }
            }
            return sql;
        }
    }

3、使用结构化sql

       使用结构化sql和使用方法构建sql基本相同,只不过是将String替换成new SQL(),注意点是SQL对象中的SELECT、FROM、WHERE等是叠加的,不是覆盖的,如下例子中两次SELECT等同于一次SELECT("id,username,password")

       具体使用方法如下:

    @SelectProvider(type = UserMapperProvider.class,method = "getUsers")
    List<User> getUsers(User user);

    class UserMapperProvider{
        public String getUsers(User user){
            SQL sql = new SQL();
            sql.SELECT("id,username");
            sql.SELECT("password");
            sql.FROM("user");
            if(user.getUsername() != null){
                sql.WHERE("username = #{username}");
            }
            return sql.toString();
        }
    }

      此外还有另外一种写法:

    @SelectProvider(type = UserMapperProvider.class,method = "getUsersBySql")
    List<User> getUsers(User user);

    class UserMapperProvider{
        public String getUsers(User user){
            return new SQL(){{
                SELECT("id,username");
                SELECT("password");
                FROM("user");
                if(user.getUsername() != null){
                    WHERE("username = #{username}");
                }
            }}.toString();
        }
    }

 

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值