联系人管理
创建表
CREATE TABLE `cst_linkman` (
`lkm_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '联系人编号(主键)',
`lkm_name` varchar(16) DEFAULT NULL COMMENT '联系人姓名',
`lkm_cust_id` bigint(32) NOT NULL COMMENT '客户id',
`lkm_gender` char(1) DEFAULT NULL COMMENT '联系人性别',
`lkm_phone` varchar(16) DEFAULT NULL COMMENT '联系人办公电话',
`lkm_mobile` varchar(16) DEFAULT NULL COMMENT '联系人手机',
`lkm_email` varchar(64) DEFAULT NULL COMMENT '联系人邮箱',
`lkm_qq` varchar(16) DEFAULT NULL COMMENT '联系人qq',
`lkm_position` varchar(16) DEFAULT NULL COMMENT '联系人职位',
`lkm_memo` varchar(512) DEFAULT NULL COMMENT '联系人备注',
PRIMARY KEY (`lkm_id`),
KEY `FK_cst_linkman_lkm_cust_id` (`lkm_cust_id`),
CONSTRAINT `FK_cst_linkman_lkm_cust_id` FOREIGN KEY (`lkm_cust_id`) REFERENCES `cst_customer` (`cust_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
创建实体和映射
- 联系人实体
public class Linkman {
private long lkm_id;
private String lkm_name;
private String lkm_gender;
private String lkm_phone;
private String lkm_mobile;
private String lkm_email;
private String lkm_qq;
private String lkm_position;
private String lkm_memo;
private Customer customer;
get/set...
}
- 联系人映射
<hibernate-mapping>
<class name="com.ithou.crm.domain.Linkman" table="cst_linkman">
<id name="lkm_id" column="lkm_id">
<generator class="native"/>
</id>
<property name="lkm_name" column="lkm_name"/>
<property name="lkm_gender" column="lkm_gender"/>
<property name="lkm_phone" column="lkm_phone"/>
<property name="lkm_mobile" column="lkm_mobile"/>
<property name="lkm_email" column="lkm_email"/>
<property name="lkm_qq" column="lkm_qq"/>
<property name="lkm_position" column="lkm_position"/>
<property name="lkm_memo" column="lkm_memo"/>
<many-to-one name="customer" class="com.ithou.crm.domain.Customer" column="lkm_cust_id"></many-to-one>
</class>
</hibernate-mapping>
- 修改客户实体
public class Customer {
private long cust_id;
private String cust_name;
/*private String cust_source;
private String cust_industry;
private String cust_level;*/
private String cust_phone;
private String cust_mobile;
private String cust_image;
/**
* 客户和字典表示多对一,需要在多的一方放的时一的一方的对象
*/
private BaseDict baseDictSource;
private BaseDict baseDictIndustry;
private BaseDict baseDictLevel;
//一个客户有多个联系人
private Set<Linkman> linkmans = new HashSet<Linkman>();
get/set...
}
-
修改客户映射
<hibernate-mapping>
<class name="com.ithou.crm.domain.Customer" table="cst_customer">
<id name="cust_id" column="cust_id">
<generator class="native"/>
</id>
<property name="cust_name" column="cust_name"/>
<property name="cust_phone" column="cust_phone"/>
<property name="cust_mobile" column="cust_mobile"/>
<property name="cust_image" column="cust_image"/>
<many-to-one name="baseDictSource" class="com.ithou.crm.domain.BaseDict" column="cust_source"></many-to-one>
<many-to-one name="baseDictIndustry" class="com.ithou.crm.domain.BaseDict" column="cust_industry"></many-to-one>
<many-to-one name="baseDictLevel" class="com.ithou.crm.domain.BaseDict" column="cust_level"></many-to-one>
<set name="linkmans" cascade="delete" inverse="true">
<key column="lkm_cust_id"></key>
<one-to-many class="com.ithou.crm.domain.Linkman"/>
</set>
</class>
</hibernate-mapping>
创建相关类
- 创建Action
- 创建Service
- 创建Dao
完成相关配置
- applicationContext.xml
<!-- 配置联系人管理相关的类 -->
<bean id="linkmanDao" class="com.ithou.crm.dao.impl.LinkmanDaoImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="linkmanService" class="com.ithou.crm.service.impl.LinkmanServiceImpl">
<property name="linkmanDao" ref="linkmanDao"/>
</bean>
<bean id="linkmanAction" class="com.ithou.crm.web.action.LinkmanAction">
<property name="linkmanService" ref="linkmanService"/>
<property name="customerService" ref="customerService"/>
查询联系人列表
1、修改menu.jsp
2、编写Action
public class LinkmanAction extends ActionSupport implements ModelDriven<Linkman> {
private Linkman linkman = new Linkman();
@Override
public Linkman getModel() {
return linkman;
}
private LinkmanService linkmanService;
public void setLinkmanService(LinkmanService linkmanService) {
this.linkmanService = linkmanService;
}
private Integer currPage = 1;
public void setCurrPage(Integer currPage) {
if(currPage == null) {
currPage = 1;
}
this.currPage = currPage;
}
private Integer pageSize = 3;
public void setPageSize(Integer pageSize) {
if(pageSize == null) {
pageSize = 3;
}
this.pageSize = pageSize;
}
public String findAll() {
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Linkman.class);
PageBean<Linkman> pageBean = linkmanService.findByPage(detachedCriteria,currPage,pageSize);
ActionContext.getContext().getValueStack().push(pageBean);
return "findAll";
}
3、编写Service
@Override
public PageBean<Linkman> findByPage(DetachedCriteria detachedCriteria, Integer currPage, Integer pageSize) {
PageBean<Linkman> pageBean = new PageBean<Linkman>();
pageBean.setCurrPage(currPage);
pageBean.setPageSize(pageSize);
Integer totalCount = linkmanDao.findCount(detachedCriteria);
pageBean.setTotalCount(totalCount);
Double tc = totalCount.doubleValue();
Double num = Math.ceil(tc/pageSize);
pageBean.setTotalPage(num.intValue());
Integer begin = (currPage-1)*pageSize;
List<Linkman> list = linkmanDao.findByPage(detachedCriteria,begin,pageSize);
pageBean.setList(list);
return pageBean;
}
4、编写Dao
@Override
public Integer findCount(DetachedCriteria detachedCriteria) {
detachedCriteria.setProjection(Projections.rowCount());
List<Long> list = (List<Long>) this.getHibernateTemplate().findByCriteria(detachedCriteria);
if(list.size()>0) {
return list.get(0).intValue();
}
return null;
}
@Override
public List<T> findByPage(DetachedCriteria detachedCriteria, Integer currPage, Integer pageSize) {
detachedCriteria.setProjection(null);
return (List<T>) this.getHibernateTemplate().findByCriteria(detachedCriteria, currPage, pageSize);
}
保存联系人
1、修改menu.jsp的链接
2、修改Action中的saveUI的方法
public String saveUI() {
List<Customer> list = customerService.findAll();
ActionContext.getContext().getValueStack().set("list", list);
return "saveUI";
}
3、编写Service
@Override
public List<Customer> findAll() {
return customerDao.findAll();
}
4、编写DAO
@Override
public List<Customer> findAll() {
return (List<Customer>) this.getHibernateTemplate().find("from Customer");
}
5、修改添加页面(改成struts2的标签)
6、编写表单提交路径
7、编写Action的save方法
public String save() {
linkmanService.save(linkman);
return "saveSuccess";
}
8、编写Service
@Override
public void save(Linkman linkman) {
linkmanDao.save(linkman);
}
9、编写DAO
@Override
public void save(LinkMan linkMan) {
this.getHibernateTemplate().save(linkMan);
}
修改联系人
1、修改列表页面上的链接
2、编写Action的edit方法
public String edit() {
//查询某个联系人,查询所有客户
//查询所有客户:
List<Customer> list = customerService.findAll();
//根据id查询联系人:
linkman = linkmanService.findById(linkman.getLkm_id());
//将list和linkman的对象带到页面中
ActionContext.getContext().getValueStack().set("list", list);
//将对象的值存入到值栈
ActionContext.getContext().getValueStack().push(linkman);
return "editSuccess";
}
3、编写Service
@Override
public Linkman findById(Long lkm_id) {
return linkmanDao.findById(lkm_id);
}
4、编写DAO
@Override
public LinkMan findById(Long lkm_id) {
return this.getHibernateTemplate().get(LinkMan.class, lkm_id);
}
5、修改编辑页面提交的路径
6、编写Action的update方法
public String update() {
linkmanService.update(linkman);
return "updateSuccess";
}
7、编写Service
@Override
public void update(Linkman linkman) {
linkmanDao.update(linkman);
}
8、编写DAO
@Override
public void update(LinkMan linkMan) {
this.getHibernateTemplate().update(linkMan);
}
删除联系人
1、修改链接地址
2、编写Action中的delete方法
public String delete() {
linkman = linkmanService.findById(linkman.getLkm_id());
linkmanService.delete(linkman);
return "deleteSuccess";
}
3、编写Service
@Override
public void delete(Linkman linkman) {
linkmanDao.delete(linkman);
}
4、编写DAO
@Override
public void delete(LinkMan linkMan) {
this.getHibernateTemplate().delete(linkMan);
}
条件查询联系人
1、修改列表页面
2、修改Action中的findAll方法
public String findAll() {
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Linkman.class);
if(linkman.getLkm_name()!=null) {
detachedCriteria.add(Restrictions.like("lkm_name", "%"+linkman.getLkm_name()+"%"));
}
if(linkman.getLkm_gender()!=null &&!"".equals(linkman.getLkm_gender())) {
detachedCriteria.add(Restrictions.eq("lkm_gender", linkman.getLkm_gender()));
}
PageBean<Linkman> pageBean = linkmanService.findByPage(detachedCriteria,currPage,pageSize);
ActionContext.getContext().getValueStack().push(pageBean);
return "findAll";
}
解决与客户之间的问题
级联删除的问题
- 级联删除,在客户删除的时候,先查询再删除
- 在客户的映射方进行配置
修改客户的时候,联系人的客户信息丢失
- 因为在修改客户的时候,没有查询联系人的集合,当点击修改时,修改客户(修改客户所关联联系人)因为联系人的集合是空,所以将外键置为null。