通用分页完整版及通用模糊查询

本文介绍了如何使用Spring Boot实现通用的分页查询和模糊查询。通过创建BaseDao泛型类,抽离数据库连接、SQL语句执行等通用代码,实现了不同表的分页查询。同时,文章详细讲解了各个步骤,包括实体类、数据库连接工具类、DAO层的实现、Web层的业务逻辑以及JSP界面展示。总结中鼓励读者在评论区提问。
摘要由CSDN通过智能技术生成

最后效果

(这个颜色别吐槽,吐槽就是你对)
在这里插入图片描述

概念及目的

目的
基于bootatrap,考虑到通用的问题完成书籍的分页,查询。
概念
举个例子——
一个玩具表要做分页查询需要连接数据库-写sql语句-获取执行对象-得到结果集-返回结果集;
而一个书籍表要做分页查询也是差不多的步骤只不过sql语句不一样,返回的类型不一样,和获得结果集时不一样罢了。

那么分页的概念就是将每个表分页时都具有的共性代码写一个BaseDao完成所有的类似的查询需求。

核心思想:通用性代码进行抽取,变化的代码反射处理。

大概步骤

这里我有画一个简略的图,可以大概康康:
在这里插入图片描述
1、实体类
2、数据库连接的工具类DBAccess
3、dao层继承BaseDao泛型类,里面写的是一般分页会有的共性代码,查询方法list list
4、泛型BaseDao写共性代码
5、web层,处理业务逻辑返回书籍结果集到页面进行遍历显示。

具体代码实现

然后知道大概步骤之后,就可以开始实施啦~

首先jar包
在这里插入图片描述

1、实体类就不放了,你们用的什么表就怎么建。
2、工具类从上往下介绍:DBAccess(连接数据库工具类),EncodingFiter(字符乱码过滤工具类),PageBean(分页工具类),StringUtil(判断字符串工具类)
在这里插入图片描述
3、BaseDao(泛型)

package com.wangjuanxia.util;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.wangjuanxia.entity.Book;

public class BaseDao<T> {
   
	public List<T> executeQuery(String sql,Class clz,PageBean pageBean) throws Exception{
   
		List<T> list=new ArrayList<T>();
		Connection con = DBAccess.getConnection();
		PreparedStatement ps = null;
		ResultSet rs = null;
		if(pageBean!=null&&pageBean.isPagination()) {
   
			//需要分页  列表需求
			//得到表中总数
			String countSql=getCountSql(sql);
			ps = con.prepareStatement(countSql);
			rs = ps.executeQuery();
			if(rs.next()) {
   
				pageBean.setTotal(rs.getObject(1).toString());
			}
			String pageSql=getPageSql(sql,pageBean);
			ps = con.prepareStatement(pageSql);
			rs = ps.executeQuery();
		}else {
   
			//不分页  下拉需求
			ps = con.prepareStatement(sql);
			rs = ps.executeQuery();
		}
		
		
		while(rs.next()) {
   
		/**
		 * 实例化对象
		 * 给这个空对象的每一个属性赋值
		 * 将赋值完的对象添加到list集合中返回
		 */
			T t = (T) clz.newInstance();
			for (Field f : clz.getDeclaredFields()) {
   
				f.setAccessible(true);
				f.set(t,rs.getObject(f.getName()));
			}
			list.add(t);
		}
		DBAccess.close(con, ps, rs);
		return list;
	}

	private String getPageSql(String sql, PageBean pageBean) {
   
		// TODO Auto-generated method stub
		return sql+" LIMIT "+pageBean.getStartIndex()+","+pageBean.getRows()+"";
	}

	private String getCountSql(String sql) {
   
		// TODO Auto-generated method stub
		return "select count(1) from ("+sql+") t";
	}
}

4、dao方法

package com.wangjuanxia.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


import com
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值