Hibernate注意事项

来源:互联网 发布:服装erp软件排行 编辑:程序博客网 时间:2024/04/29 23:18

1.<!-- 配置显示hibernate生成的 sql ,特别说明,在开发阶段设为true利于调试,在使用项目则设为false-->
 <property name="show_sql ">true</property>


2.SessionFactory(会话工厂)

可以缓存 sql 语句和数据 ( 称为 session 级缓存 )!!

这是一个重量级的类,因此要保证在一个应用程序中只能有一个


3. hibernate 而言,要求程序员,在进行 增加,删除,修改的时候使用事务提交


4. pojo类是和一张表对应 ,一般我们放在 com.xxx.domain 下,pojo 需要一个主键属性 ( 用于标示一个 pojo 对象 ) ,除了主键属性外,它应当还有其属性,属性的访问权限是 private ,要提供 set /get 方法 ,它应当有一个无参的构造方法 (hibernate 反射 ) ,pojo 类其实就是 javabean


5.hibernate开发的三种方式中的:
编写domain object + 映射文件 ------> 创建出对应的数据库,
这里我们说明如果要自动的创建出对应的数据库,需要做配置(hibernate.cfg.xml).
<property name="hbm2ddl.auto ">create</property>
这里有四个配置值: create , update , create-drop, validate
create : 当我们的应用程序加载hibernate.cfg.xml [ new Configuration().config(); ]就会根据映射文件,创建出数据库, 每次都会重新创建, 原来表中的数据就没有!!!
update: 如果数据库中没有该表,则创建,如果有表,则看有没有变化,如果有变化,则更新.
create-drop: 在显示关闭 sessionFactory时,将drop掉数据库的schema
validate: 相当于每次插入数据之前都会验证数据库中的表结构和hbm文件的结构是否一致
在开发测试中,我们配置哪个都可以测试,但是如果项目发布后,最好自己配置一次,让对应的数据库生成,完后取消配置,

 

6.通过SessionFactory 获取 Session的两个方法 openSession() 和 getCurrentSession() ;
openSession() 是获取一个新的session
getCurrentSession() 获取和当前线程绑定的session,换言之,在同一个线程中,我们获取的session是同一session,这样可以利于事务控制
如果希望使用 getCurrentSession 需要配置 hibernate.cfg.xml 中配置:

<property name="current_session_context_class">thread</property>

注:

如果需要在同一线程中,保证使用同一个Session则,使用getCurrentSession()
如果在一个线程中,需要使用不同的Session,则使用opentSession()

通过 getCurrentSession() 获取的session在事务提交后,会自动关闭,通过openSession()获取的session则必须手动关闭
如果是通过getCurrentSession() 获取 sesssion ,进行查询需要事务提交.

 

7.本地事务(JDBC事务):针对一个数据库的事务

<property name="current_session_context_class">thread</property>
全局事务(jta事务):跨数据库的事务

<property name="current_session_context_class">jta</property>

 

8.Session接口 的主要功能和作用是:
Session一个实例代表与数据库的一次操作(当然一次操作可以是crud组合)
Session实例通过SessionFactory获取,用完需要关闭。
Session是线程不同步的(不安全),因此要保证在同一线程中使用,可以用getCurrentSession()。
Session可以看做是持久化管理器,它是与持久化操作相关的接口

Configuration cf=new Configuration().configure();
SessionFactory sf=cf.buildSessionFactory();
Session s=sf.getCurrentSession();
//或者是: Session s=sf.openSession();

原创粉丝点击