我的java学习笔记之栋哥hibernate…

这是在黑马培训的时候赵栋老师讲的hibernate的笔记,总结的还可以,后期自己也可以查看并参考参考,这个要把自己以往的经历总结下,真正成为自己的东西,要做的事情还有很多,加油。

# jdbc的缺点:


数据没有缓存;--这是hibernate的优势;


hibernate:sql优化就废了,数据量特别大,也不适合hibernate;

不能控制sql语句;


catalog:数据库名;

class--name:类的全名称;

javascript很重要;

string类型加上长度,否则自动最大;

DAO模型

hibernate不会自动提交事务,

自动提交事务有危险性;


session.save(person)--person是一个持久化对象;

持久化类的创建时机;



怎么去拼接sql语句;

struts2spring必须深挖;


typejava类型,而不是hibernate类型,因为效率更高;


一对多关系中,Set集合,保证唯一性;

映射文件必须要很熟悉,自己多敲几遍;


只查找数据也要开启事务吗?这个怎么解释;




为什么说自动提交事务是危险的,比如;

这是因为那个每操作一次事务就自动提交一次

而我们往往是希望多个操作在同一个事务中,从而保证安全性;

因为我们无法预见之后的操作是否有问题.干脆自己控制事务;




双向一对多的情况下:

首先就配置文件而言,一的一方必须有这么个配置;

 

 

 

 

 

 

这段配置的含义是

就类的关系而言:

Classes这个类有一个集合,名称为students,保存着多个学生,因此必须要有

即指明多的一方的类;

就数据库表之间的关系而言:

key--column:这个配置表示的是在学生表中,的外键用cid表示;

同时配置级联更新的情况是 update-save:即保存或者更新的时候,级联操作才生效;

对于多的一方:必须有这么个配置:

 

 

 

表示多的一方在哪个集合中啊;或者说是指明自己的所属关系;

在操作过程中如果设置了级联更新属性;

当用一的一方维护两者之间的关系时;只需要设置好对应的属性;

确定了所属关系,然后就



Plain Ordinary Java Object的缩写;不含业务逻辑的java简单对象;

完全POJO的系统也称为轻量级系统(lightweight);是相对于EJB而提出的概念。


隐式保存,隐式更新;---


是谁在解除关系,就看谁的映射文件;

谁身上有外键谁就能掌握主动权;


多的一方级联更新一的一方;

效率更高,因为外键在多的一方;

可以把外键当做多的一方的普通字段进行更新;

---这是在解除一个学生和班级的关系;

一般都会将一的一方的inverse属性设置为true;

即不能维护关系;


如果全部都得解除,从一的一方解除效率更高;


映射文件是由专人维护的吗?


一对一,其实是一对多的特殊情况;

只要将外键设置为唯一即可;

类的延迟加载:

类的延迟加载只针对普通属性有效;id不延迟加载;

当得到类的属性的时候才发出sql语句;

利用session.load方法产生的是代理对象;不能是final类型;

他是持久化类的子类,javassist包提供的;


集合的延迟加载:

默认为lazy=true,即懒加载;

只有当对集合进行遍历treeWalk取值的时候

才发出sql语句,加载数据;

lazy="false";即立即加载;

extra:进一步的懒加载;对于count,avg,sum

只需要知道一些计量值的时候也不加载数据只是

发出对于的分组sql语句;




单端关联的延迟加载;

false:

no-proxy:true

proxy--extra


4延迟加载的原理或者说时机;

通过控制sql语句 的发出时机实现的;



fetch:抓取策略,怎么样发出sql语句,提取

集合中的数据;

join:左外连接方式查询出所有数据;

select:默认值,使用到,或者说遍历的时候才查出来;

subselect;

子查询效率比join;

即使join被选中,如果需求分析出有子查询

则不使用join;


用一个东西,多想想为什么?


缓存:权限:工作流;



如果fetchjoin且生效,即没有子查询;

就是立即加载!!!!!!


参看老王的TransactionManager


在当前线程的session情况下

CRUD:都需要开启事务!!!----安全提升了!!!

强制使用事务!!!

当事务提交的时候:session关闭了;--不怎么好



我们自己可以弄一个SessionManager;



session.flush();一定有这个操作的;

如果没有commit中会帮你干这个事;



二级缓存进行页面,静态页面的缓存

防止每次页面都加载;

apache-tiles用于页面包含,比较实用;


二级缓存中存放的数据都是公共的数据,所有的人都能访问到

二级缓存存在于SessionFactory;hibernate内部都二级缓存没有实现

是以插件形式实现的;

ehcache:

jboss:

oscache:

memory cache:hadoop;


不经常变化的东东;适合放二级缓存中

注意一级二级缓存的交互;

注意配置:


二级缓存,一级缓存:对象缓存;

session.load在没有连接的情况下

都可以使用;

吸收框架的思想;

ORM框架:apacheibatis,openjpa:jpa的无缝实现;

oracle:TopLink

sun:JDO


hibernate中事务必须要提交才能生效,只开启不提交,session一关闭就没有东西了!!!


迫切左外连接:fetch join;

连接查询咩有延迟加载!!!!!


fetchselect是有冲突的;

只能取其一;


如果一个项目的需求中:更新频率不频繁,同时查询用的多,数据也不大

可以考虑用Hibernate;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值