1.Hibernate映射文件中:
<generator class="increment"/>
1)class的值等于native或increment:表格中的主键是自动生成的;
2)Class的值等于assigned:主键是自己手动添加的;
2.调用save的时候,即便没有事务提交,也会从数据库查询主键值(主键生成策 略是通过数据库产生)
3.缓存
1)缓存的一个重要的功能就是避免重复读取数据库。
2)所有的缓存都是放在session中,这个也称之为hibernate框架的一级缓 存。
4.状态
1)对象的状态也称之为对象的生命周期。
2)Hibernate只分了3个阶段:
I.临时,瞬时()(transient)
II.持久化(persistent)
III.游离,托管,分离(),离线(detached)
5.使用Hibernate实现持久化的几个步骤:
1)编写持久化类PO,由POJO加映射文化构成
2)获取Configuration(Web开发中,因为hibernate.cfg.xml在默认的路 径下,用不带参数的new Cofiguration().configure()即可)
3)获取SessionFactory
4)获取Session,打开事务
5)用面向对象的方式操作数据库
6)关闭事务,关闭Session
6.Hibernate的工作原理:
1)通过Configuration config = new Configuration();//读取并解析 hibernate.cfg.xml配置文件
2)由hibernate.cfg.xml中的
<mapping resourse=“com/xxx/User.hbm.xml”/>读取并解析映射信息
3)通过SessionFactory sf = config.buildSessionFactoty();//创建 SessionFactory
4)Session session = sf.openSession();//打开Session
5)Transaction tx = Session.beginTransaction();//创建并启动事务 Transation
6)Persistent operate操作数据,持久化操作
7)Tx.commit();//提交事务
8)关闭Session
9)关闭SessionFactory
7.为什么要用Hibernate
1)对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性 代码。
2)Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的DRM的实现。 他很大程度的简化DAO的编码工作。
3)Hibernate使用java反射机制,而不是字节码增强程序来是实现透明性。
4)Hibernate的性能非常好,因为它是个轻量级框架,映射的灵活性很出色, 它支持各种关系数据库,从一对一到多对多的各种复杂关系。
8.知识点小结:
1)增删改是必须要有事务的,因为hibernate把Connection对象设置为非自 动提交模式
2)查询可以不需要(OpenSession的方式)
3)HibernateUtil的写法
4)Dao对象里面传入的是SessionFactory
9.SessionFactory
1)创建session对象
2)它是线程安全的
3)一般来说一个项目,只有一个SessionFactory对象
4)SessionFactory会管理元数据
10.Session
1)表示是数据库的一个会话
2)Session对象里面一定会有一个JDBC的Connection对象,Session于 Connection是一对多的关系,就是说一个Session可以关联不同(多个) 的Connection,但是在Session使用时,是只有一个Connection。
I.OpenSession创建了一个Session,此时已经有一个Connection与 Session关联了。
II.session.disconnect(),此时session就不与任何connection关联
III.session.reconnect此时session就会重新关联一个connection
3)Session是线程不安全的。
4)得到session的方法有两种:a)OpenSession,b)getCurrentSession
5)每次调用OpenSession的时候,都会创建一个全新的Session
11.池:
一般在编程中指的是对象池,hibernate里面,默认都是会用池来管理Connection
12.Dao方法中查询的要注意的地方:
13.数据库的连接配置文件(hibernate.cfg.xml)要注意的地方:
1)<property name=”hbm2ddl.auto”>create</property>:在已创建表格 时,可以注释,如果注释了,添加执行时就会在原表上再新增一条数据,否 则,会创建一张新表,把之前的表覆盖。、
2)<property name=”show_sql”>true</property>
<property name=”format_sql”><property/>:如果配置这两行代码, 在运行时就会在后台显示出数据(例如:创建表数据,添加数据等)
14.状态转换图: