www.liaoxuefeng.com/wiki/1252599548343744/1331313418174498
1 Users
0 Comments
19 Highlights
0 Notes
Tags
Top Highlights
介于全自动ORM如Hibernate和手写全部如JdbcTemplate之间,还有一种半自动的ORM,它只负责把ResultSet自动映射到Java Bean,或者自动填充Java Bean参数,但仍需自己写出SQL
使用Hibernate或JPA操作数据库时,这类ORM干的主要工作就是把ResultSet的每一行变成Java Bean
而ORM框架之所以知道如何把行数据映射到Java Bean,是因为我们在Java Bean的属性上给了足够的注解作为元数据
UserProxy必须保存Hibernate的当前Session
但是,当事务提交后,Session自动关闭,此时再获取getAddress()将无法访问数据库,或者获取的不是事务一致的数据
ORM框架总是引入了Attached/Detached状态,表示当前此Java Bean到底是在Session的范围内,还是脱离了Session变成了一个“游离”对象
一级缓存是指在一个Session范围内的缓存
二级缓存是指跨Session的缓存,一般默认关闭
二级缓存极大的增加了数据的不一致性
createTxManager
和Hibernate不同的是,MyBatis使用Mapper来实现映射,而且Mapper必须是接口
Hibernate和JPA为了实现兼容多种数据库,它使用HQL或JPQL查询,经过一道转换,变成特定数据库的SQL
ORM框架通常提供了缓存,并且还分为一级缓存和二级缓存
MyBatis提供了一个MapperFactoryBean来自动创建所有Mapper的实现类
切换数据库可能就不太容易
使用MyBatis最大的问题是所有SQL都需要全部手写
MyBatis是一个半自动化的ORM框架,需要手写SQL语句,没有自动加载一对多或多对一关系的功能
ORM框架是如何跟踪Java Bean的修改,以便在update()操作中更新必要的属性?
答案是使用Proxy模式,从ORM框架读取的User实例实际上并不是User类,而是代理类
Glasp is a social web highlighter that people can highlight and organize quotes and thoughts from the web, and access other like-minded people’s learning.