Commit 33b077e2 authored by 杨锐's avatar 杨锐

searchUserDetailList 优化。

parent 68967cf0
...@@ -83,6 +83,41 @@ public class UserDetailServiceImpl implements IUserDetailService { ...@@ -83,6 +83,41 @@ public class UserDetailServiceImpl implements IUserDetailService {
@Override @Override
public List<UserDetailVO> searchUserDetailList(String name, String phoneNo, String idNo) { public List<UserDetailVO> searchUserDetailList(String name, String phoneNo, String idNo) {
return jdbcTemplate.query(buildSearchUserDetailListSql(name, phoneNo, idNo), (resultSet, i) -> {
UserDetailVO userDetailVO = new UserDetailVO();
userDetailVO.setId(resultSet.getLong("id"));
userDetailVO.setUserId(resultSet.getLong("user_id"));
userDetailVO.setPhoneNo(resultSet.getString("phone_no"));
userDetailVO.setName(resultSet.getString("name"));
userDetailVO.setIdNo(resultSet.getString("id_no"));
userDetailVO.setIdType(IdType.values()[resultSet.getInt("id_type")]);
userDetailVO.setIsAuthenticated(resultSet.getInt("is_authenticated") == 1);
userDetailVO.setGender(Gender.values()[resultSet.getInt("gender")]);
userDetailVO.setEmail(resultSet.getString("email"));
userDetailVO.setQq(resultSet.getString("qq"));
userDetailVO.setEnable(resultSet.getObject("enable") == null ? null : resultSet.getBoolean("enable"));
userDetailVO.setCreatedAt(resultSet.getTimestamp("created_at").getTime());
userDetailVO.setUpdatedAt(resultSet.getTimestamp("updated_at").getTime());
return userDetailVO;
});
// TODO: 2019/12/24 by rui branch feature_optimize_20191223 上线验证后,即删除该注释块
// List<UserDetail> details = userDetailRepository.findAll(getSpecification(name, phoneNo, idNo));
// Map<Long, User> userMap = Maps.newHashMap();
// if (!CollectionUtils.isEmpty(details)) {
// List<Long> userIds = details.stream().map(UserDetail::getUserId).collect(Collectors.toList());
// List<User> users = userRepository.findAll((root, query, cb) -> {
// query.where(root.get("id").in(userIds));
// return query.getRestriction();
// });
// userMap = users.stream().collect(Collectors.toMap(User::getId, o -> o));
// }
// Map<Long, User> finalUserMap = userMap;
// List<UserDetailVO> userDetailVOS = details.stream().map(o -> fromUserDetailAndUserMap(o, finalUserMap)).collect(Collectors.toList());
// return userDetailVOS;
}
private String buildSearchUserDetailListSql(String name, String phoneNo, String idNo) {
/* 优化两次sql查询耗时问题,示例name=王斌*/ /* 优化两次sql查询耗时问题,示例name=王斌*/
// TODO: 2019/12/24 by rui 暂未找到jpa data同时满足join,动态传参方式。若日后发现,应优化该段代码。 // TODO: 2019/12/24 by rui 暂未找到jpa data同时满足join,动态传参方式。若日后发现,应优化该段代码。
/* 高层模块已校验至少必须满足一个条件不为空 */ /* 高层模块已校验至少必须满足一个条件不为空 */
...@@ -103,41 +138,8 @@ public class UserDetailServiceImpl implements IUserDetailService { ...@@ -103,41 +138,8 @@ public class UserDetailServiceImpl implements IUserDetailService {
if (sql.endsWith("and")) { if (sql.endsWith("and")) {
sql = sql.substring(0, sql.length() - 3); sql = sql.substring(0, sql.length() - 3);
} }
return jdbcTemplate.query(sql, new RowMapper<UserDetailVO>() { sql = sql + " limit 500";
@Override return sql;
public UserDetailVO mapRow(ResultSet resultSet, int i) throws SQLException {
UserDetailVO userDetailVO = new UserDetailVO();
userDetailVO.setId(resultSet.getLong("id"));
userDetailVO.setUserId(resultSet.getLong("user_id"));
userDetailVO.setPhoneNo(resultSet.getString("phone_no"));
userDetailVO.setName(resultSet.getString("name"));
userDetailVO.setIdNo(resultSet.getString("id_no"));
userDetailVO.setIdType(IdType.values()[resultSet.getInt("id_type")]);
userDetailVO.setIsAuthenticated(resultSet.getInt("is_authenticated") == 1);
userDetailVO.setGender(Gender.values()[resultSet.getInt("gender")]);
userDetailVO.setEmail(resultSet.getString("email"));
userDetailVO.setQq(resultSet.getString("qq"));
userDetailVO.setEnable(resultSet.getObject("enable") == null ? null : resultSet.getBoolean("enable"));
userDetailVO.setCreatedAt(resultSet.getTimestamp("created_at").getTime());
userDetailVO.setUpdatedAt(resultSet.getTimestamp("updated_at").getTime());
return userDetailVO;
}
});
// TODO: 2019/12/24 by rui branch feature_optimize_20191223 上线验证后,即删除该注释块
// List<UserDetail> details = userDetailRepository.findAll(getSpecification(name, phoneNo, idNo));
// Map<Long, User> userMap = Maps.newHashMap();
// if (!CollectionUtils.isEmpty(details)) {
// List<Long> userIds = details.stream().map(UserDetail::getUserId).collect(Collectors.toList());
// List<User> users = userRepository.findAll((root, query, cb) -> {
// query.where(root.get("id").in(userIds));
// return query.getRestriction();
// });
// userMap = users.stream().collect(Collectors.toMap(User::getId, o -> o));
// }
// Map<Long, User> finalUserMap = userMap;
// List<UserDetailVO> userDetailVOS = details.stream().map(o -> fromUserDetailAndUserMap(o, finalUserMap)).collect(Collectors.toList());
// return userDetailVOS;
} }
@Override @Override
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment