java 写一个数据查询的分页 前端传入一个对象对象里会包含 第几页 一页多少条 需要查询的条件
时间: 2023-07-16 11:13:33 浏览: 96
假设前端传入的对象为`QueryObject`,其中包含:
- `currentPage`:当前页码
- `pageSize`:每页记录数
- `conditions`:查询条件
Java代码如下:
```java
public class QueryObject {
private int currentPage;
private int pageSize;
private Map<String, Object> conditions; //查询条件
//getter和setter方法
}
public class DataQuery {
public List<Data> query(QueryObject queryObject) {
//计算查询起始位置
int startIndex = (queryObject.getCurrentPage() - 1) * queryObject.getPageSize();
//拼接SQL语句
StringBuilder sqlBuilder = new StringBuilder("SELECT * FROM data_table WHERE 1=1 ");
Map<String, Object> conditions = queryObject.getConditions();
for (String key : conditions.keySet()) {
sqlBuilder.append("AND ").append(key).append(" = ? ");
}
sqlBuilder.append("LIMIT ?, ?");
//执行SQL语句
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
List<Data> dataList = new ArrayList<>();
try {
conn = getConnection(); //获取数据库连接
ps = conn.prepareStatement(sqlBuilder.toString());
int index = 1;
for (Object value : conditions.values()) {
ps.setObject(index++, value);
}
ps.setInt(index++, startIndex);
ps.setInt(index++, queryObject.getPageSize());
rs = ps.executeQuery();
while (rs.next()) {
Data data = new Data();
//将ResultSet中的数据映射到Data对象中
//...
dataList.add(data);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn, ps, rs); //关闭数据库连接
}
return dataList;
}
}
```
注意:上述代码中的`getConnection()`和`close()`方法需要根据具体的数据库连接方式实现。此外,为了避免SQL注入攻击,建议使用PreparedStatement对象,并将查询条件作为参数传入。
阅读全文