随笔 - 44  文章 - 19  评论 - 22  阅读 - 18万

总结Hibernate4.1+版本与Hibernate3.3+版本区别

利用休假时间好好学习了当今流行的ORMapping框架-Hibernate,看完了马士兵老师经典的Hibernate视频教程,也算是小小入门了吧。

马老师在讲课中使用的Hibernate版本是3.3.2,而我们现在从Hibernate官网上下载的最新版本是4.2.3。

当然Hibernate从版本3+到4+升级过程(为了适应JPA2.0?)中还是有点些变化的,因为我是用4.2.3版本做实验的,所以下面稍微总结下区别。(欢迎批评指正)

1.使用hibernate.properties配置文件

以下配置的信息可以不用写在传统的hibernate.cfg.xml中了,可以写在hibernate.properties配置文件中。

hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/hibernate
hibernate.connection.password=root
hibernate.connection.username=root
hibernate.connection.pool_size=100
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=true
hibernate.format_sql=true

其中在3.3+版本中连接MySQL数据库只需要指明MySQLDialect即可。在4.1+版本中可以指出MySQL5Dialect。

2.SessionFactory对象的buildSessionFactory方法

4.1+版本中不带参数的buildSessionFactory()已经被废除,取而代之的是buildSessionFactory(ServiceRegistry ServiceRegistry)

为此我们采用以下方法:

复制代码
public class HibernateTest {
    
    private static SessionFactory sf  = null;
    
    @BeforeClass
    public static void beforeClass(){ 
        Configuration cfg = new Configuration().configure();
        ServiceRegistryBuilder srb = new ServiceRegistryBuilder();
        //默认读取hibernate.properties里面的配置信息
        sf = cfg.buildSessionFactory(srb.buildServiceRegistry());
    }
    
    @AfterClass
    public static void afterClass(){
        sf.close();
    }
复制代码

这里有两点需要注意

        1)若使用XML配置文件的方式配置实体类:需要在代码中手动加入resource文件

          (在hibernate.cfg.xml中配置已经无效<mapping resource="cn/ntt/china/model/Student.hbm.xml"/>)

          例:cfg.addResource("cn/ntt/china/model/Student.hbm.xml");//须指明全路径

        2)若使用注解方式:与原来3.3+版本一样在需要在hibernate.cfg.xml中加入配置即可

          例:<mapping class="cn.ntt.china.model.Teacher"/>

另外org.hibernate.cfg.AnnotationConfiguration;(Deprecated. All functionality has been moved to Configuration)

这个注解读取配置的class已经废弃,现在读取配置不需要特别注明是注解。

为了适应JPA规范,Hibernate4.1+版本中推荐使用annotation配置。

所以在引进jar包时把requested里面的包全部引进来就已经包含了annotation必须包了。

3.二级缓存配置

原来3.3+:

        <property name="cache.use_query_cache">true</property>
        <property name="cache.use_second_level_cache">true</property>
        <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

现在4.1+:

        <property name="cache.use_query_cache">true</property>
        <property name="cache.use_second_level_cache">true</property>
        <property name="cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>

 

Hibernate学到现在算到告一段落。现在回想下Hibernate的核心思想其实就是把数据库中表与表的关系的操作,转化封装为java对象与对象的操作!那为什么要这样做呢?

原因很简单这样做符合我们日常面向对象编程的习惯,并且简化持久层操作的代码。

sun为这个思想制定了一套规范,即JPA!可见在不久的将来Java持久化操作要被JPA统一。

最后感谢马老师的在视频中的精彩讲解!

 
posted on   013  阅读(9412)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示