今日金句
若有恒,何必三更眠五更起
最无益,莫过一日曝十日寒
目录
一、通用分页查询概述
当需要对多种类型的数据进行分页功能时,如果每种类型都要写相对应的分页功能的话,那代码量太大了,其实这些分页功能存在大量重复性的代码,那我们可以将其中重复的代码提炼起来做个通用的封装分页方法,每次需要写分页查询功能时,不管是要对张三的内裤进行分页、还是要对李四的丝袜进行分页,只要继承通用分页查询方法即可减少大量代码。
二、通用分页查询讲解
准备:连接mysql、一个书籍实体类和非空判断方法类以及分页工具类
2.1 未使用通用查询示例
非空判断方法类:
package com.xqx.util;
/**
* 封装非空判断方法
*
* @author W许潜行
*
*/
public class StringUtils {
// 私有的构造方法,保护此类不能在外部实例化
private StringUtils() {
}
/**
* 如果字符串等于null或去空格后等于"",则返回true,否则返回false
*
* @param s
* @return
*/
public static boolean isBlank(String s) {
boolean b = false;
if (null == s || s.trim().equals("")) {
b = true;
}
return b;
}
/**
* 如果字符串不等于null或去空格后不等于"",则返回true,否则返回false
*
* @param s
* @return
*/
public static boolean isNotBlank(String s) {
return !isBlank(s);
}
}
Dao方法类:
/**原始查询方法
* @param book 书籍实体类
* @return
* @throws Exception
*/
public List<Book> queryBook(Book book) throws Exception {
List<Book> list = new ArrayList<Book>();
// 建立连接
Connection conn = DBHepler.getConnection();
String sql = "select *from t_mvc_book";
String bname = book.getBname();
if (!StringUtils.isBlank(bname)) {//如果非空
sql += " where bname like '%" + bname + "%' ";
}
// 执行sql语句
PreparedStatement ps = conn.prepareStatement(sql);
// 结果集
ResultSet rs = ps.executeQuery();
while (rs.next()) {
list.add(new Book(rs.getInt("bid"), rs.getString("bname"), rs.getFloat("price")));
}
return list;
}
public static void main(String[] args) throws Exception {
System.out.println("==================原始查询======================");
Book book = new Book();
//查询名称
book.setBname("圣墟");
List<Book> listBook = new BookDao().queryBook(book,);
for (Book bookList : listBook) {
System.out.println(bookList);
}
}
打印结果:
2.2 通用查询实例
首先封装通用查询方法
/**
* @param sql 语句
* @param classes 类
* @param pageBean
* @return
* @throws Exception
*/
public List<T> query(String sql,Class<T> classes ) throws Exception {
List<T> list = new ArrayList<T>();
// 建立连接
Connection conn = DBHepler.getConnection();
// 执行sql语句
PreparedStatement ps = conn.prepareStatement(sql);
// 结果集
ResultSet rs = ps.executeQuery();
while (rs.next()) {
//类实例
T t = classes.newInstance();
//拿到所有属性
Field[] fields = classes.getDeclaredFields();
for (Field fieldName : fields) {
//打开访问权限
fieldName.setAccessible(true);
//为t赋值
fieldName.set(t, rs.getObject(fieldName.getName()));
}
//将t加到集合
list.add(t);
}
return list;
}
实现思路:
- 获取数据库连接。
- 创建PreparedStatement对象,执行SQL语句,获得结果集。
- 循环结果集,创建查询结果对象t,并将结果集中的数据赋值给t的属性。
- 将数据对象t添加到查询结果的List中。
- 返回List对象。
然后在dao方法内继承调用通用方法
/**使用通用模糊查询方法
* @param book
* @return
* @throws Exception
*/
public List<Book> queryBook2(Book book) throws Exception {
String sql = "select *from t_mvc_book";
String bname = book.getBname();
if (!StringUtils.isBlank(bname)) {
sql += " where bname like '%" + bname + "%' ";
}
return super.query(sql, Book.class);
}
测试
public static void main(String[] args) throws Exception {
System.out.println("==================通用查询============