Hibernate学习笔记11,对象图导航方式查询

对象图导航方式查询


客户关联查询
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);
    }

这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值