联系人管理
[整合表又称为 字典表:字典表里面放的是公有数据.
多张表中 抽取出来一样的字段 形成一个字典表]
一、实体类中:
客户实体:一对多 在一方放置多方的集合对象
联系人实体:多对一 在多方放置一方的实体对象
代码【1】
二,显示客户名称的下拉菜单:先定义list集合,然后从数据库查询数据-放入值栈,同时加上get方法,外部jsp就可以获得数据。
代码【2】表单的
三,联系人新增:
1,准备表单,修改action属性,method属性,表单的name属性
2,服务器准备一个Action接受数据
3,处理数据
4,响应结果,此处暂时不写,跳转到查询所有。
四,联系人查询-条件查询
1.查询出客户信息:修改超链接,访问action,action查询数据,转发到list.jsp
2.查询联系人信息:
i:在action中查询所有联系人数据即可(查询所有)
ii:在action中按条件查询(条件查询)没有添加条件,hql ->from Linkman.
有条件,那么拼接到hql之后(性别 所属客户)。
五、关于eclipse和数据库设置编码 格式的问题:
1,在数据库show VARIABLES like "CHARACTER%"可以查看数据的编码格式。在具体的表中,进行改变。
2,eclipse==》window-->general-->content Type-->text-->java手写UTF-8
3,eclipse==》window-->workspace
4,右击属性--》resource
5,jdbc.url = jdbc:mysql:///design_ssh?useUnicode=true&characterEncoding=UTF-8
六,联系人删除,考虑到级联删除
- 点击删除,需要提示用户,是否确定删除
- 如果点击确定删除,使用js访问服务器的action方法,删除数据。
- 删除成功后,跳转到查询所有的案例上
- 删除时,需要注意的是,单表删除(直接删除就好)和级联删除(客户和联系人一起删掉)
- 级联删除,存在多表之间的关系,需要父表数据 和子表数据一并删除。
- 第一:客户action表上,删除时:先获得客户,再删除客户,第二:客户表,list集合上面,添加级联删除。
代码【3】
七、联系人修改
- 需要根据id查询出对应联系人的信息,并且将联系人信息放入值栈
- 请求转发给edit.jsp显示,查询出客户的信息(以上两点action需要做的事情)
edit.jsp和add.jsp一样的,需要显示联系人的数据,客户数据且需要被选中。
- 超链接添加一个跳转的地址,携带lkmId
- 在action中查询出客户数据
- 以上的2个数据,放入值栈
- 请求转噶给edit.jsp
- 页面显示:客户+联系人+选中客户的信息。
修改数据:
- 需要修改页面,添加隐藏域,设置id属性
- 修改action地址,input的name属性,从add.jsp页面复制过来。
- action获取数据,直接修改
八、分页查询
页面需要的数据:
- 总记录数 totalRecord totalCount
- 当前页 pageNumber currentPage
- 需要有原本分页数据 List data
- 总页数 totalPage
- 每页显示个数pageSize
- 开始索引startIndex
- 页面开始和结束 start end
代码步骤:
- 把查询总记录数放在前面,查询分页数据放在后面。理由:查询分页数据放在后面,后自动封装 开始索引和每页显示个数,不能拆分。
- 投影查询可以自己设置,后面涉及到分页数据查询,可以把投影查询设置为null,会覆盖之前的投影。
- 查询分页数据,传入离线对象,把开始索引和每页显示个数这2个参数,封装到离线对象中。如果后面查询总记录数,使用参数,不能拆分。
代码【1】
//【Customer.java】
//集合为什么需要实例化? 因为 操作的同时 如果不提前实例化 可能会出现 需要在外部先实例化集合 然后赋值
//如果已经提前赋值 可以直接获得对象 操作即可
@OneToMany(targetEntity=Linkman.class,mappedBy="customer")
private List<Linkman> linkmans = new ArrayList<>();
//【Linkman.java】
//描述多对一
//private String lkm_cust_id;// '客户id', 外键
@ManyToOne(targetEntity=Customer.class)
@JoinColumn(name="lkm_cust_id" , referencedColumnName="cust_id")
private Customer customer;
代码【2】
//返回客户集合数据,同时加上get方法,外部就可以获得数据。
private List<Customer> customerList;
public List<Customer> getCustomerList() {
return customerList;
}
@Action("linkmanAction_addUI")
public String addUI() {
//先定义list集合,然后从数据库查询数据-放入值栈,同时加上get方法,外部jsp就可以获得数据。
customerList = customerService.findAll();
return "addUI";
}
代码【3】
customer.java中
@OneToMany(targetEntity=Linkman.class,mappedBy="customer",cascade=CascadeType.REMOVE)
private List<Linkman> linkmans = new ArrayList<>();
customerAction.java中
@Action("customerAction_delete")
public String delete() {
//获取客户,删除客户(考虑到级联删除)从数据库获得list集合,才可以进行级联删除【删除客户的同时,联系人也删除】
Customer tempCustomer = customerService.findByCustId(customer);
customerService.deleteByCustId(tempCustomer);
return "findAll";
}