通用分页(一)
1.pageBean
分页三要素
1、page 页码 视图层传递过来
2、rows 页大小 视图层传递过来
3、total 总记录数 后台查出来
pagination 是否分页 视图层传递过来
–原生sql
select * from t_mvc_Book where bname like’%圣墟%’;
–通过原生sql拼接出来查询符合条件的总记录数的sql语句
select count(*) from (select * from t_mvc_Book where bname like’%圣墟%’)t;
–查询指定的符合条件的某一页数据 limit起始下标,偏移量
select * from t_mvc_Book where bname like’%圣墟%'limit 0,10
需要导入jar

常用的工具类:
config.properties工具类:
#oracle9i
#driver=oracle.jdbc.driver.OracleDriver
#url=jdbc:oracle:thin:@localhost:1521:ora9
#user=test
#pwd=test#sql2005
#driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
#url=jdbc:sqlserver://localhost:1423;DatabaseName=test
#user=sa
#pwd=sa#sql2000
#driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
#url=jdbc:microsoft:sqlserver://localhost:1433;databaseName=unit6DB
#user=sa
#pwd=888888#mysql5
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/class_?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
user=root
pwd=123
DBAccess工具类:
检查mysql连接
package com.BK_201.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.jdbc.Driver".equals(driver);}public static void main(String[] args) {Connection conn = DBAccess.getConnection();DBAccess.close(conn);System.out.println("isOracle:" + isOracle());System.out.println("isSQLServer:" + isSQLServer());System.out.println("isMysql:" + isMysql());System.out.println("数据库连接(关闭)成功");}
}

PageBean工具类:
package com.BK_201.util;/*** 分页工具类**/
public class PageBean {private int page = 1;// 页码private int rows = 10;// 页大小private int total = 0;// 总记录数private boolean pagination = true;// 是否分页public PageBean() {super();}public int getPage() {return page;}public void setPage(int page) {this.page = page;}public int getRows() {return rows;}public void setRows(int rows) {this.rows = rows;}public int getTotal() {return total;}public void setTotal(int total) {this.total = total;}public void setTotal(String total) {this.total = Integer.parseInt(total);}public boolean isPagination() {return pagination;}public void setPagination(boolean pagination) {this.pagination = pagination;}/*** 获得起始记录的下标* * @return*/public int getStartIndex() {//1 limit 0,10//1 limit 10,10
// 1 limit 20,10return (this.page - 1) * this.rows;}@Overridepublic String toString() {return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination + "]";}}
EncodingFiter工具类:
package com.BK_201.util;import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** 中文乱码处理* */
public class EncodingFiter implements Filter {private String encoding = "UTF-8";// 默认字符集public EncodingFiter() {super();}public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;HttpServletResponse res = (HttpServletResponse) response;// 中文处理必须放到 chain.doFilter(request, response)方法前面res.setContentType("text/html;charset=" + this.encoding);if (req.getMethod().equalsIgnoreCase("post")) {req.setCharacterEncoding(this.encoding);} else {Map map = req.getParameterMap();// 保存所有参数名=参数值(数组)的Map集合Set set = map.keySet();// 取出所有参数名Iterator it = set.iterator();while (it.hasNext()) {String name = (String) it.next();String[] values = (String[]) map.get(name);// 取出参数值[注:参数值为一个数组]for (int i = 0; i < values.length; i++) {values[i] = new String(values[i].getBytes("ISO-8859-1"),this.encoding);}}}chain.doFilter(request, response);}public void init(FilterConfig filterConfig) throws ServletException {String s = filterConfig.getInitParameter("encoding");// 读取web.xml文件中配置的字符集if (null != s && !s.trim().equals("")) {this.encoding = s.trim();}}}
StringUtils工具类:
package com.BK_201.util;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);}}
如果字符串等于null或去空格后等于"",则返回true,否则返回false
实体类:Book类
package com.BK_201.entity;public class Book {private int bid;private String bname;private float price;@Overridepublic String toString() {return "Book [bid=" + bid + ", bname=" + bname + ", price=" + price + "]";}public int getBid() {return bid;}public void setBid(int bid) {this.bid = bid;}public String getBname() {return bname;}public void setBname(String bname) {this.bname = bname;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}public Book(int bid, String bname, float price) {super();this.bid = bid;this.bname = bname;this.price = price;}public Book() {super();}}
BaseDao
package com.BK_201.util;/*** 用来处理所以表的增删改查的基类* 查询指的是通用的分页查询* */import java.lang.reflect.Field;
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.BK_201.entity.Book;/*** @author ld* @param * 用来处理所有表的通用的增删改查* * 查询指的是通用分页的查询*/
public class BaseDao<T> {/*** @param sql 可能不同的表,那么意味着sql是变化的,那么它是从子类处理好再传到父类* @param claz 需要返回不同的对象集合 Book.class/Order.class* @param pagebean 可能要分页* @return* @throws SQLException* @throws IllegalAccessException * @throws InstantiationException */public List<T> list(String sql,Class claz,PageBean pageBean) throws SQLException, InstantiationException, IllegalAccessException{List<T> list=new ArrayList<>();//建立连接Connection con=DBAccess.getConnection();//拿到处理对象PreparedStatement ps=null;ResultSet rs=null;if(pageBean !=null && pageBean.isPagination()) {//是否分页//分页/*** 分析:* 1.分页与pagebean中total 意味着需要查询数据库得到total赋值给pagebean* 2.查询出符合条件的某一页的数据*///通过原生sql拼接出查询符合条件的总记录数的sql语句//select count(*) from (select * from t_mvc_book where bname like '%圣墟%') t;String countSql=getCountSql(sql);ps=con.prepareStatement(countSql);rs=ps.executeQuery();if(rs.next()) {pageBean.setTotal(rs.getObject(1).toString());}//select * from t_mvc_book where bname like '%圣墟%' limit 0,10;String pageSql=getPageSql(sql,pageBean);ps=con.prepareStatement(pageSql);rs=ps.executeQuery();}else {//不分页ps=con.prepareStatement(sql);rs=ps.executeQuery();}T t=null;while(rs.next()) {//如果说游标有下一个就放到list集合中//list.add(new Book(rs.getInt("bid"), rs.getString("bname"), rs.getFloat("price")));t=(T) claz.newInstance();//t 相当于book对象//获取所有属性Field [] fields=claz.getDeclaredFields();//给每一个属性赋值for (Field f : fields) {//打开访问权限f.setAccessible(true);f.set(t, rs.getObject(f.getName()));}list.add(t);}return list;}private String getPageSql(String sql,PageBean pageBean) {// TODO Auto-generated method stubreturn sql+"limit "+pageBean.getStartIndex()+","+pageBean.getRows();}private String getCountSql(String sql) {// TODO Auto-generated method stubreturn "select count(1) from ("+sql+") t";}/*** @param sql* @param claz* @param pageBean* @return* 第二版本写法* @throws SQLException* @throws InstantiationException* @throws IllegalAccessException*/
// public List list(String sql,Class claz,PageBean pageBean) throws SQLException, InstantiationException, IllegalAccessException{
// List list=new ArrayList();
// //建立连接
// Connection con=DBAccess.getConnection();
// //拿到处理对象
// PreparedStatement ps=con.prepareStatement(sql);
// ResultSet rs=ps.executeQuery();
// T t=null;
// while(rs.next()) {//如果说游标有下一个就放到list集合中
// //list.add(new Book(rs.getInt("bid"), rs.getString("bname"), rs.getFloat("price")));
// /**
// * 1.实例化了一个book的对象
// * 2.通过book对象的属性名去游标中取出属性值
// * 2.1 获取到类对象中的属性
// * 2.2 然后给属性赋值
// * 3.已经赋值好的book实例对象,放入到list集合中
// */
// t=(T) claz.newInstance();//t 相当于book对象
// //获取所有属性
// Field [] fields=claz.getDeclaredFields();
// //给每一个属性赋值
// for (Field f : fields) {
// //打开访问权限
// f.setAccessible(true);
// f.set(t, rs.getObject(f.getName()));
// }
// list.add(t);
// }
// return list;
// }}
BookDao
package com.BK_201.dao;
/*** 书籍访问数据库的Dao层* * @author Felling**/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.BK_201.entity.Book;
import com.BK_201.util.BaseDao;
import com.BK_201.util.DBAccess;
import com.BK_201.util.PageBean;
import com.BK_201.util.StringUtils;public class BookDao extends BaseDao<Book>{
public List<Book> list(Book book,PageBean pageBean) throws SQLException{
//写sql语句
String sql="select * from t_mvc_book where true";
List<Book> list=new ArrayList();
//一个查询维度,按数据的名字进行查询
String bname=book.getBname();
if(StringUtils.isNotBlank(bname)) {//不为空//拼接sql+=" and bname like '%"+bname+"%'";
}
//建立连接
Connection con=DBAccess.getConnection();
//拿到处理对象
PreparedStatement ps=con.prepareStatement(sql);
ResultSet rs=ps.executeQuery();
while(rs.next()) {//如果说游标有下一个就放到list集合中list.add(new Book(rs.getInt("bid"), rs.getString("bname"), rs.getFloat("price")));
}
return list;
}/**
* @param book
* @param pageBean
* @return
* 第二版本
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
*/
//public List list(Book book,PageBean pageBean) throws SQLException, InstantiationException, IllegalAccessException{
写sql语句
//String sql="select * from t_mvc_book where true ";
一个查询维度,按数据的名字进行查询
//String bname=book.getBname();
//if(StringUtils.isNotBlank(bname)) {//不为空
// //拼接
// sql+=" and bname like '%"+bname+"%'";
//}
//return super.list(sql, Book.class, pageBean);
//}public static void main(String[] args) {
BookDao bookDao=new BookDao();
Book book=new Book();
PageBean pageBean=new PageBean();
//pageBean.setPage(2);
//pageBean.setPagination(false);
//book.setBname("圣墟");
try {List<Book> list=bookDao.list(book, pageBean);for (Book b : list) {System.out.println(b);//pagebean没用到时运行代码是查询所有的数据}System.out.println(pageBean);
} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();
}
}}
运行结果

第二种:BookDao
package com.BK_201.dao;
/*** 书籍访问数据库的Dao层* * @author Felling**/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.BK_201.entity.Book;
import com.BK_201.util.BaseDao;
import com.BK_201.util.DBAccess;
import com.BK_201.util.PageBean;
import com.BK_201.util.StringUtils;public class BookDao extends BaseDao{
//public List list(Book book,PageBean pageBean) throws SQLException{
写sql语句
//String sql="select * from t_mvc_book where true";
//List list=new ArrayList();
一个查询维度,按数据的名字进行查询
//String bname=book.getBname();
//if(StringUtils.isNotBlank(bname)) {//不为空
//
// //拼接
// sql+=" and bname like '%"+bname+"%'";
//}
建立连接
//Connection con=DBAccess.getConnection();
拿到处理对象
//PreparedStatement ps=con.prepareStatement(sql);
//ResultSet rs=ps.executeQuery();
//while(rs.next()) {//如果说游标有下一个就放到list集合中
// list.add(new Book(rs.getInt("bid"), rs.getString("bname"), rs.getFloat("price")));
//}
//return list;
//}/**
* @param book
* @param pageBean
* @return
* 第二版本
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
*/
public List list(Book book,PageBean pageBean) throws SQLException, InstantiationException, IllegalAccessException{
//写sql语句
String sql="select * from t_mvc_book where true ";
//一个查询维度,按数据的名字进行查询
String bname=book.getBname();
if(StringUtils.isNotBlank(bname)) {//不为空//拼接sql+=" and bname like '%"+bname+"%'";
}
return super.list(sql, Book.class, pageBean);
}public static void main(String[] args) {
BookDao bookDao=new BookDao();
Book book=new Book();
PageBean pageBean=new PageBean();
//pageBean.setPage(2);
//pageBean.setPagination(false);
//book.setBname("圣墟");
try {List list=bookDao.list(book, pageBean);for (Book b : list) {System.out.println(b);//pagebean没用到时运行代码是查询所有的数据}System.out.println(pageBean);
} catch (SQLException | InstantiationException | IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();
}
}}
运行结果:

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
