目录
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);
}
}
}
演示结果

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

被折叠的 条评论
为什么被折叠?



