前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java学习笔记-全栈-web开发-09-DBUtils与分页实现

Java学习笔记-全栈-web开发-09-DBUtils与分页实现

作者头像
devi
发布2021-08-18 15:28:34
3980
发布2021-08-18 15:28:34
举报
文章被收录于专栏:搬砖记录

DBUtils是JDBC的一个高级封装,与大多数JDBC的封装包使用方法基本一致。 后面学习框架会有自己的框架DBUtils,学习本节DBUtils的目的是掌握“这一类”JDBC封装包的使用方法,为后续学习开路。 分页是数据查询以及数据展示中非常重要的一环


1. Dbutils

1.1 简介

DBUtils是java编程中的数据库操作实用工具,小巧简单实用。

DBUtils封装了对JDBC的操作,简化了JDBC操作。可以少写代码。

  • 1.对于数据表的读操作,他可以把结果转成List,Array,Set等java集合,便于程序员操作;
  • 2.对于数据表的写操作,也变得很简单(只需写sql语句)
  • 3.更加简便的使用数据源

1.2 三个核心对象

  1. QueryRunner类 顾名思义,QueryRunner中提供对sql语句操作的API. 它主要有三个方法
代码语言:txt
复制
- query() 用于执行select
- update() 用于执行insert update delete
- batch() 批处理
  1. DbUtils类 一个工具类,定义了关闭资源与事务处理的方法。

1.3 示例代码

能读懂这段代码即可 QueryRunner需要传入一个连接池对象,请通过学习JavaWeb基础 3.5节 数据库连接池进行配置

代码语言:javascript
复制
public class Demo {

	//--1.ArrayHandler:将查询的结果的第一行放到一个数组中
    @Test
    public void query1() throws SQLException{
        
        QueryRunner runner=new QueryRunner(C3P0Utils.getDataSource());
        Object[] array=runner.query("select * from account",new ArrayHandler());
        System.out.println(array);
    }

	//--2.ArrayListHandler:将查询的结果的每一行放到一个数组中,然后再将数组放到集合中;
    @Test
    public void query2() throws SQLException{
        
        QueryRunner runner=new QueryRunner(C3P0Utils.getDataSource());
        List<Object[]> list=runner.query("select * from account",new ArrayListHandler());
        System.out.println(list);
    }
	
	//--3.BeanHandler:将查询的结果的第一行封装到一份javabean对象中;
    @Test
    public void query3() throws SQLException{
        
        QueryRunner runner=new QueryRunner(C3P0Utils.getDataSource());
        Account account=runner.query("select * from account",new BeanHandler<Account>(Account.class));
        System.out.println(account);
    }

	//--4.BeanListHandler:将查询的结果的每一行封装到一个javabean对象中,然后再将这些对象存入list中;
    @Test
    public void query4() throws SQLException{
        
        QueryRunner runner=new QueryRunner(C3P0Utils.getDataSource());
        List<Account> list=runner.query("select * from account",new BeanListHandler<Account>(Account.class));
        System.out.println(list);
    }
    
    //--5.MapHandler:将查询的结果的第一行存入到一个map中,键为列名,值为各列值;
    @Test
    public void query5() throws SQLException{
        
        QueryRunner runner=new QueryRunner(C3P0Utils.getDataSource());
        Map<String,Object> map=runner.query("select * from account",new MapHandler());
        System.out.println(map);
    }    

    //--6.MapListHandler:将查询的结果的每一行存入到一个map中,键为列名,值为各列值;然后再将map存入list中;
    @Test
    public void query6() throws SQLException{
        
        QueryRunner runner=new QueryRunner(C3P0Utils.getDataSource());
        List<Map<String,Object>> map=runner.query("select * from account",new MapListHandler());
        System.out.println(map);
    }    

    //--7.ScalarHandler:将查询的结果的第一行的某一列放到一个对象中;精确定位到某个值;
    @Test
    public void query7() throws SQLException{
        
        QueryRunner runner=new QueryRunner(C3P0Utils.getDataSource());
        String name=(String)runner.query("select * from account",new ScalarHandler(2));
        System.out.println(name);
    }  
}

2. 分页

分页,指的就是我们平常看到的网页数据,分很多页。 比如说百度搜索结果,可以不停的点击下一页来获取数据。

有两种方式:

1.一次将所有数据返回给前端,js进行分页

2.通过巧妙的构造,只有用户点击“下一页”的时候,再进行查询并返回响应结果。

显然,第一种方式会导致客户端响应缓慢,而且一次就把所有数据交出去,也不可取。

第二种才是常用的方式。

2.1 分页原理

既然是“用户点击下一页时,返回一页数据响应”,那自然需要将“一页数据”作为一个Javabean进行封装。

我们打开一个百度搜索页面进行分析。

可以看到,以上至少包含:

  • 当前搜索结果(多个被搜索实体–List<model>
  • 当前页码(currentPage
  • 总页数(totalPage

若是写过爬虫,肯定知道事实上还有一个数据是固定的:

  • 当前页搜索结果显示条数(pageCount

自然而然,会有总数据条数:

  • 总数据条数(totalCount

将以上属性封装成一个Javabean,这就是一个分页model

代码语言:javascript
复制
public class PageResult<T> {
	private List<T> modelList;
	private int currentPage;//当前页码
	private int totalPage;//总页数
	private int pageCount;//每页数据量
	private long totalCount;//总数据量
}

自然而然,可以从中得出数据关系。

totalCount,pageCount应当是已知的,totalCount从数据库获取,pageCount由服务器设置。 currentPage应当也是已知的。因为,要么是第 1 页(初次访问),要么是用户输入具体页码跳转或是点击下一页实现页码自增。因此,对于服务器来说,currentPage是已知的。 totalPage和modelList是未知的,需要求出。

totalPage = (总记录÷总页数=每页数据量) 求出 totalPage ,同时考虑可否整除的情况

代码语言:javascript
复制
totalPage=(int)
			(totalCount % pageCount)==0 
			? totalCount/pageCount 
			: totalCount/pageCount + 1;

modelList = 当前数据序号起点 到 pageCount给定的数据长度

通过sql语句条件查询获得

代码语言:javascript
复制
int start = pageCount * (currentPage-1); //当currentPage=1时,start=0,符合条件查询
代码语言:javascript
复制
modelList = select * from models limit start, pageCount

学会以上分析,即可实现分页查询 下面是源自视频学习中的“书籍分页查询代码”

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/12/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Dbutils
    • 1.1 简介
      • 1.2 三个核心对象
        • 1.3 示例代码
        • 2. 分页
          • 2.1 分页原理
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档