温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java SQL查询如何排序

发布时间:2026-09-20 01:08:50 来源:亿速云 阅读:93 作者:小樊 栏目:编程语言

在 Java 里执行 SQL 查询并排序,本质上还是靠 SQL 的 ORDER BY,Java 只是负责“发送 SQL 并接收结果”。下面分几种常见情况说明。


一、使用 JDBC 排序(最基础)

1️⃣ SQL 中直接写 ORDER BY

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

✅ 排序在 数据库端完成(推荐)


2️⃣ 多字段排序

SELECT * FROM user
ORDER BY age DESC, name ASC;

3️⃣ 动态排序(防止 SQL 注入)

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("非法排序字段");
}

二、MyBatis 排序

Mapper XML

<select id="listUser" parameterType="map">
    SELECT * FROM user
    ORDER BY ${sortField} ${sortOrder}
</select>

Java 调用

Map<String, Object> map = new HashMap<>();
map.put("sortField", "age");
map.put("sortOrder", "DESC");
userMapper.listUser(map);

⚠️ 必须用 ${} 而不是 #{}


三、JPA / Spring Data 排序

1️⃣ 使用 Sort

List<User> users = userRepository.findAll(
    Sort.by(Sort.Direction.DESC, "age")
);

2️⃣ 多字段排序

Sort sort = Sort.by(
    Sort.Order.desc("age"),
    Sort.Order.asc("name")
);

四、Java 内存中排序(不推荐大数据)

List<User> list = userMapper.selectAll();
list.sort(Comparator.comparing(User::getAge).reversed());

✅ 小数据量可用
❌ 大数据性能差


五、总结建议

场景 推荐方式
数据库查询 SQL ORDER BY ✅
动态排序 后端白名单 + ${}
JPA Sort
内存 仅小数据

如果你用的是 具体框架(MyBatis / JPA / JDBC) 或 想按中文 / 时间 / 自定义规则排序,可以告诉我,我给你写完整示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手