https://github.com/ChenCurry/ssh_crm
(SSH框架,eclipse,jdk7,tomcat7)
在前面SSH框架整合的基础之上,进行功能实现,专注技术应用
客户列表开发
分页查询后端代码抽取,各种不同类型的分页查询可以复用代码
controller层
import org.apache.commons.lang3.StringUtils; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Restrictions; import cn.itcast.domain.Customer; import cn.itcast.service.CustomerService; import cn.itcast.utils.PageBean; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class CustomerAction extends ActionSupport implements ModelDriven<Customer> { private Customer customer = new Customer(); private CustomerService cs; private Integer currentPage; private Integer pageSize; public String list() throws Exception { //封装离线查询对象 DetachedCriteria dc = DetachedCriteria.forClass(Customer.class); //判断并封装参数 if(StringUtils.isNotBlank(customer.getCust_name())){ dc.add(Restrictions.like("cust_name", "%"+customer.getCust_name()+"%")); } //1 调用Service查询分页数据(PageBean) PageBean pb = cs.getPageBean(dc,currentPage,pageSize); //2 将PageBean放入request域,转发到列表页面显示 ActionContext.getContext().put("pageBean", pb); return "list"; } @Override public Customer getModel() { return customer; } public void setCs(CustomerService cs) { this.cs = cs; } public Integer getCurrentPage() { return currentPage; } public void setCurrentPage(Integer currentPage) { this.currentPage = currentPage; } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } }
domain层
import java.util.List; public class PageBean { //当前页数 private Integer currentPage; //总记录数 private Integer totalCount; //每页显示条数 private Integer pageSize; //总页数 private Integer totalPage; //分页列表数据 private List list; public PageBean(Integer currentPage, Integer totalCount, Integer pageSize) { this.totalCount = totalCount; this.pageSize = pageSize; this.currentPage = currentPage; if(this.currentPage == null){ //如页面没有指定显示那一页.显示第一页. this.currentPage = 1; } if(this.pageSize == null){ //如果每页显示条数没有指定,默认每页显示3条 this.pageSize = 3; } //计算总页数 this.totalPage = (this.totalCount+this.pageSize-1)/this.pageSize; //判断当前页数是否超出范围 //不能小于1 if(this.currentPage < 1){ this.currentPage = 1; } //不能大于总页数 if(this.currentPage > this.totalPage){ this.currentPage = this.totalPage; } } //计算起始索引 public int getStart(){ return (this.currentPage-1)*this.pageSize; } public Integer getCurrentPage() { return currentPage; } public void setCurrentPage(Integer currentPage) { this.currentPage = currentPage; } public Integer getTotalCount() { return totalCount; } public void setTotalCount(Integer totalCount) { this.totalCount = totalCount; } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public Integer getTotalPage() { return totalPage; } public void setTotalPage(Integer totalPage) { this.totalPage = totalPage; } public List getList() { return list; } public void setList(List list) { this.list = list; } }
service层
import org.hibernate.criterion.DetachedCriteria; import cn.itcast.utils.PageBean; public interface CustomerService { //分页业务方法 PageBean getPageBean(DetachedCriteria dc, Integer currentPage, Integer pageSize); }
import java.util.List; import org.hibernate.criterion.DetachedCriteria; import cn.itcast.dao.CustomerDao; import cn.itcast.domain.Customer; import cn.itcast.service.CustomerService; import cn.itcast.utils.PageBean; public class CustomerServiceImpl implements CustomerService { private CustomerDao cd; @Override public PageBean getPageBean(DetachedCriteria dc, Integer currentPage, Integer pageSize) { //1 调用Dao查询总记录数 Integer totalCount = cd.getTotalCount(dc); //2 创建PageBean对象 PageBean pb = new PageBean(currentPage, totalCount, pageSize); //3 调用Dao查询分页列表数据 List<Customer> list = cd.getPageList(dc,pb.getStart(),pb.getPageSize()); //4 列表数据放入pageBean中.并返回 pb.setList(list); return pb; } public void setCd(CustomerDao cd) { this.cd = cd; } }
dao层
import cn.itcast.domain.Customer; public interface CustomerDao extends BaseDao<Customer> { }
import java.util.List; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Projections; import org.springframework.orm.hibernate5.support.HibernateDaoSupport; import cn.itcast.dao.CustomerDao; import cn.itcast.domain.Customer; public class CustomerDaoImpl extends BaseDaoImpl<Customer> implements CustomerDao { }
import java.io.Serializable; import java.util.List; import org.hibernate.criterion.DetachedCriteria; public interface BaseDao<T> { //增 想要传入T泛型, 接口名称上需要声明 传入int需要用Serilizable void save(T t); //删 void delete(T t); //删 void delete(Serializable id); //改 void update(T t); //查 根据id查询 T getById(Serializable id); //查 符合条件的总记录数 Integer getTotalCount(DetachedCriteria dc); //查 查询分页列表数据 List<T> getPageList(DetachedCriteria dc,Integer start,Integer pageSize); }
import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.util.List; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Projections; import org.springframework.orm.hibernate5.support.HibernateDaoSupport; import cn.itcast.dao.BaseDao; public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> { private Class clazz;//用于接收运行期泛型类型 public BaseDaoImpl() { //获得当前类型的带有泛型类型的父类 ParameterizedType ptClass = (ParameterizedType) this.getClass().getGenericSuperclass(); //获得运行期的泛型类型 clazz = (Class) ptClass.getActualTypeArguments()[0]; } @Override public void save(T t) { getHibernateTemplate().save(t); } @Override public void delete(T t) { getHibernateTemplate().delete(t); } @Override public void delete(Serializable id) { T t = this.getById(id);//先取,再删 getHibernateTemplate().delete(t); } @Override public void update(T t) { getHibernateTemplate().update(t); } @Override public T getById(Serializable id) { return (T) getHibernateTemplate().get(clazz, id); } @Override public Integer getTotalCount(DetachedCriteria dc) { //设置查询的聚合函数,总记录数 dc.setProjection(Projections.rowCount()); List<Long> list = (List<Long>) getHibernateTemplate().findByCriteria(dc); //清空之前设置的聚合函数 dc.setProjection(null); if(list!=null && list.size()>0){ Long count = list.get(0); return count.intValue(); }else{ return null; } } @Override public List<T> getPageList(DetachedCriteria dc, Integer start, Integer pageSize) { List<T> list = (List<T>) getHibernateTemplate().findByCriteria(dc, start, pageSize); return list; } }