通用分页
操作步骤
- 在mySql中创建需要的库和表
- 导入需要的jar包
- 创建需要的包
- 编写各包的代码的同时在编写jsp代码
库和表
jar包
包
util放一些已经写好了的条件代码
特别是DBAccess类里面写的是连接各种各样的数据,关键性代码
列如:MySQL数据库,SqlServer数据库,oracle数据库,DBAccess类里面根本不用变动代码,但是config里面就是需要连接那个数据库
就放开那个数据库,其他的数据库连接就注释掉,其他的类就是根据要求所添加的
entity放实体类
tag放计算页码所需的代码
frameworl放一个抽象类和一个可以用map集合存储那个抽象类的类
dao放所需要实现的方法(如:增加,修改,模糊查询,删除,分页)
在dao包中要特别写一个BaseDao来实现分页的效果
public class BaseDao<E> {
public List<E> query(String sql,PageBean pageBean,Callback<E> callback){
List<E> ls=new ArrayList<E>();
Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
//第一次查询 查总记录数
if(null!=pageBean&&pageBean.isPagination()) {
try {
con=DBAccess.getConnection();
String countsql=this.getCountSql(sql);
ps=con.prepareStatement(countsql);
rs=ps.executeQuery();
if(rs.next()) {
pageBean.setTotal(rs.getInt(1));
}
} catch (SQLException e) {
// TODO: handle exception
throw new RuntimeException();
}finally {
DBAccess.close(null, ps, rs);
}
}
//第二次查询 查询满足条件的记录数
if(null!=pageBean&&pageBean.isPagination()) {
sql=this.getPageSql(sql, pageBean);
}
try {
con=DBAccess.getConnection();
ps=con.prepareStatement(sql);
rs=ps.executeQuery();
return callback.foreach(rs);
} catch (SQLException e) {
// TODO: handle exception
throw new RuntimeException();
}finally {
DBAccess.close(null, ps, rs);
}
}
/**
* 把普通sql转成查总记录数sql
* @param sql
* @return
*/
public String getCountSql(String sql) {
String countSql="select count(*) from ("+sql+") t";
return countSql;
}
/**
* 查满足分页的sql
* @param sql
* @return
*/
public String getPageSql(String sql,PageBean pageBean) {
String pageSql=sql+" limit "+pageBean.getStartIndex()+","+pageBean.getRows()+"";
return pageSql;
}
}
还有一个dao类就存放增删改查
模糊查询
关键性代码
String sql="select * from t_solr_job";
if(sname!=null) {
sql="select * from t_solr_job where company like '%"+sname+"%'";
}
public List<Student> getAll(String sname,PageBean pageBean){
List<Student> list=new ArrayList<Student>();
//模糊查询的条件
String sql="select * from t_solr_job";
if(sname!=null) {
sql="select * from t_solr_job where company like '%"+sname+"%'";
}
return this.query(sql, pageBean, new Callback<Student>() {
@Override
public List<Student> foreach(ResultSet rs) throws SQLException {
// TODO Auto-generated method stub
Student stu=null;
while(rs.next()) {
stu=new Student();
stu.setId(rs.getString("id"));
stu.setJob(rs.getString("job"));
stu.setCompany(rs.getString("company"));
stu.setAddress(rs.getString("address"));
stu.setSalary(rs.getString("salary"));
stu.setUrl(rs.getString("url"));
stu.setLimit(rs.getString("limito"));
stu.setTime(rs.getString("time"));
stu.setDesc(rs.getString("descc"));
stu.setJobHandle(rs.getString("jobHandle"));
stu.setAddressHandle(rs.getString("addressHandle"));
list.add(stu);
}
return list;
}
});
}
根据id查询
public List<Student> getAllID(String id){
List<Student> ls=new ArrayList<Student>();
Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
con=DBAccess.getConnection();
String sql="select * from t_solr_job where id="+id;
ps=con.prepareStatement(sql);
rs=ps.executeQuery();
if(rs.next()) {
Student stu=new Student();
stu.setId(rs.getString("id"));
stu.setJob(rs.getString("job"));
stu.setCompany(rs.getString("company"));
stu.setAddress(rs.getString("address"));
stu.setSalary(rs.getString("salary"));
stu.setUrl(rs.getString("url"));
stu.setLimit(rs.getString("limito"));
stu.setTime(rs.getString("time"));
stu.setDesc(rs.getString("descc"));
stu.setJobHandle(rs.getString("jobHandle"));
stu.setAddressHandle(rs.getString("addressHandle"));
ls.add(stu);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
DBAccess.close(con, ps, rs);
}
return ls;
}
增加数据
public int Add(Student stu){
int n=0;
Connection con=null;
PreparedStatement ps=null;
try {
con=DBAccess.getConnection();
String sql="insert into t_solr_job(id,job,company,address,salary,url,limito,time,descc,jobHandle,addressHandle)values(?,?,?,?,?,?,?,?,?,?,?)";
ps=con.prepareStatement(sql);
ps.setString(1, stu.getId());
ps.setString(2, stu.getJob());
ps.setString(3, stu.getCompany());
ps.setString(4, stu.getAddress());
ps.setString(5, stu.getSalary());
ps.setString(6, stu.getUrl());
ps.setString(7, stu.getLimit());
ps.setString(8, stu.getTime());
ps.setString(9, stu.getDesc());
ps.setString(10, stu.getJobHandle());
ps.setString(11, stu.getAddressHandle());
n=ps.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
DBAccess.close(con, ps, null);
}
return n;
}
}
修改数据
public int Update(String id,Student stu){
int n=0;
Connection con=null;
PreparedStatement ps=null;
try {
con=DBAccess.getConnection();
String sql="update t_solr_job set job=?,company=?,address=?,salary=?,url=?,limito=? where id="+id;
ps=con.prepareStatement(sql);
ps.setString(1, stu.getJob());
ps.setString(2, stu.getCompany());
ps.setString(3, stu.getAddress());
ps.setString(4, stu.getSalary());
ps.setString(5, stu.getUrl());
ps.setString(6, stu.getLimit());
n=ps.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
DBAccess.close(con, ps, null);
}
return n;
}
删除数据
public int Delete(String id){
int n=0;
Connection con=null;
PreparedStatement ps=null;
try {
con=DBAccess.getConnection();
String sql="delete from t_solr_job where id="+id;
ps=con.prepareStatement(sql);
n=ps.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
DBAccess.close(con, ps, null);
}
return n;
}
action放实现dao方法里面的增删查改和分页的
先继承HttpServlet,在new一个dao类(放增删改查的类),然后来一个无参数的构造方法,doget方法,dopost方法 在dopost方法里面写获取需要的值然后调用dao类里面的方法,写完action包里面所有的类时,在web.xml中配置
<servlet>
<servlet-name>actionServlet</servlet-name>
<servlet-class>com.zking.frameworl.ActionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>actionServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
*为通配符 表示最后action为结束的类都配置成功
最后写jsp界面,实现的效果图