版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、hibernate 框架第六天hibernate 中进行复杂查询(高级 cont.)8、多表联合查询 (t_dept,t_employee)1、隐式多表连接特点:看似是一的操作,但是通过关系属性完成 2的连接查询 dev 部门的员工from Employee as e where e.dept.dname = dev;查询 xiaohei 员工所在的部门 (适用于 hibernate3.2 以下版本)from Dept as d where = xiaohei;2、显式多表连接特点:类似 sql 语句中多表连接,显著的特点是用 join 关键字隐式多表连接存在
2、:1 特殊操作不支持2 多次发送 sql 到数据库中 影响系统的效率1、内连接(inner join)sql:select d.*,e.*from t_dept dinner jo_employee eon d.id = e.d_id;hql:from Dept as dinner join d.employees 每一行封装成 Object代码实现class TesttestVoid test()Sesses= hibernateUtil.getCurrentSes();Tranion tx = ses.begranion();Queryquery = ses.createQuery(“fr
3、omDept as d inner joind.Employees ”);/hibernate 对每一行都封装成一对象,然后又将多个对象封装成一个Object 数组List(Object) rets = query.list();For(Object ret :rets)Dept dept = (Dept)ret0;Employee employee = (Employee)1;Sysout( dept.getDname()+employee.getEname();)mit();迫切连接(fetch)hql:from Dept as dinner join fetch d.employees
4、每一行查询结果封装 dept 对象代码实现class TesttestVoid test()Sesses= hibernateUtil.getCurrentSes();Tranion tx = ses.begranion();Queryquery = ses.createQuery(“fromDeptas d inner joinfetchd.Employees ”);/hibernate 对每一行都封装成一主表类型对象List list = Query.list();For(Detp dept:list)Sysout(dept.getName();For(Employee employee:
5、dept.getEmployee)Sysout(employee.getNmae();mit();重复数据:1、每一行查询的对象 都要在 List 集合中。2、集合中的是对象吗?的是对象的地址存地址占用空间小解决重复数据:LinkedHashSet (过滤重复数据,有序)2、左外连接 (left outer join)sql:select d.*,e.*from t_dept dleft outer jo_employee eon d.id = e.d_id;hql:from Dept as dleft outer join d.employees 每一行封装 Objectfrom Dept
6、as dlefter outer join fetch d.employees 每一行封装 Dept 对象重复数据LinkedHashset 过滤3、右外连接(right outer join)sql :select d.*,e.*from t_dept dright outer jo_employee eon d.id=e.d_idhql:from Dept as dright outer join d.employees; 每一行封装成 Object注意:右外连接不能使用 fetch问题:通过关系属性已经可以完成通过 Dept 获得Employee 为什么还需要进行fetch 的组装?因为
7、通过 fetch 进行的多表操作,发送一条sql 语句 效率 高注意:如果明确的需要使用关系属性数据时,建议应用显示多表连接如果只需要使用关系的一方数据,则建议使用隐式多表连接延迟加载异常1、扩大事务边界2、改变延迟加载的默认侧率 lazy=false3、迫切连接继承关系实体关系1、关联关系(有 从属)2、继承关系(父子)1、多个实体间出现大量的共有属性2、多个实体从属于一个范畴 is ahibernate 中实体的继承关系开发1、O 创建实体对象 并通过 extends 关键字表达实体间的继承关系2、R 建表 关系型数据库 关系:关联关系(外键)如果需要关系型数据库继承关系 模拟建表(体现继
8、承关系 1 父共性 子个性 2 多态性)1、一张大表把一个继承体系中的所有的属性,都作为一张大表的列创建,提供区分列,通过区分列中的值 区分不同的子类2、每一个类一特点:通过 2 个表的连接(外键) 获得子类3、M一个继承体系 对应一个 class,写父类4、5、API ()多态查询:查询父类可以把所有的子类查询出来hibernate 的锁机制锁:解决多用户并发数据造成明确:1、并发 (同时 不是分秒不差 0.001 秒)2、相同的数据1、乐观锁概念:对多用户并发数据持乐观态度。认为不会存在多用户并发,但是如果出现了多用户并发时,也会解决。原理:1、需要程序员在建表时,为表建立一个版本列,hi
9、bernate 会在一行数据时为版本列指定初始值为 0,每一次更新对应数据,版本列会被hibernate 自动加 1。hibernate 通过对版本列的值进行对比,如果版本值一致说明没有并发放弃当前操作。可以提交数据,如果不一致说明存在并发,2、悲观锁概念:对多用户并发数据持悲观态度。认为一定会存在多用户并发。所以在当前用户使用数据时,会 通过数据库的底层机制,为操作的数据加锁,避免多用户存在。原理:写锁insert update delete 语句,数据库自动的为操作的数据加入写锁,别的用户就不能操作对应的数据。读锁select * from xx for update注意1 查询在某些特定的场景下 也是需要加入事务(控制锁 保证并发访问的安全)2 写锁排他 读锁共享hibernate 中的悲观锁的处理:1、增删改这样的操作,hibernate 不会进行额外的的处理,数据库会自动完成锁的加入2、查询加入锁ses.get(.class,pk.LockMode.UPGRADE)ses.load(.class,pk.LockMode.UPGRADE)Query query = ses.createQuery(from Account
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四川巴中市恩阳区政局医务社会工作服务岗人员招募2人笔试参考题库及答案详解
- 2026贵州黔东南州黎平县仟山人力资源服务有限责任公司招聘派遣制医务人员11人笔试备考试题及答案详解
- 2026广东广州市越秀区矿泉街招聘饭堂后勤人员1人笔试备考试题及答案详解
- 2026新疆吐鲁番市高昌区林业和草原局招聘第二批国家级公益林管护人员2人笔试备考题库及答案详解
- 2026济宁市东方圣地人力资源开发有限公司招聘劳务派遣幼儿园岗位笔试备考题库及答案详解
- 2026北京市延庆区教育委员会第四批招聘教师42人笔试模拟试题及答案详解
- 2026年延安志丹县高级中学教师招聘(16人)笔试备考题库及答案详解
- 长春信息技术职业学院单招职业技能考试题库及答案
- 2026年广州市海珠区网格员招聘笔试备考试题及答案详解
- 2026青岛数据集团有限公司招聘财务经理(主管会计)1人考试备考试题及答案详解
- 铝灰渣化学分析方法 第5部分:氯含量的测定
- 业之峰装修合同范本
- 仿生传感器技术-洞察及研究
- T-CCSAS 052-2025 三氯氢硅还原法多晶硅生产安全技术规范
- T-ZPP 164-2025 机械制造 浓密机设备技术条件
- 人工智能导论习题及答案完整版
- 2025年公开选拔科级领导干部考试笔试试题及答案
- 电石知识培训课件
- 2025年四川纳兴实业集团有限公司招聘笔试参考题库含答案解析
- 牛津译林版英语小学五年级下册5B全册知识点
- 危险作业清单
评论
0/150
提交评论