# jdbc的缺点:
数据没有缓存;--这是hibernate的优势;
hibernate的:sql优化就废了,数据量特别大,也不适合hibernate;
不能控制sql语句;
catalog:数据库名;
class--name:类的全名称;
javascript很重要;
string类型加上长度,否则自动最大;
DAO模型
hibernate不会自动提交事务,
自动提交事务有危险性;
session.save(person)--person是一个持久化对象;
持久化类的创建时机;
怎么去拼接sql语句;
struts2和spring必须深挖;
type写java类型,而不是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;
用一个东西,多想想为什么?
缓存:权限:工作流;
如果fetch为join且生效,即没有子查询;
就是立即加载!!!!!!
参看老王的TransactionManager
在当前线程的session情况下
CRUD:都需要开启事务!!!----安全提升了!!!
强制使用事务!!!
当事务提交的时候:session关闭了;--不怎么好
我们自己可以弄一个SessionManager;
session.flush();一定有这个操作的;
如果没有commit中会帮你干这个事;
二级缓存进行页面,静态页面的缓存
防止每次页面都加载;
apache-tiles用于页面包含,比较实用;
二级缓存中存放的数据都是公共的数据,所有的人都能访问到
二级缓存存在于SessionFactory;hibernate内部都二级缓存没有实现
是以插件形式实现的;
ehcache:
jboss:
oscache:
memory cache:hadoop中;
不经常变化的东东;适合放二级缓存中
注意一级二级缓存的交互;
注意配置:
二级缓存,一级缓存:对象缓存;
session.load在没有连接的情况下
都可以使用;
吸收框架的思想;
ORM框架:apache的ibatis,openjpa:对jpa的无缝实现;
oracle:TopLink
sun:JDO
hibernate中事务必须要提交才能生效,只开启不提交,session一关闭就没有东西了!!!
迫切左外连接:fetch join;
连接查询咩有延迟加载!!!!!
fetch和select是有冲突的;
只能取其一;
如果一个项目的需求中:更新频率不频繁,同时查询用的多,数据也不大
可以考虑用Hibernate;