https://github.com/ChenCurry/ssh_crm
(SSH框架,eclipse,jdk7,tomcat7)
在前面SSH框架整合的基础之上,进行功能实现,专注技术应用
客户列表开发
分页查询后端代码抽取,各种不同类型的分页查询可以复用代码
controller层
CustomerAction
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层
PageBean
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层
CustomerService
import org.hibernate.criterion.DetachedCriteria; import cn.itcast.utils.PageBean; public interface CustomerService { //分页业务方法 PageBean getPageBean(DetachedCriteria dc, Integer currentPage, Integer pageSize); }
CustomerServiceImpl
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层
CustomerDao
import cn.itcast.domain.Customer; public interface CustomerDao extends BaseDao<Customer> { }
CustomerDaoImpl
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 { }
BaseDao
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); }
BaseDaoImpl
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; } }
数据字典
Customer
public class Customer { /* * CREATE TABLE `cst_customer` ( `cust_id` BIGINT(32) NOT NULL AUTO_INCREMENT COMMENT ‘客户编号(主键)‘, `cust_name` VARCHAR(32) NOT NULL COMMENT ‘客户名称(公司名称)‘, `cust_source` VARCHAR(32) DEFAULT NULL COMMENT ‘客户信息来源‘, `cust_industry` VARCHAR(32) DEFAULT NULL COMMENT ‘客户所属行业‘, `cust_level` VARCHAR(32) DEFAULT NULL COMMENT ‘客户级别‘, `cust_linkman` VARCHAR(64) DEFAULT NULL COMMENT ‘联系人‘, `cust_phone` VARCHAR(64) DEFAULT NULL COMMENT ‘固定电话‘, `cust_mobile` VARCHAR(16) DEFAULT NULL COMMENT ‘移动电话‘, PRIMARY KEY (`cust_id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; */ private Long cust_id; private String cust_name; //private String cust_source; //private String cust_industry; //private String cust_level; private String cust_linkman; private String cust_phone; private String cust_mobile; //引用关联的数据字典对象 private BaseDict cust_source; //客户来源 cust_source.dict_id private BaseDict cust_industry; //客户行业 private BaseDict cust_level; //客户级别 public BaseDict getCust_source() { return cust_source; } public void setCust_source(BaseDict cust_source) { this.cust_source = cust_source; } public BaseDict getCust_industry() { return cust_industry; } public void setCust_industry(BaseDict cust_industry) { this.cust_industry = cust_industry; } public BaseDict getCust_level() { return cust_level; } public void setCust_level(BaseDict cust_level) { this.cust_level = cust_level; } public Long getCust_id() { return cust_id; } public void setCust_id(Long cust_id) { this.cust_id = cust_id; } public String getCust_name() { return cust_name; } public void setCust_name(String cust_name) { this.cust_name = cust_name; } public String getCust_linkman() { return cust_linkman; } public void setCust_linkman(String cust_linkman) { this.cust_linkman = cust_linkman; } public String getCust_phone() { return cust_phone; } public void setCust_phone(String cust_phone) { this.cust_phone = cust_phone; } public String getCust_mobile() { return cust_mobile; } public void setCust_mobile(String cust_mobile) { this.cust_mobile = cust_mobile; } @Override public String toString() { return "Customer [cust_id=" + cust_id + ", cust_name=" + cust_name + "]"; } }
Customer.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.itcast.domain" > <class name="Customer" table="cst_customer" > <id name="cust_id" > <!-- generator:主键生成策略(明天讲) --> <generator class="native"></generator> </id> <property name="cust_name" column="cust_name" ></property> <!-- <property name="cust_source" column="cust_source" ></property> <property name="cust_industry" column="cust_industry" ></property> <property name="cust_level" column="cust_level" ></property> --> <property name="cust_linkman" column="cust_linkman" ></property> <property name="cust_phone" column="cust_phone" ></property> <property name="cust_mobile" column="cust_mobile" ></property> <!-- 多对一 --> <many-to-one name="cust_source" column="cust_source" class="BaseDict" ></many-to-one> <many-to-one name="cust_industry" column="cust_industry" class="BaseDict" ></many-to-one> <many-to-one name="cust_level" column="cust_level" class="BaseDict" ></many-to-one> </class> </hibernate-mapping>
原文:https://www.cnblogs.com/rain2020/p/12904001.html