对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决面向对象与面向关系数据库存在的互不匹配现象的技术;简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据库中;本质上就是将数据从一种形式转换到另外一种形式.
经典的ORM实现框架有Hibernate和MyBatis.
Hibernate有以下五个核心接口:
1.Configuration 负责加载主配置文件信息,同时也加载映射关系文件信息.
2.SessionFactory 负责创建Session对象.
3.Session 数据库连接会话,负责执行增删改操作.
4.Transaction 负责事务控制.
5.Query 负责执行特殊查询.
1.一对多的标签为
;多对多的标签为
;
2.Hibernate的事务实际上是底层的JDBC Transaction的封装或者是JTATransaction的封装;默认情况下使用JDBCTransaction.
session.load()和session.get()的区别为:
1.get不支持延迟加载,而load支持.换句话说,get方法一定获取实际的对象,而load有可能返回代理对象.
2.如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException.
get方法和load方法都可以使用二级缓存.
update方法跟新数据时,如果不存在该条数据的主键则会报错;saveOrUpdate方法保存或更新,如果不存在主键则执行插入.
1.Hibernate实现分页的方式如下:
Query query = session.createQuery("from Student");
query.setFirstResult(firstResult);//设置每页开始的记录号
query.setMaxResults(resultNumber);//设置每页显示的记录数
Collection students = query.list();
上述代码中的集合students中某也要获取的数据.
2.JDBC实现分页的方式如下:
根据不同的数据库采用不同的SQL分页语句,例如Oracle中的SQL语句为:
SELECT * FROM (SELECT a.*, rownum r FROM TB_STUDENT) WHERE r between 2 and 10;
上述查询语句,查询了从记录号2到记录号10之间的所有记录.将上述SQL语句使用JDBC进行执行,即可得到分页后数据.
Hibernate中UI系那个可以看做有3中状态,分别是临时状态,持久化状态,游离状态,这些状态可以相互转换,转换规则如下图:
具体各个状态的特征为:
1.临时状态
1)临时状态的对象可以被垃圾回收;
2)临时状态的对象为进行过持久化,未与session关联.
2.持久化状态
1)持久化状态对象垃圾回收器不能回收;
2)持久化状态的对象进行了持久化,与session相关联,即持久化状态就想存在于session缓存中,由session负责管理;
3)持久化状态对象的数据可以自动更新到数据库中,时机是在调用session.flush()时执行.而提交事务时会调用session.flush(),因此提交事务时也会触发同步,可以理解为ts.commit=session.flush()+commit.
3.游离状态
1)游离状态的对象可以被垃圾回收;
2)游离状态的对象进行过持久化,但已与session解除了关联.
1.session.load();
2.query.iterate();
3.关联映射中对关联属性的加载.
Hibernate中的关联映射有如下几种:
1)一对一关联
2)一对多关联
3)多对一关联
4)多对多关联
Hibernate有如下几种查询方式
1)使用API查询,如get,load
2)使用HQL查询
3)使用SQL查询
4)使用Criteria查询
一级缓存是Session级别的缓存,由Session负责管理,因此一级缓存是Session独享的,即每个Session只能访问自己的一级缓存区.
二级缓存是SessionFactory级别的缓存,由SessionFactory负责管理,因此二级缓存是Session间共享的,即不同的Session都可以访问二级缓存区.
一级缓存和二级缓存相同的地方是,他们缓存的都是对象数据.