通信分页第一个版本

本文探讨了如何在Java后台进行代码简化,通过泛型和回调接口实现通用DAO操作。同时,展示了如何设计和使用通用分页功能,减少了重复代码,提高了代码复用性和效率。

目录

1.后台代码简化

2.通用分页


1.后台代码简化

T代表的是实体类 可以是Book/User/Goods。。

代码演示

package com.hz.util;

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

import com.hz.entity.Book;
/**
 * T代表的是实体类 可以是Book/User/Goods。。
 * @author Administrator
 *
 * @param <T>
 */
public class BaseDao<T> {
//	public List<T> executeQuery(String sql,PageBean pageBean,CallBack<T> callBack) throws Exception{
////		sql="SELECT * FROM `t_mvc_book` where bname like  '%圣墟%'\r\n" + 
////				"";
////		从上面得到SELECT * FROM `t_mvc_book` where bname like  '%圣墟%'
////		目的是为了得到总记录数-》得到总页数
////		 SELECT * FROM `t_mvc_book` where bname like  '%圣墟%' limit 10,10
//
//		/**
//		 *1.拿到数据库连接
//		 *2.拿到preparestatement
//		 *3.执行sql语句
//		 */
//		Connection con=DBAccess.getConnection();//重复代码1
//		
//		PreparedStatement ps=con.prepareStatement(sql);//重复代码2
//		ResultSet rs=ps.executeQuery();//重复代码3
//		/*while(rs.next()) {
//			list.add(new Book(rs.getInt("bid"),rs.getString("bname"), rs.getFloat("price")));
//		}*/
////		查询不同的表,必然要处理不同的结果集
////		接口是调用方来实现
//		return callBack.foreach(rs);
//		
//	}
	
	
	public List<T> executeQuery(String sql,PageBean pageBean,CallBack<T> callBack) throws Exception{
//		sql="SELECT * FROM `t_mvc_book` where bname like  '%圣墟%'\r\n" + 
//				"";
//		从上面得到SELECT * FROM `t_mvc_book` where bname like  '%圣墟%'
//		目的是为了得到总记录数-》得到总页数
//		 SELECT * FROM `t_mvc_book` where bname like  '%圣墟%' limit 10,10

		/**
		 *1.拿到数据库连接 
		 *2.拿到preparestatement
		 *3.执行sql语句
		 */
		Connection con=null;//重复代码1
		PreparedStatement ps=null;//重复代码2
		ResultSet rs=null;//重复代码3
		if(pageBean!=null&&pageBean.isPagination()) {
			String countSQL=getcOuntSQL(sql);
			con=DBAccess.getConnection();//重复代码1
			ps=con.prepareStatement(countSQL);//重复代码2
			rs=ps.executeQuery();//重复代码3
			if(rs.next()) {
//				当前实体类就包含了总纪录数
				pageBean.setTotal(rs.getString("n"));
			}
			String pageSQL=getPageSQL(sql,pageBean);
			con=DBAccess.getConnection();//重复代码1
			ps=con.prepareStatement(pageSQL);//重复代码2
			rs=ps.executeQuery();//重复代码3
		}
		else {
			con=DBAccess.getConnection();//重复代码1
			ps=con.prepareStatement(sql);//重复代码2
			rs=ps.executeQuery();//重复代码3
		}
		return callBack.foreach(rs);
		
	}

	/**
	 * 拼装第N页的数据SQL
	 * @param sql
	 * @param pageBean
	 * @return
	 */
private String getPageSQL(String sql, PageBean pageBean) {
	// TODO Auto-generated method stub
	return sql+" limit " + pageBean.getStartIndex() +"," + pageBean.getRows();
}

/**
 * 拼装符合条件总记录数的SQL
 * @param sql
 * @return
 */

private String getcOuntSQL(String sql) {
//	sql="SELECT * FROM `t_mvc_book` where bname like  '%圣墟%'\r\n" + 
//	"";
//	select count(1) as n from (SELECT * from 't_mvc_book' where bname like '%圣墟%') t;
	return "select count(1) as n from ("+sql+") t";
}
}

2.通用分页

package com.hz.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.hz.entity.Book;
import com.hz.util.BaseDao;
import com.hz.util.DBAccess;
import com.hz.util.PageBean;
import com.hz.util.StringUtils;

public class BookDao extends BaseDao<Book>{
	//S案列
	public List<Book> list(Book book,PageBean pageBean) throws Exception{
		List<Book> list=new ArrayList<Book>();
		/**
		 *1.拿到数据库连接
		 *2.拿到preparestatement
		 *3.执行sql语句
		 */
		Connection con=DBAccess.getConnection();//重复代码1
		String sql="select*from t_mvc_book where 1=1";
		String bname=book.getBname();
		if(StringUtils.isNotBlank(bname)) {
			sql+="and bname like '%"+bname+"%'";
		}
		int bid=book.getBid();
		if(bid!=0) {
			sql+="and bid=" +bid;
		}
		PreparedStatement ps=con.prepareStatement(sql);//重复代码2
		ResultSet rs=ps.executeQuery();//重复代码3
		while(rs.next()) {
			list.add(new Book(rs.getInt("bid"),rs.getString("bname"), rs.getFloat("price")));
		}
		return list;
		
	}
	
	//Y案例第一个版本
		public List<Book> list2(Book book,PageBean pageBean) throws Exception{
			String sql="select*from t_mvc_book where 1=1";
			String bname=book.getBname();
			if(StringUtils.isNotBlank(bname)) {
				sql+="and bname like '%"+bname+"%'";
			}
			int bid=book.getBid();
			if(bid!=0) {
				sql+="and bid=" +bid;
			}
			
			return super.executeQuery(sql,pageBean, rs->{
				List<Book> list=new ArrayList<>();
				try {
					while(rs.next()) {
						list.add(new Book(rs.getInt("bid"),rs.getString("bname"), rs.getFloat("price")));
					}
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

				return list;
			});
			
		}
	
//	增删该
	public static void main(String[] args) throws Exception {
	List<Book> list=new BookDao().list(new Book(), null);
	for (Book book : list) {
		System.out.println(book);
	}
	}
}

演示结果

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值