Java基于注解的批量查询实现
这里是通过 In 关键字来处理该需求
1. 代码实现
1.1 dao(mapper)接口类方法
/**
* 批量查询用户信息
* @param userIds
* @return list
*/
//这里是选择需要使用的provider类及其方法
@SelectProvider(type = UserMapperProvider.class,method = "getUsersByIdsSQL")
//userMap映射集合根据表结构创建即可(这里就不展示出来了)
@ResultMap("userMap")
List<AuthUserDto> getUsersByIds(@Param("userIds") List<Long> userIds);
1.2 provider类
package xxx.xxx.mapper.provider;
import org.apache.ibatis.jdbc.SQL;
import java.util.List;
/**
* @author xx.bao
* @date 2020-11-12
*/
public class UserMapperProvider {
/**
* 批量查询用户信息
*
* @param userIds id集合
* @return String SQL语句
*/
public String getUsersByIdsSQL(List<Long> userIds) {
return new SQL() {
{
SELECT("user_id,username,nick_name,gender,phone,email,avatar_name,avatar_path,password," +
"is_admin,create_by,update_by,pwd_reset_time,create_time,update_time");
FROM("sys_user");
if (userIds.size() > 0) {
StringBuffer where = new StringBuffer();
where.append("user_id IN (");
//构造in集合,遍历list;将list中的元素拼接起来
for (int i = 0; i < userIds.size(); i++) {
where.append(userIds.get(i));
//判断是不是最后一个元素
if (i != userIds.size() - 1) {
//不是,拼接逗号","
where.append(",");
} else {
//为最后元素,则拼接一个不存在的id值
where.append("-1.1");
}
}
where.append(")");
WHERE(where.toString());
}
//根据创建时间排序
ORDER_BY("create_time desc");
}
}.toString();
}
}
provider类中的方法主要是构建一个你所需要的sql语句(个人理解);
这里主要就是构建下面的sql
SELECT (field1,field2, …) from sys_user WHERE user_id IN (1,3,4,7,12) ORDER BY create_time DESC;
这样就实现了批量查询
2. 总结
先去学会使用,再去学会理解!!!
若有不妥之处,望理解!!!