在使用JdbcTemplate進行動態查詢時,可以結合使用JdbcTemplate的query方法和RowMapper接口,以及SQL語句中的LIMIT和OFFSET實現分頁功能。以下是一個示例代碼:
public List<User> findUsers(int pageSize, int pageNumber, String username) {
String sql = "SELECT * FROM users WHERE 1=1 ";
List<Object> params = new ArrayList<>();
if(username != null && !username.isEmpty()) {
sql += "AND username = ? ";
params.add(username);
}
sql += "LIMIT ? OFFSET ?";
params.add(pageSize);
params.add(pageSize * (pageNumber - 1));
return jdbcTemplate.query(sql, params.toArray(), new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setEmail(rs.getString("email"));
return user;
}
});
}
在上述示例中,我們首先構建了動態查詢的SQL語句,并根據傳入的參數動態拼接條件。然后通過調用JdbcTemplate的query方法執行SQL查詢,并使用RowMapper接口將查詢結果映射為實體對象。最后返回查詢結果作為分頁數據。
需要注意的是,pageSize表示每頁顯示的記錄數,pageNumber表示當前頁數,username為查詢條件。OFFSET表示從第幾條記錄開始,LIMIT表示查詢多少條記錄。
當調用findUsers方法時,傳入相應的參數即可實現動態查詢。