通用分页查询

本文介绍了如何使用Java实现通用查询和分页查询。通过创建预定义对象、执行查询及结果集处理,实现BaseDao父类,使得不同类型的查询能共用同一段代码。在通用分页查询部分,详细讲解了从实体类、DAO层到分页工具类的构建过程,以减少重复代码,提高代码复用性。
摘要由CSDN通过智能技术生成

思维导图:
在这里插入图片描述

一:通用查询

第一步:连接数据库


package com.whw.util;
 
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
 
/**
 * 提供了一组获得或关闭数据库对象的方法
 * 
 */
public class DBAccess {
   
	private static String driver;
	private static String url;
	private static String user;
	private static String password;
 
	static {
   // 静态块执行一次,加载 驱动一次
		try {
   
			InputStream is = DBAccess.class
					.getResourceAsStream("config.properties");
 
			Properties properties = new Properties();
			properties.load(is);
 
			driver = properties.getProperty("driver");
			url = properties.getProperty("url");
			user = properties.getProperty("user");
			password = properties.getProperty("pwd");
 
			Class.forName(driver);
		} catch (Exception e) {
   
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}
 
	/**
	 * 获得数据连接对象
	 * 
	 * @return
	 */
	public static Connection getConnection() {
   
		try {
   
			Connection conn = DriverManager.getConnection(url, user, password);
			return conn;
		} catch (SQLException e) {
   
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}
 
	public static void close(ResultSet rs) {
   
		if (null != rs) {
   
			try {
   
				rs.close();
			} catch (SQLException e) {
   
				e.printStackTrace();
				throw new RuntimeException(e);
			}
		}
	}
 
	public static void close(Statement stmt) {
   
		if (null != stmt) {
   
			try {
   
				stmt.close();
			} catch (SQLException e) {
   
				e.printStackTrace();
				throw new RuntimeException(e);
			}
		}
	}
 
	public static void close(Connection conn) {
   
		if (null != conn) {
   
			try {
   
				conn.close();
			} catch (SQLException e) {
   
				e.printStackTrace();
				throw new RuntimeException(e);
			}
		}
	}
 
	public static void close(Connection conn, Statement stmt, ResultSet rs) {
   
		close(rs);
		close(stmt);
		close(conn);
	}
 
	public static boolean isOracle() {
   
		return "oracle.jdbc.driver.OracleDriver".equals(driver);
	}
 
	public static boolean isSQLServer() {
   
		return "com.microsoft.sqlserver.jdbc.SQLServerDriver".equals(driver);
	}
	
	public static boolean isMysql() {
   
		return "com.mysql.cj.jdbc.Driver".equals(driver);
	}
 
	public static void main(String[] args) {
   
		Connection conn = DBAccess.getConnection();
		System.out.println(conn);
		DBAccess.close(conn);
		System.out.println("isOracle:" + isOracle());
		System.out.println("isSQLServer:" + isSQLServer());
		System.out.println("isMysql:" + isMysql());
		System.out.println("数据库连接(关闭)成功");
	}
}

第二步:创建预定义对象
第三步:执行查询
第四步:结果集处理
方法如下:
类为BaseDao是所有dao类的父类,为类型就可以无论查找什么类型都可以用一样的代码去解决

BaseDao:

package com.whw.dao;
 
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.sg.entity.Book;
import com.sg.util.DBAccess;
import com.sg.util.PageBean;
import com.sg.util.StringUtils;
/**
 * 所有Dao层的父类
 * @author T440s
 *
 * @param <T>
 */
public class BaseDao<T> {
   
	public List<T> list(String sql,Class<T> clz)throws Exception{
   
		//不确定list集合中装的什么东西 子类Dao继承BaseDao<T>,子类传的是什么类那么list集合中放的就是什么
		List<T> list=new ArrayList<T>();
		Connection con = DBAccess.getConnection();
		PreparedStatement ps = con.prepareStatement(sql);
		ResultSet rs=ps.executeQuery();
		while(rs.next()) {
   
			//books.add(new Book(rs.getInt("bid"),rs.getString("bname"),rs.getFloat("price")));
			/**
			 * 上面一行代码分析:
			 * 1.实例化了一个对象
			 * 2.从ResultSet的对象的属性获取值(bid)获取值,赋值给了前面的实例化的对象
			 * 3.把已经赋值了的对象添加到List集合中
			 */
			//实例化一个对象
			T t=clz.newInstance();
			//获取属性
			Field[] fields = clz.getDeclaredFields();
			for (Field f : fields) {
   
				f.setAccessible(true);
				f.set(t, rs.getObject(f.getName()));
			}
			list.add(t);
		}
		return list;
	
}

BookDao


package com.whw.dao;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
 
import com.sg.entity.Book;
import com.sg.util.DBAccess;
import com.sg.util.PageBean;
import com.sg.util.StringUtils;
 
public class BookDao extends BaseDao<Book>{
   
	/**
	 * 简单的查询方法
	 * 思路:
	 * 	1.建立数据库连接
	 * 	2.预定义对象PrepareStatement
	 * 	3.查询结果集
	 * 	4.处理结果集
	 */
	public List<Book> list(Book book)throws Exception{
   
		List<Book> books=new ArrayList<Book>();
		String sql=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值