在 Java 里执行 SQL 查询并排序,本质上还是靠 SQL 的 ORDER BY,Java 只是负责“发送 SQL 并接收结果”。下面分几种常见情况说明。
String sql = "SELECT id, name, age FROM user ORDER BY age DESC";
try (Connection conn = dataSource.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
System.out.println(rs.getInt("id") + " " + rs.getString("name"));
}
}
✅ 排序在 数据库端完成(推荐)
SELECT * FROM user
ORDER BY age DESC, name ASC;
String sortField = "age"; // 来自前端
String sortOrder = "DESC";
String sql = "SELECT * FROM user ORDER BY " + sortField + " " + sortOrder;
⚠️ 字段名不能参数化,必须白名单校验:
if (!List.of("age", "name").contains(sortField)) {
throw new IllegalArgumentException("非法排序字段");
}
<select id="listUser" parameterType="map">
SELECT * FROM user
ORDER BY ${sortField} ${sortOrder}
</select>
Map<String, Object> map = new HashMap<>();
map.put("sortField", "age");
map.put("sortOrder", "DESC");
userMapper.listUser(map);
⚠️ 必须用 ${} 而不是 #{}
SortList<User> users = userRepository.findAll(
Sort.by(Sort.Direction.DESC, "age")
);
Sort sort = Sort.by(
Sort.Order.desc("age"),
Sort.Order.asc("name")
);
List<User> list = userMapper.selectAll();
list.sort(Comparator.comparing(User::getAge).reversed());
✅ 小数据量可用
❌ 大数据性能差
| 场景 | 推荐方式 |
|---|---|
| 数据库查询 | SQL ORDER BY ✅ |
| 动态排序 | 后端白名单 + ${} |
| JPA | Sort |
| 内存 | 仅小数据 |
如果你用的是 具体框架(MyBatis / JPA / JDBC) 或 想按中文 / 时间 / 自定义规则排序,可以告诉我,我给你写完整示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。