Hibernate核心文件

1.hibernate.cfg.xml文件
1.1 JDBC连接
hibernate.connection.driver_class、hibernate.connection.url
hibernate.connection.username、hibernate.connection.password
hibernate.connection.pool_size
1.2 配置C3P0连接池
hibernate对C3P0提供了内嵌支持,可直接配置和使用

     <!-- 设置C3P0连接池最大连接数 -->
     <property name="hibernate.c3p0.max_size">50</property>
     <!-- 设置C3P0连接池最小连接数 -->
     <property name="hibernate.c3p0.min_size">1</property>
     <!-- 设置C3P0连接池中连接的超时时长,超时则抛出异常,单位:ms -->
     <property name="hibernate.c3p0.timeout">1000</property>
     <!-- 设置C3P0缓存Statement的数量 -->
     <property name="hibernate.c3p0.max_statements">50</property>

1.3 配置JNDI数据源
JNDI常见用途:数据源配置、JMS相关配置等。
Hibernate中除了可以通过JDBC连接数据库外,还可以通过JNDI配置数据源,与数据库建立连接。
JNDI数据源常用连接属性:
属性名 : 用途
hibernate.connection.datasource : 数据源JNDI名称
hibernate.connection.username : 数据库用户名(可选)
hibernate.connection.password : 数据库密码(可选)
hibernate.jndi.url : JNDI提供者的URL(可选)
hibernate.jndi.class : JNDI InitialContextFactory的实现类(可选)
1.4 Hibernate二级缓存属性
Hibernate共有两级缓存,第一级为Session级的缓存(事务范围的缓存),可以由Hibernate自动管理.
第二级缓存是由SessionFactory管理的(进程级缓存),可在hibernate.cfg.xml配置文件中进行配置和更改,而且可以
动态加载和卸载。
配置Hibernate二级缓存所需属性:
所需属性
1.5 Hibernate事务属性
Hibernate依赖于JDBC或JTA的事务管理功能。默认采用JDBC的事务管理,可在文件中配
置hibernate.transaction.factory_class属性来指定Transaction的工厂类别。
与事务相关的属性:
属性表

      //使用JDBC的事务处理机制
      <property name="hibernate.transaction.factory_class">  
      net.sf.hibernate.transaction.JDBCTransactionFactory</property>
      //使用JTA的事务处理机制
      <property name="hibernate.transaction.factory_class">  
      net.sf.hibernate.transaction.JTATransactionFactory</property>

2.映射文件xxx.hbm.xml
2.1 文件结构

    <!-- hibernate-mapping定义了xml配置文件的基本属性 -->
    <hibernate-mapping>
      <!-- (声明持久化类)name指定持久化类的类名,table指定数据表的表名 -->
      <class name=" " table=" ">
        <!-- 标识属性(数据库主键列) -->
        <id name=" " type=" " column=" ">
          <!-- 主键生成方式 -->
          <generator class=" "/>
        </id>
        <property name=" " type=" " column=" " length=" "/>
      </class>   
    </hibernate-mapping>

2.2 映射集合属性
(1)集合类介绍
顶层接口:java.util.Collection、java.util.Map
子接口:java.util.Set、java.util.List、java.util.SortedSet、SortedMap
实现类:TreeSet、HashSet、LinkedHashSet
ArrayList、LinkedList
ArrayList底层使用的是Object数组,查询速度快,但是增加、删除元素时速度慢
LinkedList底层是以链表形式存储,增加和删除元素速度快,但是查询速率低。
TreeMap、HashMap、LinkedHashMap
(2)持久化集合类
Hibernate中声明持久化集合时必须声明为接口(顶层接口或子接口);可以是自定义接口,但必须
实现org.hibernate.usertype.UserCollectionType接口。
(3)集合映射
映射元素
(4)集合外键
(5)集合元素的数据类型
(6)索引集合类

          <map-key>:映射任何基础类型的索引及Map集合索引。
          <map-key-many-to-many>:映射Map集合和实体引用的索引字段。
          <list-index>:映射list集合和数组的索引字段。
          <composite-map-key>:映射Map集合和复合类型的索引字段。
(7)集合类映射

2.3 Hibernate关联关系映射
2.3.1单向的一对一关联
(1)通过主键关联
从表不能拥有自己的主键生成策略;需在从表类中定义一个主表实体属性并在映射文件中添加配置信息:

          <id name="congbiao_id" type="int" column="CongBiao_id">
             <generator class="foreign">
               <param name="property">zhubiao</param>
             </generator>
          </id>
          ...
          <one-to-one name="zhubiao" class="主表类" constrained="true"/>
  (2)通过外键关联
      在从表配置文件中添加配置信息:
          <many-to-one name="主表类实例" class="主表类" unique="true">
             <column name="ZhuBiao_id"/>
          </many-to-one>
2.3.2单向的一对多关联
      在表示多的一方的数据表中增加一个外键,并由“一”的一方指向“多”的一方。
      “一”:User类;“多”:Address类
      在User类中添加如下代码:
           //集合属性保存关联实体
           private Set<Address> addresses=new HashSet<Address>();
           //Address属性的getter和setter方法
     User类映射文件中添加如下代码:
         <set name="addresses" table="address" inverse="false" lazy="true">
            <key>
              <column name="user_id"/>     <!-- 确定关联的外键列 -->
            </key>
            <one-to-many class="Address"/>  <!-- 映射到关联类属性 -->
         </set>
 2.3.3单向多对一关联
       “一”的一方为主表,“多”的一方为从表;“多”的一方数据表中增加一个外键。
       “多”:User;“一”:Address
       User类添加如下代码:
            private Address address;  //User类的关联实体属性
            //getter,setter方法
       User类映射文件添加如下配置:
            <many-to-one name="address" class="Address" fetch="join">
                <column name="address_id"/>
            </many-to-one>
 2.3.4单向的多对多关联
      利用中间表将两个主表联系起来,中间表将两个主表的主键作为其外键,建立映射关系。
      在主控端的类定义中增加一个Set集合属性,使被关联一方的类实例以集合形式存在。
           //User类添加如下代码
           private Set<Address> addresses=new HashSet<Address>();
       User类映射文件添加如下代码:
            <set name="addressss" table="user_address" inverse="false" lazy="true">
               <key>
                 <column name="user_id"/>
               </key>
               <many-to-many class="Address" column="address_id"/>
            </set>
 2.3.5双向一对一关联
    (1)通过主键关联
        一方的主键生成策略配置成foreign;
            //User类添加代码
            private Address address;
            //Address类添加代码
            private User user;
       User类配置文件添加代码:
           <one-to-one name="address" class="Address" cascade="all">
           </one-to-one>
       Address类配置文件添加代码:
           <id name="addressId" type="int" access="field">
              <column name="address_id/>
              <generator class="foreign">
                <param name="property">user</param>
              </generator>
           </id>
           ...
           <one-to-one name="user" class="User" constrained="true">
           </one-to-one>
  (2)通过外键关联
      存放外键一方为从表;
            //User类添加代码
            private Address address;
            //Address类添加代码
            private User user;
      User类(主表)映射文件添加代码:
          <one-to-one name="address" cascade="all"/>
      Address类映射文件添加信息:
          <many-to-one name="user" class="User" fetch="select" unique="true">
            <column name="user_id"></column>
          </many-to-one>
 2.3.6双向一对多关联(实际上与双向多对一一样)
      “一”:user表;“多”:address表
          //User类添加代码:
          private Set<Address> addresses = new HashSet<Address>();
          ...
          //Address类添加代码:
          private User user;
          ...
     User类映射配置文件添加信息:
         <set name="addresses" table="address" inverse="true" lazy="true">
            <key>
              <column name="user_id"/>     <!-- 确定关联的外键列 -->
            </key>
            <one-to-many class="Address"/>  <!-- 映射到关联类属性 -->
         </set>
    Address类映射配置文件添加信息:
        <many-to-one name="user" class="User" fetch="join">
           <column name="user_id" not-null="true"/>
        </many-to-one>
2.3.7双向多对多关联
     使用中间表来实现两个实体间的关联关系     
         //User类添加代码:
          private Set<Address> addresses = new HashSet<Address>();
          ...
         //Address类添加代码:
          private Set<User> users = new HashSet<User>();
          ...
    User类映射文件添加代码:    
         <set name="addressss" table="user_address" inverse="true">
               <key>
                 <column name="user_id"/>
               </key>
               <many-to-many class="Address" column="address_id"/>
         </set>
    Address类映射文件添加代码:    
         <set name="users" table="user_address">
               <key>
                 <column name="address_id"/>
               </key>
               <many-to-many class="User" column="user_id"/>
         </set>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值