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();
}
}