day31_Hibernate复习_03(补刀)

一、多对多
    在对象中如何表达多对多关系: 
        两方都使用集合表达。即两个对象中互相持有对方的集合的引用。
    
    小结:
        <set name="本方引用的集合名称" table="中间表表名" >
            <key column="本方中间表列名称" />
            <many-to-many class="对方的完整类名" column="对方中间表列名称" />
        </set>        
    
    操作:
        inverse:本方是否要放弃维护外键关系(默认值是false)
        cascade:是否需要级联操作(有5个值)(没有默认值)
          save-update         级联保存和级联修改
      delete              级联删除
      delete-orphan       孤儿删除
      all                 save-update + delete
      all-delete-orphan    save-update + delete + delete-orphan
    
二、检索策略
    1、类级别
        load方法    =>    受class元素上的lazy属性影响
    2、关联级别
       1> 一对多:根据客户去找订单
            fetch:
                select       (默认值) 使用普通select语句查询集合内容
                join         使用表连接语句查询集合
                subselect    同时加载多个对象的集合时,使用子查询语句
            lazy:
                true         (默认值)需要使用时才会去加载
                false        立即加载
                extra        极其懒惰,当调用集合的size时,Hibernate只会发送count语句
        小结:        
            使用join时,lazy属性失效,都是立即加载。
            使用select时,lazy属性正常。
            使用subselect,除了在加载多个集合时使用子查询语句外,其他同select。
        
        2> 多对一:根据订单去找客户
            fetch:
                select       (默认值) 使用普通select语句查询集合内容
                join         使用表连接语句查询集合
            lazy:
                false        立即加载
                proxy        交给对方的类加载策略决定,受class元素上的lazy属性影响
                
    3、批量检索
        batch-size="n"       决定一次加载几个对象(客户)的集合数据
    
三、查询总结
    1、get/load     根据oid进行检索
    2、对象导航图检索 
    3、Sql语句查询
    4、Hql语句查询
    5、Criteria查询(了解)
    
四、连接池、事务、锁
    c3p0连接池
        1、导包,c3p0-0.9.1.jar 在 Hibernate 的类库中optional文件夹下
        2、在hibernate.cfg.xml 进行配置
        3、配置c3p0中的具体使用的参数

    事务
        隔离级别设置: hibernate.connection.isolation     1 2 4 8
        
    锁
        悲观锁
            读锁:select * from xxx lock in share mode;    =>    get(clazz, id, LockOption.READ);
            写锁:select * from xxx for update;            =>    get(clazz, id, LockOption.UPGRADE);
        乐观锁
            1、实体类中加入版本控制属性(类型是Integer)
            2、在Xxx.hbm.xml,配置上version元素

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏osc同步分享-java技术分享站

mybatis 的一些常用功能

1. association 查询结果的一对一关联: <resultMap id="blogResult" type="Blog"> <id propert...

29780
来自专栏芋道源码1024

数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 执行

本文主要基于 Sharding-JDBC 1.5.0 正式版 1. 概述 2. ExecutorEngine 2.1 ListeningExecutorServ...

39170
来自专栏xingoo, 一个梦想做发明家的程序员

Java程序员的日常——存储过程知识普及

存储过程是保存可以接受或返回用户提供参数的SQL语句集合。在日常的使用中,经常会遇到复杂的业务逻辑和对数据库的操作,使用存储过程可以进行封装。可以在数据库中定...

19880
来自专栏我的小碗汤

mysql大小写敏感与校对规则

模糊匹配 jg%,结果以JG开头的字符串也出现在结果集中,大家很自然的认为是大小写敏感的问题。那么mysql中大小写敏感是如何控制的;数据库名,表名,字段名这些...

35210
来自专栏极客猴

Django 学习笔记之模型高级用法(上)

前面有两篇文章简单介绍 Django 的模型,这一部分算是基础知识。我自己近期也总做了下总结,将花大概两篇的篇幅来分享下模型的一些高级用法。

8730
来自专栏一个小程序员的成长笔记

验证常用正则表达式

1.日期时间验证,支持闰年 支持格式:YYYY/MM/DD, YYYY-MM-DD, YYYY_MM_DD, YYYY.MM.DD 1 var reg = /(...

39470
来自专栏Danny的专栏

用两个小例子来解释单例模式中的“双重锁定”

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

38820
来自专栏腾讯云数据库团队的专栏

MySQL 5.7 JSON 实现简介

本文主要介绍了MySQL在5.7.7之后引入的原生JSON支持的特性,说明了引入JSON类型的好处,并结合具体的示例介绍了MySQL在JSON类型上对外的接口以...

5.8K10
来自专栏happyJared

Python中的ORM工具:SQLAlchemy

ORM全称Object Relational Mapping, 翻译过来叫对象关系映射。在Python生态中,目前较为流行的ORM模块有SQLAlchemy和p...

21020
来自专栏魏琼东

一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM中的查询

前文回顾           前面的文章一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM的基本操作一文给大家介绍了如果使用ORM...

20950

扫码关注云+社区

领取腾讯云代金券