最后效果
(这个颜色别吐槽,吐槽就是你对)
概念及目的
目的:
基于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