Hibernate笔记(二)

Hibernate学习笔记(二)

23.延迟检索和立即检索:

(1)当想要先延迟加载页面的数据时,当load返回对象时,不加载 ,那么当页面使用时session已经关闭了,解决方法:

lazy="false"或者在service层就获取所需的数据

24.投影查询:在选择查询的基础上,把查询结果封装到对象中

25.JDBC的第一个参数用1表示,而Hibernate用0表示

26.交叉连接(笛卡尔积)

("from Customer c,Orders o ")

[Customer [id=1, name=tom, orders=[Orders [id=1, name=鲜花], Orders [id=2, name=巧克力]]], Orders [id=1, name=鲜花]]

27.隐式内连接就是在笛卡尔积的基础上过滤无效数据

[Customer [id=1, name=tom, orders=[Orders [id=2, name=巧克力], Orders [id=1, name=鲜花]]], Orders [id=1, name=鲜花]]

(“from Customer c,Orders o where o.customer = c”)

28.迫切(显式)内连接会将子装入父中,组装成一个对象返回

Customer [id=1, name=tom, orders=[Orders [id=1, name=鲜花], Orders [id=2, name=巧克力]]]

(“from Customer c inner join fetch c.orders”)

29.非迫切是将两个对象分别返回

[Customer [id=1, name=tom, orders=[Orders [id=2, name=巧克力], Orders [id=1, name=鲜花]]], Orders [id=1, name=鲜花]]

(“from Customer c inner join c.orders”)

30.非迫切左外连接:一个数组,两个对象

(“from Customer c left outer join c.orders”)

[Customer [id=1, name=tom, orders=[Orders [id=2, name=巧克力], Orders [id=1, name=鲜花]]], Orders [id=1, name=鲜花]]
[Customer [id=1, name=tom, orders=[Orders [id=2, name=巧克力], Orders [id=1, name=鲜花]]], Orders [id=2, name=巧克力]]
[Customer [id=2, name=jerry, orders=[Orders [id=4, name=烛光], Orders [id=3, name=美酒], Orders [id=5, name=钻戒]]], Orders [id=3, name=美酒]]
[Customer [id=2, name=jerry, orders=[Orders [id=4, name=烛光], Orders [id=3, name=美酒], Orders [id=5, name=钻戒]]], Orders [id=4, name=烛光]]
[Customer [id=2, name=jerry, orders=[Orders [id=4, name=烛光], Orders [id=3, name=美酒], Orders [id=5, name=钻戒]]], Orders [id=5, name=钻戒]]

重新查询(右边为空)

[Customer [id=3, name=mike, orders=[]], null]

31.迫切左外连接(返回一个对象)

(“from Customer c left outer join fetch c.orders”)

Customer [id=1, name=tom, orders=[Orders [id=1, name=鲜花], Orders [id=2, name=巧克力]]]
Customer [id=1, name=tom, orders=[Orders [id=1, name=鲜花], Orders [id=2, name=巧克力]]]
Customer [id=2, name=jerry, orders=[Orders [id=5, name=钻戒], Orders [id=4, name=烛光], Orders [id=3, name=美酒]]]
Customer [id=2, name=jerry, orders=[Orders [id=5, name=钻戒], Orders [id=4, name=烛光], Orders [id=3, name=美酒]]]
Customer [id=2, name=jerry, orders=[Orders [id=5, name=钻戒], Orders [id=4, name=烛光], Orders [id=3, name=美酒]]]
Customer [id=3, name=mike, orders=[]]

32.右外连接:非迫切右外连接,两个对象

(“from Customer c right outer join c.orders”)

[Customer [id=1, name=tom, orders=[Orders [id=1, name=鲜花], Orders [id=2, name=巧克力]]], Orders [id=1, name=鲜花]]
[Customer [id=1, name=tom, orders=[Orders [id=1, name=鲜花], Orders [id=2, name=巧克力]]], Orders [id=2, name=巧克力]]
[Customer [id=2, name=jerry, orders=[Orders [id=3, name=美酒], Orders [id=4, name=烛光], Orders [id=5, name=钻戒]]], Orders [id=3, name=美酒]]
[Customer [id=2, name=jerry, orders=[Orders [id=3, name=美酒], Orders [id=4, name=烛光], Orders [id=5, name=钻戒]]], Orders [id=4, name=烛光]]
[Customer [id=2, name=jerry, orders=[Orders [id=3, name=美酒], Orders [id=4, name=烛光], Orders [id=5, name=钻戒]]], Orders [id=5, name=钻戒]]
[null, Orders [id=6, name=灯光]]

33.右外连接:迫切右外连接,一个对象

(“from Customer c right outer join fetch c.orders”)

Customer [id=1, name=tom, orders=[Orders [id=2, name=巧克力], Orders [id=1, name=鲜花]]]
Customer [id=1, name=tom, orders=[Orders [id=2, name=巧克力], Orders [id=1, name=鲜花]]]
Customer [id=2, name=jerry, orders=[Orders [id=5, name=钻戒], Orders [id=4, name=烛光], Orders [id=3, name=美酒]]]
Customer [id=2, name=jerry, orders=[Orders [id=5, name=钻戒], Orders [id=4, name=烛光], Orders [id=3, name=美酒]]]
Customer [id=2, name=jerry, orders=[Orders [id=5, name=钻戒], Orders [id=4, name=烛光], Orders [id=3, name=美酒]]]
null

35.局部命名查询:要写清楚局部类的全限定名+query的名字

Query query = session.getNamedQuery(“com.javaframe.domain.Customer.bcd”);

36.全部命名查询:query的名字

Query query = session.getNamedQuery(“abc”);

34.学习ORM之前,是先建表的,学习ORM后,一般是先进行对象的创建再进行数据库的创建(实际应用则是先建表)

35.悲观锁

(1)读锁:select * from xxx lock in share mode => java:get(class,id,LockOption.READ);

(2)写锁:select * from xxx for update => java:get(class,id,LockOption.UPGRADE);

36.乐观锁

(1)实体类中加入版本控制属性(version:Integer);

(2)hbm中,加入version元素

37.log4j.properties配置文件的内容

(1)记录器(log4j.rootLogger=日志级别, 输出源1,输出源2,。。。。)

(2)输出源(log4j.appender.输出源的名称=输出源的实现类:log4j.appender.file=org.apache.log4j.FileAppender)

?常见的输出源实现类

org.apache.log4j.FileAppender  输出文件中
	file ,表示文件输出位置

org.apache.log4j.ConsoleAppender 输出到控制台
	Target ,表示使用哪种输出方式,在控制台打印内容,取值:System.out / System.err

(3)布局(log4j.appender.数据源.layout=org.apache.log4j.PatternLayout:log4j.appender.stdout.layout=org.apache.log4j.PatternLayout)

38.多对一配置中用unique设置为true

39.注意在使用一对一关系时只有外键所在的类对象才可以维护外键

40.存放在二级缓存的数据的要求:缓存存放在内存,数据库数据放在硬盘

(1)经常使用;

(2)不经常修改,涉及并发问题,不同进程频繁同步。适合地区数据。

41.使用二级缓存的配置工作:

(1)导包

(2)配置文件

42.缓存的构成

(1)类缓存:存储实体类

二级缓存在缓存数据时,并不是以对象的形式缓存,缓存的是对象数据的散列,每次从二级缓存拿会在一级缓存中组装成对象

(2)集合缓存

配置方式:完整类名.集合的属性名

必须配合类缓存使用

存放的是数据的id,对应的具体数据存放在类缓存区中(这就是为什么要顺便再类缓存中配置集合的这个类)

(3)查询缓存(HQL)

与集合缓存相似,也是要配合类缓存使用

要二次设置,因为数据查询过多,没有必要每条语句的结果都存进去
query.setCacheable(true);//二次设置查询缓存,要求将这条语句存进缓存

(4)时间戳缓存区

update(),createQuery(),createCriteria()等面向对象的方法时会存储最后的操作时间

记录对表操作的时间来确保二级缓存中的数据是有效的

43.timeToIdleSeconds:在缓存中不被使用就被销毁的时间

timeTiLiveSeconds:可以存活的时间,一般大于被销毁的时间
#总结:
#####以上为我学习hibernate时的笔记第二部分,有误欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值