利用休假时间好好学习了当今流行的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统一。

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

 

总结Hibernate4.1+版本与Hibernate3.3+版本区别的更多相关文章

  1. hibernate4.0+版本和3.0+版本的区别总结

    自己总结下hibernate4.1版本中的新特性和hibernate3.3做区别 1.数据库方言设置 <property name=”dialect”>org.hibernate.dial ...

  2. 高版本->低版本迁移,低版本客户端连接高版本数据库EXP导出报错EXP-00008,ORA-01455,EXP-00000

    生产环境: 源数据库:RHEL + Oracle 11.2.0.3 目标数据库:HP-UX + Oracle 10.2.0.4   需求:迁移部分表  11.2.0.3-->10.2.0.4,若 ...

  3. 高版本api在低版本中的兼容

    直接上例子,看如何避免crash. eg:根据给出路径,获取此路径所在分区的总空间大小. 文档说明:获取文件系统用量情况,在API level 9及其以上的系统,可直接调用File对象的相关方法,以下 ...

  4. 怎样去除SVN中的某个版本之前的所有版本

    地狱门神 在某些时候,我们可能需要一个存放二进制文件的SVN库,用来保存每日构建的结果等.但是这种库会趋于越来越大,最后会占用很多磁盘空间.这时我们会想到能不能删掉某个版本之前的所有版本,以节省磁盘空 ...

  5. SQL Server 2000 sp2 及更低版本不受此版本的 Windows 支持

    SQL Server 2000 sp2 及更低版本不受此版本的 Windows 支持.在安装了 SQL Server 2000 之后请应用 sp3. 出现这种现象的原因在于:Windows Serve ...

  6. 如何让VMware低版本运行VMware高版本创建的虚拟机

    如何让VMware低版本运行VMware高版本创建的虚拟机 问题描述: 本机安装的VMware Workstation是10版本,之前VMware Workstation 11版本创建的虚拟机,在运行 ...

  7. PHP有两个不同的版本:4.x系列版本和5.x系列版本

    在为用户提供动态内容方面,PHP和MySQL是一个强大的组合.这些年来,这两项产品已经跨越了它们最初的应用舞台,现在,一些世界上最繁忙的网站也在应用它们.虽然它们当初都是开源软件,只能在UNIX/Li ...

  8. MongoDB3.2版本与3.0版本写场景压力测试对比

    我们主要是为了测试journal对写操作性能的影响.分别测试了3.2版本,3.0版本在ramdisk,hdd上有journal,和没journal的情况. 发现一个很怪异的现象,3.2版本时候,随着y ...

  9. DOS批处理命令判断操作系统版本、执行各版本对应语句

    DOS批处理命令判断操作系统版本.执行各版本对应语句   昨天在家里试用  netsh interface ip set address 这些命令更改上网IP.DNS.网关等,今天将那些代码拿来办公室 ...

随机推荐

  1. Spring 源码分析之 bean 依赖注入原理(注入属性)

         最近在研究Spring bean 生命周期相关知识点以及源码,所以打算写一篇 Spring bean生命周期相关的文章,但是整理过程中发现涉及的点太多而且又很复杂,很难在一篇文章中把Spri ...

  2. Redis学习系列七分布式锁

    一.简介 熟悉.Net多线程的都知道,当多个线程同时操作一个全局缓存对象(static对象实例.Dictionary.List等)时,会存在多线程争用问题,包括EF.Dapper等本身的缓存机制,都存 ...

  3. 深入浅出分析MySQL MyISAM与INNODB索引原理、优缺点分析

    本文浅显的分析了MySQL索引的原理及针对主程面试的一些问题,对各种资料进行了分析总结,分享给大家,希望祝大家早上走上属于自己的"成金之路". 学习知识最好的方式是带着问题去研究所 ...

  4. C#效率优化(1)-- 使用泛型时避免装箱

    本想接着上一篇详解泛型接着写一篇使用泛型时需要注意的一个性能问题,但是后来想着不如将之前的详解XX系列更正为现在的效率优化XX系列,记录在工作时遇到的一些性能优化的经验和技巧,如果有什么不足,还请大家 ...

  5. Java并发编程笔记之CopyOnWriteArrayList源码分析

    并发包中并发List只有CopyOnWriteArrayList这一个,CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行修改操作和元素迭代操作都是在底层创建一个拷贝 ...

  6. C语言指针基本操作

    C语言指针基本操作 指针  指针介绍 如果说C语言最有魅力的地方在哪,那么毋庸置疑,非指针莫属了. 众所周知,C语言中每个变量都有一个内存地址,可以通过&进行访问.指针是一个变量,它的值是一个 ...

  7. RIP笔记

    RIP(工作中没见人用过这种古老的协议,了解一下距离矢量的思想即可) RIPv2支持VLSM但不支持CIDR RIP工作在应用层,用UDP封装,端口是520 无论是RIPv1还是RIPv2都既支持周期 ...

  8. RBAC 权限设计(转载)

    来源 :https://blog.csdn.net/rocher88/article/details/43190743 这是我在网上找的一些设计比较好的RBAC权限管理 不知道,像新浪.搜狐.网易.百 ...

  9. js .map方法

    map这里的map不是“地图”的意思,而是指“映射”.[].map(); 基本用法跟forEach方法类似: array.map(callback,[ thisObject]); callback的参 ...

  10. CentOS 通过yum来升级php到php5.6,yum upgrade php 没有更新包

    在文章中,我们将展示在centOS系统下如何将php升级到5.6,之前通过yum来安装lamp环境,直接升级的话,提示没有更新包,也就是说默认情况下php5.3.3是最新 1.查看已经安装的php版本 ...