mybatis 注解开发 动态SQL

在 Mybatis 中的注解开发中,对于动态 SQL 的处理是比较繁琐的,所以如果有动态 SQL 的操作,建议使用映射配置文件文件方式实现。

1.脚本动态sql

点击查看代码
//04_1 动态sql 脚本sql
    @Select("<script>select * from users where 1=1 <if test=\"username!=null and username!=''\" >and username=#{username}</if>" +
            "<if test=\"usersex!=null and usersex!=''\" >and usersex=#{usersex}</if></script>")
    List<Users> selectUsersByProperty(Users users);

2.方法中构建 SQL

在 MyBatis3 的注解中包含了@SelectProvider、@UpdateProvider、@DeleteProvider、 @InsertProvider,这些注解统称为 SqlProvider,它们分别对应着查询、修改、删除、新增操作。当使用这些注解时将不在注解中直接编写 SQL,而是调用某个类的特定方法来生成 SQL。

1.接口

点击查看代码
//04_2 动态sql 构建sql type 构建的类  method 要执行的sql方法
    @SelectProvider(type = UsersMapperProvider.class, method = "selectUsersByPropertySQL")
    List<Users> selectUsersByPropertyProvider(Users users);

2.类

点击查看代码
class UsersMapperProvider {
        public String selectUsersByPropertySQL(Users users) {
            StringBuffer stringBuffer = new StringBuffer("select * from users where 1=1 ");
            String username = users.getUsername();
            String usersex = users.getUsersex();
            if (username != null && username !="") {
                stringBuffer.append(" and username=#{username}");
            }
            if (usersex != null && usersex !="") {
                stringBuffer.append(" and usersex=#{usersex}");
            }
            return stringBuffer.toString();
        }
    }

写第二个时,遇到的bug
初始化错误:
解决方法
方法要 public 的,类要是内部类,不要写在接口外面

posted @ 2021-12-05 11:24  风的指引  阅读(554)  评论(0)    收藏  举报