1 信息查询

(1)多条件组合查询

-拼接hql语句

-使用离线对象

2 添加数据字典表

(1)改造添加客户功能

3 统计分析

(1)调用普通sql实现

(2)结果处理操作

4 使用ssh注解整合

(1)spring注解创建对象、注入属性

(2)hibernate配置映射注解

联系人信息查询

1 点击 联系人信息查询 超链接的时候,到查询页面

(1)在查询页面中,选择客户,根据客户进行查询

//到联系人添加页面
public String toSelectPage(){
//查询所有客户,把传递到页面到下拉列表中
List<Customer> list = customerService.findAll();
ServletActionContext.getRequest().setAttribute("list", list);
return "toSelectPage";
}

页面中显示

<td>所属客户</td>
<td>
<select name="customer.cid">
<option value="0">--请选择--</option>
<c:forEach items="${list }" var="cus">
<option value="${cus.cid }">${cus.custName}</option>
</c:forEach>
</select> </td>

2 在查询页面中,输入值,提交表单到action,查询数据库得到结果

//多条件组合查询-hql语句拼接方式实现
public List<LinkMan> findCondition(LinkMan linkMan) {
String hql = "from LinkMan where 1=1";
List<Object> p = new ArrayList<Object>();
//判断条件是否为空
if(linkMan.getLkmName() != null && !"".equals(linkMan.getLkmName())){
hql += " and lkmName=?";
p.add(linkMan.getLkmName());
}
//判断是否选择客户
if(linkMan.getCustomer().getCid() != null && linkMan.getCustomer().getCid() > 0){
//判断客户里面cid值
hql += " and customer.cid=?";
p.add(linkMan.getCustomer().getCid());
} return (List<LinkMan>) this.getHibernateTemplate().find(hql, p.toArray());
}

重点语句在于

hql += " and customer.cid=?";

3 使用离线对象实现查询

//多条件组合查询-离线对象方式实现
public List<LinkMan> findCondition(LinkMan linkMan) {
//创建离线对象
DetachedCriteria criteria = DetachedCriteria.forClass(LinkMan.class);
if(linkMan.getLkmName() != null && !"".equals(linkMan.getLkmName())){
criteria.add(Restrictions.eq("lkmName", linkMan.getLkmName()));
}
if(linkMan.getCustomer() != null && linkMan.getCustomer().getCid() > 0){
criteria.add(Restrictions.eq("customer.cid", linkMan.getCustomer().getCid()));
} return (List<LinkMan>) this.getHibernateTemplate().findByCriteria(criteria);
}

添加数据字典表

1 什么是数据字典表

(1)存储基础数据

-比如添加客户信息的时候,添加客户级别,这个级别不能随便输入,把客户级别存到数据字典表里面,添加的时候,查询数据字典所有记录显示

(2)码表

2 数据字典表 和 客户表之间关系是一对多关系

(1)数据字典表是一

(2)客户表示 多

-一个级别里面可以被多个客户拥有,一个客户只能是一个级别。

(3)让数据字典表对应一个实体类

-配置数据字典表和客户表关系

改造添加客户功能

1 创建数据字典表实体类,配置映射

public class Dict {

    private String did;
private String dname;
public String getDid() {
return did;
}
public void setDid(String did) {
this.did = did;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
} }

配置文件中

<class name="cn.itcast.entity.Dict" table="t_dict">
<id name="did" column="did">
<!--
native:主键自动增长,类型必须是int类型
实体类did是string,可以写uuid
还要一个值,increment
-->
<generator class="increment">
</generator>
</id>
<property name="dname" column="dname"></property> </class>

2 配置数据字典和客户映射关系

(1)需求:根据客户查询级别,没有根据级别查询客户的需求

(2)只需要在客户实体类表示所属级别

//在客户实体类表示所属级别
private Dict dictCustLevel; public Dict getDictCustLevel() {
return dictCustLevel;
} public void setDictCustLevel(Dict dictCustLevel) {
this.dictCustLevel = dictCustLevel;
}

(3)在映射文件中表示关系

-在客户映射文件中,配置所属级别就可以了

<!-- 所属级别 -->
<many-to-one name="dictCustLevel" class="cn.itcast.entity.Dict" column="custLevel"></many-to-one>

t_customer的建表语句如下所示:

 CREATE TABLE `t_customer` (
`cid` int(11) NOT NULL AUTO_INCREMENT,
`custName` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`custSource` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`custPhone` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`custMobile` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`custLevel` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`cid`),
KEY `FKo6oqtbbjmu6890to85xbpymcd` (`custLevel`),
CONSTRAINT `FKo6oqtbbjmu6890to85xbpymcd` FOREIGN KEY (`custLevel`) REFERENCES `t_dict` (`did`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |

3 功能分析

(1)到添加客户页面中,在下拉列表中把所有级别显示

(2)点击保存,把数据添加到数据库里面

-使用模型驱动封装得到值

-列表页面中修改位置

统计分析

1 系统中可能有复杂查询操作,使用hibernate不能实现,需要调用普通sql语句实现

(1)在dao里面使用hibernate模板,使用hibernate模板调用普通sql

select count(*) as num,custSource from t_customer
group by custSource

(2)根据客户级别统计

只使用客户表,客户级别id值不是名称,但是显示客户级别名称

-让客户表和数据字典表多表查询操作

sql

select c.num,d.dname
from (select count(*)as num,custLevel from t_customer group by custLevel) c,
t_dict d
where c.custLevel=d.did;

2 统计查询之后,返回多条记录,每条记录里面有两个值,返回list集合,

但是list里面泛型没有实体类封装,让list里面的泛型是map集合

sqlquery里面有一个方法可以把查询结果进行转换,setResultTransformer()

根据客户级别统计

1 在dao里面调用普通sql语句

//根据客户级别统计
public List findCountLevel() {
//获取session对象
Session session = this.getSessionFactory().getCurrentSession();
//创建SQLQuery对象
SQLQuery sqlQuery = session.createSQLQuery("select c.num,d.dname from (select count(*)as num,"
+ "custLevel from t_customer group by custLevel) c,t_dict d where c.custLevel=d.did");
//得到结果
//转换成map结果
sqlQuery.setResultTransformer(Transformers.aliasToBean(HashMap.class));
List list = sqlQuery.list();
return list;
}

返回list集合,list集合中每部分是数组形式。

总结crm

1 struts2上传

(1)表单满足三个要求

-提交方式是post,enctype属性值设置,表单里面要有文件上传项和name属性

(2)在action直接获取上传文件和文件名称

(3)上传逻辑:

-在服务器上创建文件

-把上传文件复制到服务器文件里面

(4)struts2上传文件大小限制2M

2 多对多配置方式

(1)使用hibernate配置多对多,缺陷:第三张表只有两个id值

(2)拆分成两个一对多实现

3 离线对象使用

(1)分页查询

(2)多条件组合查询

-离线对象

-hql实现

-拼接hql语句,使用list集合设置参数值

4 调用底层sql实现

(1)得到sessionFactory对象,得到session对象

(2)得到session里面的方法创建SQLQuery对象

(3)返回结果的结构转换

5 配置实体类之间关系的时候,不需要两端都进行配置,根据具体需求实现

6 BaseDao抽取

(1)创建basedao接口,使用大写字母T,代表任意类型,定义crud方法

(2)创建basedao接口实现类,实现crud操作

-术语,在构造方法里面实现代码

(3)在具体功能的接口继承basedao接口

(4)在具体功能实现类继承basedao实现类

-在接口和实现类里面,把crud方法去掉。

最新文章

  1. SpringMVC的注解开发入门
  2. PHP获取一年有几周以及每周开始日期和结束日期
  3. eclipse平台
  4. windows live writer 尝试登陆时发生意外错误,导致无法发表博客解决方案
  5. 条码解析的一片js
  6. android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu
  7. Spring4整合Hibernate4
  8. TaskTracker获取并执行map或reduce任务的过程(一)
  9. Converting between IEEE 754 and Float (Format related
  10. 插入排序实现&amp;&amp;选择排序实现
  11. 《JAVA程序设计》_第五周学习总结
  12. 微信小程序--家庭记账本开发--05
  13. js原生的节点操作API
  14. 必须熟练的基础linux命令
  15. Apache多站点配置(ubuntu)(原创)
  16. php mysqli 链接数据库 CURD 增改查删
  17. vim介绍/vim颜色显示和移动光标/ vim一般模式下移动光标/ vim一般模式下复制、剪切和粘贴
  18. VMware-克隆机,网卡修改
  19. Django From组件 fields widgets
  20. iBt(001-004)原文与试译

热门文章

  1. Linux中搭建HTTP服务器
  2. 巨蟒python全栈开发数据库攻略6:索引2&amp;重要内容汇总
  3. 巨蟒python全栈开发数据库前端6:事件onclick的两种绑定方式&amp;&amp;onblur和onfocus事件&amp;&amp;window.onload解释&amp;&amp;小米商城讲解
  4. ubuntu 使用串口picocom
  5. Python mock 的使用
  6. dist\_wepylogs.js
  7. iOS 数组containsObject:方法
  8. Linux上free命令的输出及其他
  9. 001-spring结合quartz使用
  10. linux基础命令(2)