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

69人阅读 评论(0) 收藏 举报
分类:

对象图导航方式查询


客户关联查询

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);
    }

这里写图片描述

这里写图片描述

查看评论

Hibernate检索对象的方式

Hibernate提供的检索对象的方式有: •导航对象图检索方式 –根据已经加载的对象,导航到其他对象。例如,对于已经加载的Customer对象,调用它的getOrders().iterato...
  • juroney1
  • juroney1
  • 2014-04-29 03:12:05
  • 930

Hibernate学习笔记(基础)——检索方式

直接上干货: 我们在Hibernate中使用的检索方式有以下五个:导航对象图检索、OID检索、HQL检索、QBC检索、本地SQL检索。...
  • u011760575
  • u011760575
  • 2014-12-31 16:06:50
  • 405

JAVA面试试题(2)--Hibernate

1.Hibernate的检索方式 答:①导航对象图检索  ②OID检索  ③HQL检索  ④QBC检索  ⑤本地SQL检索2. Forward与Global-Forward的区别答:Forward是根...
  • geminimumu
  • geminimumu
  • 2009-01-11 13:47:00
  • 2499

Hibernate检索方式概述

Hibernate检索方式概述我们在对数据库的操作中,最常用的是select,那么使用Hibernate如何进行select操作呢?本文就来徐徐道来。 Hibernate检索方式可分为5种: 导航对...
  • yerenyuan_pku
  • yerenyuan_pku
  • 2017-04-23 22:46:24
  • 2120

Java框架之hibernate(3)

一、hibernate的5种查询方式总结:            Hibernate 的检索方式主要有 5 种,分别为导航对象图检索方式、OID 检索方式、HQL 检索方式、QBC 检索方式和 ...
  • QiaoRui_
  • QiaoRui_
  • 2017-08-12 13:14:21
  • 587

Hibernate的学习之路二十八(唯一OID和对象导航的查询的方式)

前言 这篇文章主要讲了,一些查询的方法。以及开发中比较常见的 分析 技术分析之Hibernate框架的查询方式 1. 唯一标识OID的检索方式 * session.get(对象.cla...
  • a4171175
  • a4171175
  • 2017-12-04 12:08:36
  • 205

hibernate查询方式【1】:对象导航查询,OID查询,hql查询,

hibernate查询方式
  • diaosinixiheixiu
  • diaosinixiheixiu
  • 2017-12-26 20:36:58
  • 198

Hibernate:5种检索方式

HQL(Hibernate Query Language) 是面向对象的查询语言, 它和 SQL 查询语言有些相似. 在 Hibernate 提供的各种检索方式中, HQL 是使用最广的一种检索方...
  • xxssyyyyssxx
  • xxssyyyyssxx
  • 2015-12-07 08:14:29
  • 1133

Hibernate查询数据的五种方式

1.导航对象图查询:根据已经加载的对象,导航到其他对象。 例如,对于已经加载的Customer对象,调用它getOrders().iterator()方法就可以导航到所有关联的Order对象,假...
  • xiaozaq
  • xiaozaq
  • 2016-09-20 10:06:29
  • 2508
    个人资料
    持之以恒
    等级:
    访问量: 796
    积分: 222
    排名: 32万+
    文章存档
    最新评论