Hibernate学习笔记2
学习内容:
使用JUnit来测试方法 |
对持久化对象的生命周期的理解 |
测试实体对象的生命周期 |
了解get和load的区别 |
查询所有User对象的记录,并且设置分页 |
详细内容:
1.如何使用JUnit,以及使用JUnit的注意事项:
建立单独建立一个存放测试代码的文件夹,在项目名上单击右键,选择 “New”——“Source Folder” |
建立的测试类要继承 TestCase类 |
建立的类名格式: ****Test,例如:HibernateTest |
建立的方法名格式: test**** 例如: testSave() 注:建立的方法不要带参数以及返回值 |
2.对持久化对象的生命周期的理解
对象名及描述 | 特征 |
瞬时对象(Transient Objects): 使用new操作符初始化的对象不是立刻就持久的,它们的状态是瞬时的,也就是说他们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其他对象所引用),它们的状态将会丢失,并由垃圾回收机制回收。 | 在数据库中没有与之匹配的数据 没有纳入session的管理 |
持久化对系那个(Presistent Objects): 持久实例是任何具有数据库标识的实例。它由持久化管理器Session同意管理,持久实例是在事务中进行操作的——他们的状态在事务结束同时同数据库进行同步。当事务提交时,通过实行SQL的Insert、Update和Delete语句吧内存中的状态同步到数据库中。在数据库中有与之匹配的数据 | 纳入了session的管理 在清理缓存的时候会与数据库进行同步
|
离线对象(Detached Objects): Session关闭后,持久化对象就变为离线对象。离线表示这个对象不能再与数据库保持同步,他们不再受Hibernate管理。 | 在数据库中有与之匹配的数据 没有纳入session的管理
|
下面附加上三种状态之间的转化方式:
3.测试实体对象的生命周期
进行测试的源代码:
|
4.了解get和load的区别
get | Load |
session.get( User.class , id ); id实现序列化,实现序列化才能保存到磁盘上采用get加载数据,如果数据库中不存在相应的数据,返回null。如果使用该对象的引用则抛出NullPointerException,JUnit也会抛出异常 | session.load( User.class , id );不会马上发出查询sql,采用继承的方式,返回一个代理对象,当真正使用这个类的时候才加载这个类,这个方法为懒加载或延迟加载如果数据库中不存在相应的数据,使用代理的时候会抛出异常ObjectNotFoundExceptiond查询,JUnit也会抛出异常 |
下面带上测试get和load区别的源代码:
|
使用Hibernate删除数据库中的数据
|
提示:
进行JUnit测试方法的时候,抛出了异常但是JUnit的状态条,仍然是绿色的,如果要让JUnit捕获到异常则,向上抛出异常:
|
5.查询数据库中所有的User对象的数据,并且设置分页
比较简单,仅写上源代码:
|