参考大佬文章:
mybatis的注解开发之三种动态sql
关于new SQL(){{}}的问题,匿名内部内的构造方法
MyBatis官网 - SQL 语句构建器
注解开发时动态SQL用法
- 这里只写
结构化SQL
其他用法查考顶部的文章
IUserDao
- 用户Dao接口
// type属性: 结构化SQL文件java类
// method属性: 该java类里面的方法
@UpdateProvider(type = top.jybill.sql.UserMapperProvider.class, method = "getUser")
int updateUser(User user);
UserMapperProvider
- 结构化SQL自定义的类
public class UserMapperProvider{
public String getUser(final User user) {
return new SQL(){{
UPDATE("user");
if (user.getUserName() != null) {
SET("username = #{userName}");
}
if (user.getUserAddress() != null) {
SET("address = #{userAddress}");
}
if (user.getUserSex() != null) {
SET("sex = #{userSex}");
}
if (user.getUserBirthday() != null) {
SET("brithday = #{userBrithday}");
}
WHERE("id = #{userId}");
}}.toString();
}
}
new SQL(){{}}
的含义:外层花括号是创建一个匿名内部类,内层的花括号是一个构造代码块,在实例化一个对象时会先于构造方式执行,编译时会将构造代码块移入构造方法中