对象图导航方式查询
客户关联查询
1.需求
客户来源信息存在数据字典表中
数据字典表:存储了系统需要的基本类别信息,比如:客户来源、客户级别、客户所属行业、客户状态
数据字典表到客户信息表是一对多关系
客户信息表到数据字典表是多对一关系
实现:
查询客户信息,关联查询客户来源信息。
2.建表
3.创建映射文件
- 数据字典表
- 客户信息表
- 创建一对多和多对一的映射关系
- 在客户信息表配置多对一
- 在数据字典表配置一对多
- 在数据字典表配置一对多
- 在客户信息表配置多对一
对象图导航方式查询
对象图导航方式:通过对象中属性实现关联查询。
通过get、qbc方式实现对象导航查询。
延迟加载
什么是延迟加载,当查询信息,建议只查询需要的信息,对于不需要信息当需要时再去查询,这叫延迟加载,好处提高查询性能。
延迟加载例子,对象导航查询:
1、只查询基本信息 ,不查询关联属性
CstCustomer cstCustomer = session.get(CstCustomer.class, 115l);
2、当调用cstCustomer对象的get方法获取关联属性,向数据库发出sql,去加载数据
get和load的区别
load执行原理:
1、执行load查询,得到的是一个代理对象,没有发出sql
2、当调用get方法时,通过代理对象向数据库发出sql
延迟加载原理:
1、生成一个代理对象
2、执行加载时,通过代理对象向数据库发出sql
实现客户来源下拉框
查询数据字典表获取客户来源信息,将信息在jsp页面展示。
查询数据字典表获取客户来源信息
根据字典的类型查询(SQL):
SELECT * FROM base_dict WHERE dict_type_code=’002’
- dao
- service
- servlet
根据客户来源查询(掌握)
客户到数据字典多对一关系,外键在客户方,通过外键(属性)实现关联查询。
当前查询使用QBC查询,通过Criteria对象通过CstCustomer对象中baseDictByCustSource实现关联查询。
1、页面将下拉框 (客户来源)值传到servlet
上边6、7对应于数据字典表中主键值。
2、servlet将客户来源传给service
3、service获取页面的查询条件,拼装Criteria对象(重点)
//拼装客户来源
if(cstCustomer.getBaseDictByCustSource()!=null) {
BaseDict baseDictByCustSource = cstCustomer.getBaseDictByCustSource();
if(baseDictByCustSource.getDictId()!=null && !baseDictByCustSource.getDictId().equals(""))
detachedCriteria.add(Restrictions.eq("baseDictByCustSource.dictId", baseDictByCustSource.getDictId()));
}
(附上service中查询方法完整的code)
public List<CstCustomer> findCustomerList(CstCustomer cstCustomer, int firstResult, int maxResults) {
//创建DetachedCriteria
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(CstCustomer.class);
if(cstCustomer!=null) {
//拼接客户名称查询条件,使用like
if(cstCustomer.getCustName()!=null && !cstCustomer.getCustName().equals("")) {
detachedCriteria.add(Restrictions.like("custName", "%"+cstCustomer.getCustName()+"%"));
}
//拼接联系人查询条件
if(cstCustomer.getCustLinkman()!=null && !cstCustomer.getCustLinkman().equals("")) {
detachedCriteria.add(Restrictions.eq("custLinkman", cstCustomer.getCustLinkman()));
}
//拼装客户来源
if(cstCustomer.getBaseDictByCustSource()!=null) {
BaseDict baseDictByCustSource = cstCustomer.getBaseDictByCustSource();
if(baseDictByCustSource.getDictId()!=null && !baseDictByCustSource.getDictId().equals(""))
detachedCriteria.add(Restrictions.eq("baseDictByCustSource.dictId", baseDictByCustSource.getDictId()));
}
}
CstCustomerDao CstCustomerDao = new CstCustomerDaoImpl();
return CstCustomerDao.findCustomerList(detachedCriteria, firstResult, maxResults);
}