宝宝hibernate学习总结

宝宝hibernate学习总结

ID:30406298

大小:85.19 KB

页数:10页

时间:2018-12-29

宝宝hibernate学习总结_第1页
宝宝hibernate学习总结_第2页
宝宝hibernate学习总结_第3页
宝宝hibernate学习总结_第4页
宝宝hibernate学习总结_第5页
资源描述:

《宝宝hibernate学习总结》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、宝宝Hibernate学习总结宝宝Hibernate学习总结Hibernate是一个开放源代码的ORM(对象关系映射)框架,它对JDBC进行了轻量级的封装,Java程序员可以使用面向对象的编程思维来操纵数据库,它通过对象属性和数据库表字段之间的映射关系,将对象持久化到数据库中,可以说Hibernate就是将数据从对象形式转换成表字段后存入数据库的一种框架。hibernate移植非常好,因为它用到了方言配置,可以根据不同的数据库自动发出不同的sql。下面是我感觉比较重要的方面就列出来了:首先是搭建环境:1、我建的是个Java项目,第

2、一步先引入HIbernate的jar包:hibernate3.jar这是核心包,还有lib下的所有包。2、我用oracle做测试,所以在引入oracle的驱动包,classes12.jar。3、在从源码包中拷贝一个hibernate.cfg.xml(放到src下,而且这个文件的配置可以参考etc/hibernate.properties这个文件)这是Hibernate的默认配置文件名字,和User.hbm.xml(此文件跟你的pojo放在一块)映射配置文件。这样Hibernate的环境基本上就搭建好了。4、hibernate可以根

3、据映射文件和pojo自动创建数据库表(用SchemaExport这个类)。5、hibernate默认事务是手动的,所以我们必须手动获取事务,开启和关闭它。6、在hibernate中持久化对象有三个状态,这个面试时可能会问到:(1)transient瞬时态:在数据库中没有与之匹配的数据,一般就是只new出了这个对象,并且在session缓存中也没有即此对象没有纳入session的管理,此状态的对象不能直接存入数据库(会抛出TransientObjectException)。(2)persistent持久态:在数据库中有与之匹配的数据

4、,并且纳入了session的管理(一般就是执行了save、update、load、get后的对象),在提交事务时(清理session缓存时)会和数据库同步更新,持久态对象才可以存入数据库。(3)detached游离态:在数据库中有与之匹配的数据,但没有纳入session缓存的管理。7、(1)讨论下hibernate的增(save)、删(delete)、改(update)、查(get,load)。增没什么说的,关于删除和修改时我们完全可以new出一个对象进行操作,只要给这个对象的标示赋值为库中存在的对象就行了,这个过程应该是这样的,

5、当我们new出对象后并设置了相应的id(标示),然后执行session.delete()或者session.update()后,此对象在session缓存中就有了一份,再当我们commit提交事务时(清理缓存),数据库中有同样id标示的对象就会与session缓存中的持久态对象进行同步更新,所以这样更新和删除完全可以实现,但是我们一般不能这么,最好是先查出来在去更新或者删除,比如:当我们要更新一个User对象时,没有先查出来而是用new的方法并给这个新对象设置了一个与库中有对应ID的形式去更新,那么更新完后,如果没有赋值的属性都会

6、变成null,这个可不是我们想要的结果哦。(2)在说说get和load这两个单一对象的查询方法:1get方法不支持lazy延迟加载,即一执行到get方法立刻发出sql语句,而load有延迟加载,即load方法执行后,并不会执行查询sql只是返回了一个代理对象,只有等真正用到了这个对象才会发出查询语句。2当get方法查找的对象不存在则返回null,而load会抛出异常。共同点:load和get只能通过主键标示加载实体对象。8、数据库的隔离级别决定了只发出插入sql而没有提交事务后是否能select看到数据。其实只要发出了插入的sql

7、语句,即使你没有提交事务,库里面就已经有了数据,只是数据库的默认隔离级别不会让你看到数据,这时你就可以回滚事务,取消数据插入,而且这种隔离级别还可以设置的。9、在hibernate中,持久态对象不能引用瞬时态对象。(插入有关联关系的对象时可能会遇到这种异常)。10、hiberntate级联(cascade)只对增、删、改有作用,与查询没关系,默认不会级联即值为none。11、在hibernate中对象之间的映射关系通常都配成双向的,比如双向一对一外键关联映射(这也是一对一中最常用的)。12、一对一主键关联默认就有级联关系,其他关联

8、关系都没有这种默认设置。13、many-to-one标签会在当前表中加字段即外键,而one-to-onename="user"标签不会加字段,指示hibernate如何加载关联对象,它默认就去另一张表中找主键与当前表主键相等的数据。14、在主键生成

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。