继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Hibernate初探之单表映射

暴揍小子
关注TA
已关注
手记 3
粉丝 9
获赞 70

hibernate:
什么是ORM?
ORM(Object/Relationship Mapping):对象/关系映射
利用面向对象思想编写的数据库应用程序,最终都是把对象信息保存在关系型数据库中,于是要编写很多和底层数据库相关的SQL语句。
明显和面向对象是格格不入的。

使用ORM的好处是什么?
方便我们程序员,用面向对象的思想,在项目当中尽量的少写,和底层数据库相关的sql语句。也即是方便我们程序的维护、修改、跨平台性、扩展。

用ORM就为什么要用Hibernate?
是JAVA技术里面的,一款成熟稳定的ORM框架。

写SQl语句有什么不好吗?
1、不同的数据库使用的SQL语法不同。
2、同样的功能在不同的数据库中有不同的实现方式。//分页功能
3、程序过分依赖SQL对程序的移植及扩展,维护等带来很大的麻烦。

怎样抛弃SQL,完全使用面向对象思想,来做开发软件呢?
需要一种可行的ORM框架技术。

什么是Hibernate?
是Java的一款开源的ORM框架技术。
对JDBC进行了非常轻量级的对象封装。最终还是通过JDBC来操作数据库。

持久化层的作用?
就是把我们程序当中的,生成的对象,通过一系列的映射,把它持久化添加到我们的数据库当中。

还有其他的ORM框架技术:
1、MyBatis:前生是著名的iBatis,Apache开源组织的一种框架技术。
2、Toplink:被Oracle手工,并重新包装为Oracle AS TopLink
3、EJB:本身是JAVAEE的规范,重量级,复杂,少。

Hibernate开发的基本步奏?
1、编写配置文档hibernate.cfg.xml
2、编写实体类(每个属性都是和数据库里面的字段是一一对应的,也要符合JavaBean的实体规范)
3、生成对应实体类的映射文件并加到配置文档中
4、调用Hibernate API进行测试

怎么通过Hibernate API编写访问数据库的代码
Configuration config = new Configuration().configure();//创建配饰对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(config.getProperties())
.buildServiceRegistry();//创建服务注册对象
sessionFavtory = config.buildSessionFactory(serviceRegistry);//创建会话工厂
session = sessionFactory.openSession();//打开会话
transaction = session.beginTransaction();//打开事务

session简介
什么是session?
类似于我们JDBC里面的connection对象,hibernate其实就是再调用session各种API函数来实现的。

不建议直接使用jdbc的connection操作数据库,而是通过使用session操作数据库。
session可以理解为操作数据库的对象。
一个connection可以有多个session,但一个session只有一个connection,多对一的关系。

transaction简介(事务)
hibernate对数据的操作都是封装在事务当中,并且默认是非自动提交的方式。
所以用session保存对象是,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中。
其实也可以使用doWork()方法,获得jdbc的connection后,设置为自动提交事务模式。(但是不推荐这样做)

如何获取session对象?
1、openSession
2、getCurrentSession

hibernate.cfg.xml:
<property name="hibernate.current_session_context_class">thread</property>

openSession与getCurrentSession区别
1、getCurrentSession在事务提交或者回滚之后会自动关闭,而openSession需要手动关闭。如果使用openSession而没有手动关闭,多次之后会导致连接池溢出。
2、openSession每次创建新的session对象,getCurrentSession使用现有的session对象。

get和load的区别?
1、在不考虑缓存的情况下,不管是否是使用这个对象,get方法会在调用之后立即向数据库发出sql语句,返回持久化对象。
load方法会在调用后返回一个代理对象。该代理对象只保存了实体对象的id,直到使用对象的非主键属性是才会发出sql语句。
2、查询数据库中不存在的数据是,get方法返回null,load方法就会抛异常org.hibernate.ObjectNotFoundException

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP