阶段总结
这个周学习了Hibernate的入门知识,了解了ORM(ObjectRelationshipMap)的概念,以及hibernate的配置,数据库的链接,Junit的单元测试,增删改查的单表操作。
ORM
对象关系映射,使用不同类型数据库进行操作时,使用面向对象的思想把对象持久化到数据库中。
Hibernate配置
首先创建hibernate.cfg.xml然后根据持久化对象类创建(持久化对象类).hbm.xml,并在hibernate.cfg.xml中引入该xml
eg:
<mapping class="包名.类名" />
<mapping resource="类名.hbm.xml"/>
Junit单元测试
- @Before–初始化资源
- @Test–测试
- @After–释放资源
执行顺序:Before–>Test–>After
工程名–>右键–>SourceFolder–>FolderName为test–>新建StudentTest类
主键生成策略
其中:native 对应MySQL的auto-incremented,字段的类型必须是整型;assign手工赋值。
基本类型
只想要年月日,使用hibernate的date类型代表日期yyyy-MM-dd
只想要时间,使用hibernate的time类型代表时间hh:mm:ss
时间和日期,使用hibernate的timestamp类型yyyyMMddhhmmss
对象类型
1.clob和text对应大文本文件,blob对应大的二进制文件,例如视频音频图片
2.java中的clob对应存储大文本文件,java中的blob对应存储大二进制文件
MySQL不支持标准SQL的CLOB类型,在Mysql中,用TEXT,MEDIUMTEXT及LONGTEXT类型
来表示长度超过255的长文本数据
组件属性
在”类名.hbm.xml”添加
<!-- 组件属性 -->
<component name="detail" class="Detail">
<property name="post" column ="POST"/>
<property name="phone" column ="PHONE"/>
<property name="favorite" column ="FAVORITE"/>
</component>
Detail为一个单独的类,它作为一个对象存放在学生中,保存在数据库中。
单表的增删改查CRUD
单表CRUD操作:
- save
- update
- delete
- get/load(查询单个记录)
get与load的区别
- 在不考虑缓存的情况下,get方法会在调用之后立即向数据库发出sql语句,返回持久化对象;而load方法会在调用后返回一个代理对象,该代理对象只保存了实体对象的id,直到使用对象的其他属性时才会发出sql语句。
- 查询数据库中不存在的数据时,get返回null;而load方法则抛出异常:org.hibernat.ObjectNotFoundException
Hibernate流程
- 创建Configuration时读取Hibernate.cfg.xml内容
- 创建SessionFactory读取User.hbm.xml内容(创建和销毁都相当耗费资源,通常一个系统内一个数据库只创建一个)
- 创建Session(类似于JDBC的Connection)
- 执行 save,delete,update,get操作,transaction。
- 创建Transaction事务对象。
- commit()提交,session.close()关闭资源。