hibernate详解

来源:互联网 发布:米思米3d数据库 编辑:程序博客网 时间:2024/06/05 02:35

1.hibernate是什么?

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

2.语言特点

  • 将对数据库的操作转换为对Java对象的操作,从而简化开发。通过修改一个“持久化”对象的属性从而修改数据库表中对应的记录数据。
  • 提供线程和进程两个级别的缓存提升应用程序性能。 有丰富的映射方式将Java对象之间的关系转换为数据库表之间的关系。
  • 屏蔽不同数据库实现之间的差异。在Hibernate中只需要通过“方言”的形式指定当前使用的数据库,就可以根据底层数据库的实际情况生成适合的SQL语句。
  • 非侵入式:Hibernate不要求持久化类实现任何接口或继承任何类,POJO即可。

3.核心API

Hibernate的API一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。通过这些接口,可以对持久化对象进行存取、事务控制。

  • Configuration:唯一作用就是加载配置文件。 默认构造器负责加载hibernate.properties文件(如果有)。
    configure()默认加载hibernate.cfg.xml文件,也可通过参数加载指定文件。
  • SessionFactory:整个数据库编译后的内存映像。
    线程安全,负责生成Session,底层依赖ConnectionProvider。
    实际项目中,一定用DataSource作为ConnectionProvider。
    SessionFactory底层封装的DataSource。
  • Session:数据库操作的关键对象。
    线程不安全的。
    底层封装的是Connection
  • Transaction:事务,它是底层事务的抽象、封装了底层数据库的具体事务。

4.导入jar包

<dependency>  <groupId>org.hibernate</groupId>  <artifactId>hibernate-core</artifactId>  <version>5.2.10.Final</version></dependency>

5.添加配置文件

<!DOCTYPE hibernate-configuration PUBLIC    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration>    <!-- 数据源 -->    <session-factory>        <!-- 配置Hibernat的数据库方言,注意mysql5之后是MySQL5InnoDBDialect -->        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>        <!-- 连接数据库的参数 -->        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>        <!--  jdbc:mysql:///db 直接连本机-->        <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/db</property>        <property name="hibernate.connection.username">root</property>        <property name="hibernate.connection.password">root</property>        <!-- 配置DataSource -->        <!-- 最大连接数 -->        <property name="hibernate.c3p0.max_size">200</property>        <!-- 最小连接数 -->        <property name="hibernate.c3p0.min_size">2</property>        <!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->        <property name="hibernate.c3p0.timeout">5000</property>        <!-- 最大的PreparedStatement的数量 -->        <property name="hibernate.c3p0.max_statements">100</property>        <!-- 每隔3000秒检查连接池里的空闲连接 ,单位是秒-->        <property name="hibernate.c3p0.idle_test_period">3000</property>        <!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->        <property name="hibernate.c3p0.acquire_increment">2</property>        <!-- 每次是否验证连接是否可用 -->        <property name="hibernate.c3p0.validate">false</property>        <!-- sql语句显示在控制台 -->        <property name="hibernate.show_sql">true</property>        <property name="hibernate.format_sql">true</property>        <!--             create:每次都会重新创建表            update:如果有表,就不管;如果没表,就创建 ,如果有更新,会更新            create-drop:每次都会重新创建表,之后删除,测试        -->        <property name="hibernate.hbm2ddl.auto">create</property>        <!-- 告诉Hibernate自定义的映射文件            如果是xml文件:rosource            如果是类文件:class         -->        <mapping class="org.xgl.pojo.User"/>    </session-factory></hibernate-configuration>

其他配置参考:http://blog.csdn.net/qq_31724483/article/details/75137447

6.编写pojo

Hibernate对持久化类没有太多的要求,只要是一个普通的POJO就可以了,但还是有如下几个基本的要求:
- 要有一个无参数的构造器。
- 每个成员变量都要有一个setter、getter方法。
- 可选:尽量为持久化类提供一个标识属性,用于唯一标识该实体。 【数据库设计建议】
建议:不要使用final类,否则Hibernate不能启用代理模式! 如果实体要添加到HashSet集合中、或作为HashMap的key,建议重写equals()和hashCode()。