JdbcTemplate分页工具,分页更方便了

工具代码


@Component
public class JdbcTemplatePageUtils {

	@Autowired
	JdbcTemplate jdbcTemplate;

	/**
	 * 返回单个dto
	 * 
	 * @param sql       查询sql
	 * @param queryArgs 查询参数
	 * @param rowMapper dto mapper
	 * @param <T>       dto
	 * @return dto
	 */
	public <T> T getCustomerDto(String sql, RowMapper<T> rowMapper, Object[] queryArgs) {
		return jdbcTemplate.queryForObject(sql, rowMapper, queryArgs);
	}

	/**
	 * 返回dto列表
	 * 
	 * @param sql       查询sql
	 * @param queryArgs 查询参数
	 * @param rowMapper dto mapper
	 * @param <T>       dto
	 * @return dto list
	 */
	public <T> List<T> getCustomerDtoList(String sql, RowMapper<T> rowMapper, Object[] queryArgs) {
		return jdbcTemplate.query(sql, rowMapper, queryArgs);
	}

	/**
	 * 返回分页对象
	 * 
	 * @param sql       查询sql
	 * @param queryArgs 查询参数
	 * @param rowMapper dto mapper
	 * @param countSql  总量sql
	 * @param countArgs 总量参数
	 * @param page      当前页
	 * @param size      每页大小
	 * @param <T>       dto
	 * @return 分页对象
	 */
	public <T> PageBean<T> getCustomerPageDto(String sql, Object[] queryArgs, RowMapper<T> rowMapper, String countSql,
			Object[] countArgs, int page, int size) {

		if (page <= 0) {
			throw new RuntimeException("当前页数必须大于1");
		}
		if (size <= 0) {
			throw new RuntimeException("每页大小必须大于1");
		}

		// 总共数量
		int totalSize = jdbcTemplate.queryForObject(countSql, Integer.class, countArgs);

		if (totalSize == 0) {

			PageBean<T> bean = new PageBean<T>();

			bean.setContent(new ArrayList<T>());
			bean.setElementTotalSize(0);
			bean.setPage(0);
			bean.setSize(0);
			bean.setTotalPage(0);
			bean.setTotalSize(0);

			return bean;
		}
		// 总页数
		int totalPage = totalSize % size == 0 ? totalSize / size : totalSize / size + 1;
		// 开始位置
		int offset = (page - 1) * size;
		// return item size
		int limit = size;
		sql = sql + " limit " + limit + " offset " + offset;
		List<T> content = jdbcTemplate.query(sql, rowMapper, queryArgs);

		PageBean<T> bean = new PageBean<T>();

		bean.setContent(content);
		bean.setElementTotalSize(content.size());
		bean.setPage(page);
		bean.setSize(size);
		bean.setTotalPage(totalPage);
		bean.setTotalSize(totalSize);

		return bean;
	}

}

Bean代码

public class PageBean<T> {

    private List<T> content;  //内容列表

    private int size ;  //每页大小

    private int elementTotalSize;   //list中元素有多少个

    private int page; //当前页数

    private int totalPage;   //总的页数

    private int totalSize;   //总共的数量

	public List<T> getContent() {
		return content;
	}

	public void setContent(List<T> content) {
		this.content = content;
	}

	public int getSize() {
		return size;
	}

	public void setSize(int size) {
		this.size = size;
	}

	public int getElementTotalSize() {
		return elementTotalSize;
	}

	public void setElementTotalSize(int elementTotalSize) {
		this.elementTotalSize = elementTotalSize;
	}

	public int getPage() {
		return page;
	}

	public void setPage(int page) {
		this.page = page;
	}

	public int getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public int getTotalSize() {
		return totalSize;
	}

	public void setTotalSize(int totalSize) {
		this.totalSize = totalSize;
	}

	@Override
	public String toString() {
		return "PageBean [content=" + content + ", size=" + size
				+ ", elementTotalSize=" + elementTotalSize + ", page=" + page
				+ ", totalPage=" + totalPage + ", totalSize=" + totalSize + "]";
	}
    
    
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: jdbcTemplate 是 Spring Framework 提供的一个 JDBC 操作工具,用于简化 JDBC 操作。在 jdbcTemplate 中实现分页可以通过 SQL 语句中的 LIMIT 和 OFFSET 实现。 以下是一个示例代码: ```java public List<Book> getAllBooks(int pageNumber, int pageSize) { String sql = "SELECT * FROM books LIMIT ? OFFSET ?"; int offset = (pageNumber - 1) * pageSize; List<Book> books = jdbcTemplate.query(sql, new Object[]{pageSize, offset}, new BeanPropertyRowMapper<>(Book.class)); return books; } ``` 在这个示例中,我们使用 LIMIT 和 OFFSET 实现分页。`pageNumber` 表示需要查询的页码,`pageSize` 表示每页的数据条数。`offset` 的值是根据当前页码和每页条数计算出来的,即 `(pageNumber - 1) * pageSize`,这个值用于告诉数据库从哪一行开始查询。`jdbcTemplate.query` 方法会执行 SQL 语句,并将结果映射为 `Book` 类型的对象列表返回。 需要注意的是,使用 LIMIT 和 OFFSET 实现分页时,每次查询的数据量不会变化,只是查询的起始位置不同,因此在页面上需要显示总页数和总数据条数,以便用户了解数据总量。 ### 回答2: jdbctemplate 是 Spring Framework 提供的一个功能强大且易于使用的数据库访问工具。它提供了许多便捷的方法,可以简化数据库查询、插入、新和删除操作的编码工作。 jdbctemplate 在进行分页查询时,可以使用以下方法来实现: 1. query 方法:可使用带有 RowMapper 参数的 query 方法实现分页查询。首先,需要计算出查询结果的总行数,并计算出总页数。然后,通过设置 SQL 语句的 "LIMIT" 子句,指定查询的起始位置和返回的行数。同时,使用 RowMapper 参数来映射查询结果到 Java 对象上,最后返回查询结果。 2. PaginationHelper 类:Spring Framework 还提供了 PaginationHelper 类来简化分页查询的过程。通过创建 PaginationHelper 对象,你可以将总行数、每页显示的行数和当前页数作为参数传递给 query 方法,并获取返回的分页结果。 3. PaginationQuery 类:如果你希望加灵活地进行分页查询,可以使用 PaginationQuery 类。它提供了一种方便的方式来构建查询语句,并指定相关的分页参数。通过调用 PaginationQuery 对象的相关方法,你可以获取分页查询的结果。 总而言之,使用 jdbctemplate 进行分页查询非常方便。你可以根据具体的需求选择合适的方法,来实现查询结果的分页展示。无论是通过 query 方法、PaginationHelper 类还是 PaginationQuery 类,都可以轻松地进行分页查询,并获取所需的数据。 ### 回答3: JdbcTemplate是Spring框架提供的数据访问工具,它简化了对数据库的操作。JdbcTemplate提供了丰富的方法,其中就包括对分页查询的支持。 在JdbcTemplate中进行分页查询,需要使用到`query`或`queryForList`方法,并且传入RowMapper来解析查询结果。 首先,我们需要设置每页显示的数据量和当前页码,可以通过参数来进行传递。然后,可以使用`query`方法进行查询,其中需要设置查询的起始位置和查询的记录数量。通常,起始位置可以通过`(currentPage-1)*pageSize`来计算,记录数量即为pageSize。 以下是一个使用JdbcTemplate实现分页查询的示例代码: ``` public List<User> findUsersByPage(int currentPage, int pageSize) { int start = (currentPage - 1) * pageSize; String sql = "SELECT * FROM user LIMIT ?, ?"; List<User> userList = jdbcTemplate.query(sql, new Object[]{start, pageSize}, 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.setPassword(rs.getString("password")); // 其他属性的设置... return user; } }); return userList; } ``` 在上述代码中,我们通过`jdbcTemplate.query`方法进行分页查询。使用`LIMIT ?, ?`语句来限制查询的结果范围,然后通过传入的参数设置起始位置和记录数量。 最后,我们在RowMapper的mapRow方法中解析查询结果,并创建相应的实体对象。最终,将查询到的结果存放在一个List中,并返回。 以上就是使用JdbcTemplate实现分页查询的方法。这样,我们可以根据传入的参数来获取指定页面的数据,并且非常方便地进行分页显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值