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 的,类要是内部类,不要写在接口外面