Hibernate的CRUD的准备工作:
1):建立表t_user.
2):建立模型对象:User类.
3):编写DAO组件.
DAO接口:IUserDAO
DAO实现类:UserDAOImpl(暂时不提供方法实现)
DAO测试类:UserDAOTest
4):使用Hibernate依赖jar包.
1).MySQL驱动包:mysql-connector-java-5.1.22.jar(勿忘)
5)Hibernate的CRUD的配置文件:
Hibernate的应用中主要包含两种配置文件.
1):主配置文件(包含连接数据库的基本要素:驱动类名,URL,账号,密码,方言,包含映射文件)
2):每一个Domain对象的映射文件(处理对象和表中的映射关系).
操作数据库相关的对象
Configuration对象:
表示hibernate框架的配置对象,主要用于解析Hibernate配置文件和持久化映射文件中的信息,最重要的功能,是用来创建SessionFactory对象.(配置文件都要存放在CLASSPATH根路径).
SessionFactory对象:
1.负责创建Session对象.
2.数据库的连接信息是配置SessionFactory;
3.SessionFactory是线程安全的(DataSource),SessionFactory的创建需要很大的系统开销,实际上,在创建sessionFactory的时候才会去连接数据库,一般的,针对一个应用,一个数据库服务器,只需要一个SessionFactory实例就够了.
4.抽取Hibernate工具类:HibernateUtil
5.SessionFactory的重要方法:使用银行转账案例,说明openSession和getCurrentSession.
****根据对象和映射文件,在创建SessionFactory对象的时候,可以生成对应的数据表:****
hibernate.hbm2ddl.auto=create-drop :删除并创建表,关闭SessionFactory时,删除数据库表.
hibernate.hbm2ddl.auto=create :删除并创建表
hibernate.hbm2ddl.auto=update :更新表结构:
hibernate.hbm2ddl.auto=validate :验证表结构:如果表结构和映射文件不匹配,hibernate启动失败
Session对象:
1.主要方法:save/update/delete/get/createQuery/beginTransaction/getTransaction.
2.session不是线程安全的(好比Connection对象),所以,session的最大生命周期:一个线程,在web应用当中,一个session的最大生命周期:request.
3.Session中有一个缓存,称为一级缓存。存放当前工作单元加载的对象.
在一个session的生命周期之内,连续拿相同类型,相同ID的对象,只需要发送一次SQL.
4.一级缓存能提高一定的性能,但是有限.
5.session加载出来的对象,都存放于一级缓存中进行管理.
6.控制一级缓存的方法:
clear():清空一级缓存所有对象
Session中的方法的作用是用来改变对象的状态的,而不是发送SQL的.
临时状态/瞬时态(transient):刚刚用new语句创建,没有被持久化,不处于session中。特点:没有oid,不在session当中
持久化状态(persistent):已经被持久化,加入到session的缓存中。特点:有oid,在session当中
脱管态/游离状态(detached):已经被持久化,但不处于session中。特点:有oid,不在session当中
删除状态(removed):对象有关联的ID,并且在Session管理下,但是已经计划被删除。特点:有oid,在session当中,最终的效果是被删除.
判断规则:
1): 对象是否有OID;
2): 判断对象是否被Session所管理(在一级缓存中).