修改客户列表页面上的链接地址
编写web层
首先,我们要在CustomerAction类中编写一个删除客户的方法。删除客户时,我们一定得先查询再删除,为什么啊?因为到时候咱可以做级联删除,即在删除客户的时候,顺便把这个客户下面的联系人也删掉,如果你不先查询再删除,那么你只能删客户,这个客户下面的联系人是删不掉的。还有一点需要考虑,就是我们在删除客户的时候,如果这个客户有客户资质图片,那么这图片需不需要删除掉呢?假设需要将这图片删除掉了,那我们肯定得知道图片的路径,图片的路径也得从数据库里面查询出来。总而言之,删除客户时,咱得先查询再删除。
然后,我们还得在Struts2配置文件中(即struts.xml)对CustomerAction进行如下的配置,即删除客户成功后,直接重定向到客户列表展示页面中。
编写service层
首先,在CustomerService接口中添加一个根据客户ID查询客户的方法声明和一个删除客户的方法声明,如下:
package com.meimeixia.crm.service;
import org.hibernate.criterion.DetachedCriteria;
import com.meimeixia.crm.domain.Customer;
import com.meimeixia.crm.domain.PageBean;
/**
* 客户管理类的业务层的接口
* @author liayun
*
*/
public interface CustomerService {
void save(Customer customer);
PageBean<Customer> fingByPage(DetachedCriteria detachedCriteria, Integer currentPage, Integer pageSize);
Customer findById(Long cust_id);
void delete(Customer customer);
}
然后,在以上接口的一个实现类(CustomerServiceImpl.java)中去实现上面两个方法。
package com.meimeixia.crm.service.impl;
import java.util.List;
import org.hibernate.criterion.DetachedCriteria;
import org.springframework.transaction.annotation.Transactional;
import com.meimeixia.crm.dao.CustomerDao;
import com.meimeixia.crm.domain.Customer;
import com.meimeixia.crm.domain.PageBean;
import com.meimeixia.crm.service.CustomerService;
/**
* 客户管理的业务层的实现类
* @author liayun
*
*/
@Transactional
public class CustomerServiceImpl implements CustomerService {
//注入客户的dao
private CustomerDao customerDao;
public void setCustomerDao(CustomerDao customerDao) {
this.customerDao = customerDao;
}
//业务层保存客户的方法
@Override
public void save(Customer customer) {
customerDao.save(customer);
}
//业务层分页查询客户的方法
@Override
public PageBean<Customer> fingByPage(DetachedCriteria detachedCriteria, Integer currentPage, Integer pageSize) {
PageBean<Customer> pageBean = new PageBean<Customer>();
//封装当前的页数
pageBean.setCurrentPage(currentPage);
//封装每页显示的记录数
pageBean.setPageSize(pageSize);
//封装总记录数
//得调用dao来查询
Integer totalCount = customerDao.findCount(detachedCriteria);
pageBean.setTotalCount(totalCount);
//封装总页数
Double tc = totalCount.doubleValue();
Double num = Math.ceil(tc / pageSize);
pageBean.setTotalPage(num.intValue());
//封装每页显示的数据集合
Integer begin = (currentPage - 1) * pageSize;//计算从哪儿开始?
List<Customer> list = customerDao.findByPage(detachedCriteria, begin, pageSize);
pageBean.setList(list);
return pageBean;
}
//业务层根据id去查询客户的方法
@Override
public Customer findById(Long cust_id) {
return customerDao.findById(cust_id);
}
//业务层删除客户的方法
@Override
public void delete(Customer customer) {
customerDao.delete(customer);
}
}
编写dao层
首先,在CustomerDao接口中添加一个根据客户ID查询客户的方法声明和一个删除客户的方法声明,如下:
package com.meimeixia.crm.dao;
import java.util.List;
import org.hibernate.criterion.DetachedCriteria;
import com.meimeixia.crm.domain.Customer;
/**
* 客户管理的dao的接口
* @author liayun
*
*/
public interface CustomerDao {
void save(Customer customer);
Integer findCount(DetachedCriteria detachedCriteria);
List<Customer> findByPage(DetachedCriteria detachedCriteria, Integer begin, Integer pageSize);
Customer findById(Long cust_id);
void delete(Customer customer);
}
然后,在以上接口的一个实现类(CustomerDaoImpl.java)中去实现上面的两个方法。
package com.meimeixia.crm.dao.impl;
import java.util.List;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projections;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import com.meimeixia.crm.dao.CustomerDao;
import com.meimeixia.crm.domain.Customer;
/**
* 客户管理的dao的实现类
* @author liayun
*
*/
public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {
//dao中保存客户的方法
@Override
public void save(Customer customer) {
this.getHibernateTemplate().save(customer);
}
//dao中带条件去统计个数的方法
@Override
public Integer findCount(DetachedCriteria detachedCriteria) {
//还得给DetachedCriteria对象设置条件,你要没设置条件,就查询所有了。
//因为我们现在要发送类似select count(*) from xxx where [条件]这样的sql语句
detachedCriteria.setProjection(Projections.rowCount());
List<Long> list = (List<Long>) this.getHibernateTemplate().findByCriteria(detachedCriteria);
if (list.size() > 0) {
return list.get(0).intValue();
}
return null;
}
//dao中分页查询客户的方法
@Override
public List<Customer> findByPage(DetachedCriteria detachedCriteria, Integer begin, Integer pageSize) {
//在查询之前,先要把DetachedCriteria对象中的count那个地方给清空掉,去掉之后,默认就是查所有
detachedCriteria.setProjection(null);
return (List<Customer>) this.getHibernateTemplate().findByCriteria(detachedCriteria, begin, pageSize);
}
//dao中根据id去查询客户的方法
@Override
public Customer findById(Long cust_id) {
return this.getHibernateTemplate().get(Customer.class, cust_id);
}
//dao中删除客户的方法
@Override
public void delete(Customer customer) {
this.getHibernateTemplate().delete(customer);
}
}
至此,客户管理模块中删除客户的功能,我们就已经实现了,至于测试的话,我就不再这里测试了(偷懒了),反正是好使的!