注解 @SelectProvider 示例如下,其他@XXXProvider 参照即可
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
public User getUserById(@Param("id") Integer id);
@SelectProvider(value = UserSqlProvider.class, method = "getSqlNoArgs")
public List<User> getBeanNoArgs();
@SelectProvider(value = UserSqlProvider.class, method = "getSqlWithArgs")
public User getBeanWithArgs( Integer id);
@SelectProvider(value = UserSqlProvider.class, method = "getSqlWithArgs")
public Map<String,Object> getMapWithArgs( Integer id);
@SelectProvider(value = UserSqlProvider.class, method = "getSqlByEntity")
public User getBeanByEntity(User user);
@SelectProvider(value = UserSqlProvider.class, method = "getSqlListByEntity")
public List<User> getBeanListByEntity(User user);
@SelectProvider(value = UserSqlProvider.class, method = "getSqlListByMap")
public List<User> getBeanListByMap(Map<String,Object> map);
@SelectProvider(value = UserSqlProvider.class, method = "getSqlListByMap")
public List<Map<String,Object>> getBeanMapListByMap(Map<String,Object> map);
}
实现自己的UserSqlProvider,拼接SQL(参数最好是占位符#{},防止sql 注入)并返回
public class UserSqlProvider{
public String getSqlNoArgs() {
return "select * from user";
}
public String getSqlWithArgs(Integer id) {
return "select * from user where id = "+ id;
}
public String getSqlByEntity(User user) {
StringBuilder sqlBuilder = new StringBuilder("select * from user where 1=1 ");
if (user.getId() != null){
sqlBuilder.append("and id = #{id}");
}
if (user.getName() != null){
sqlBuilder.append(" and name = '"+ user.getName()+"'");
}
return sqlBuilder.toString();
}
public String getSqlListByEntity(User user) {
StringBuilder sqlBuilder = new StringBuilder("select * from user where 1=1 ");
if (user.getId() != null){
sqlBuilder.append("and id = #{id}");
}
if (user.getName() != null){
sqlBuilder.append(" or name = '"+ user.getName()+"'");
}
return sqlBuilder.toString();
}
public String getSqlListByMap(Map<String,Object> map) {
StringBuilder sqlBuilder = new StringBuilder("select * from user where 1=1 ");
Object id = map.get("id");
Object name = map.get("name");
if (id != null){
sqlBuilder.append("and id = #{id}");
}
if (name != null){
sqlBuilder.append(" or name = '"+ name.toString() +"'");
}
return sqlBuilder.toString();
}
}
如果sql 太过于复杂,还是在xml里面写吧