初识Hibernate的主配置和映射配置

Hibernate.cfg.xml 主配置

Hibernate.cfg.xmljava

         主配置文件夹中主要配置:数据库连接配置,其余参数配置,映射信息等。mysql

经常使用配置查看源码:sql

         hibernate-distribution-3.6.0.Final\project\etc\hibernate.properties数据库

session-factory 节点: 通常来讲一个数据库对应着一个session-factory节点。
服务器

1.数据库连接配置:(以mysql为例子)session

      hibernate.properties中的对mysql的配置      ## MySQL

      #hibernate.dialect org.hibernate.dialect.MySQLDialect
      #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
      #hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect  //上边的是哪一个是mysql下的小版本,咱们通常用哪一个第一个就能够。
      #hibernate.connection.driver_class com.mysql.jdbc.Driver   //驱动配置
      #hibernate.connection.url jdbc:mysql:///test   //连接url配置
      #hibernate.connection.username gavin  //用户名
      #hibernate.connection.passwor  //密码并发

        <!-- 表示咱们连接的驱动 ,固然也能够采用c3p0链接池-->
        <property name="hibernate.connection.driver_class">com.jdbc.mysql.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql:///hib_demo</property>
        <property name="hibernate.connection.username">yujiaming</property>
        <property name="hibernate.connection.password">root</property>
        <!-- 区别不一样的sql语言,要告诉本数据库的方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>//注意这里我使用的和上边的三个版本的编写略微有所不一样,这里 均可以
        <!-- 表示是打印数据库语句 -->
        <property name="hibernate.show_sql">true</property>

 2.其余参数的配置oracle

    自动建表:app

    #hibernate.hbm2ddl.auto create-drop 每次在建立sessionFactory时候执行建立表;当调用sesisonFactory的close方法的时候,删除表!ide

    #hibernate.hbm2ddl.auto create   每次都从新建表; 若是表已经存在就先删除再建立

    #hibernate.hbm2ddl.auto update  若是表不存在就建立; 表存在就不建立;(咱们通常经常使用这个)

    #hibernate.hbm2ddl.auto validate  (生成环境时候) 执行验证: 当映射文件的内容与数据库

 格式化输出代码:  <!-- 此处 表示格式化咱们的语句 -->
               <property name="hibernate.format_sql"></property>

 映射文件的配置

根元素:<hibernate-mapping>,每个hbm.xml文件都有惟一的一个根元素,包含一些可选的属性。

package:表示当前的class默认的包名,能够不写可是要在class中写类的全限定名。

<hibernate-mapping package="cn.hhua.test">

2)schema:数据库schema的名称

3)catalog:数据库catalog的名称

4)default-cascade:默认的级联风格,默认为none

5)default-access:Hibernate用来访问属性的策略

6)default-lazy:指定了未明确注明lazy属性的Java属性和集合类,Hibernate会采起什么样的默认加载风格,默认为true

7)auto-import:指定咱们是否能够在查询语言中使用非全限定的类名,默认为true,若是项目中有两个同名的持久化类,则最好在这两个类的对应的映射文件中配置为false

    说白的 若是设置为false 在hql查询语句中要指明返回类的全限定名。默认便可。

<class>定义类:根元素的子元素,用以定义一个持久化类与数据表的映射关系,以下是该元素包含的一些可选的属性

注意class其实有好多的属性能够设置,这里咱们只说开发中会遇到的

1)name:持久化类(或者接口)的Java全限定名,若是这个属性不存在,则Hibernate将假定这是一个非POJO的实体映射

    说白了就是咱们要映射的类

2)table:对应数据库表名

<class table="employee" name="Employee"> //这俩最经常使用,其余的不怎么用

3)discriminator-value:默认和类名同样,一个用于区分不一样的子类的值,在多态行为时使用

4)dynamic-update:指定用于UPDATE的SQL将会在运行时动态生成,而且只更新那些改变过的字段

5)dynamic-insert:指定用于INSERT的SQL将会在执行时动态生成,而且只包含那些非空值字段

6)select-before-update:指定HIbernate除非肯定对象真正被修改了(若是该值为true),不然不会执行SQL UPDATE操做。在特定场合(实际上,它只在一个瞬时对象关联到一个新的Session中时执行的update()中生效),这说明Hibernate会在UPDATE以前执行一次额外的SQL SELECT操做,来决定是否应该执行UPDATE

7)where:指定定个附加的SQLWHERE条件,在抓取这个类的对象时会增长这个条件

8)optimistic-lock:乐观锁定,决定乐观锁定的策略

9)lazy:经过设置lazy="false",全部的延迟加载(Lazy fetching)功能将未被激活(disabled)

<id>定义主键

1)name:表示映射类的id属性

2)type:类型 可使java的类型也能够是hibernate的类型

3)column:数据库中主键的字段名字

4)unsaved-value:用来标志该实例是刚刚建立的,还没有保存。能够用来区分对象的状态

5)class:Hibernate用来访问属性值的策略

主键的生成策略

                   identity  自增加(mysql,db2)

                   sequence  自增加(序列), oracle中自增加是以序列方法实现

                   native  自增加【会根据底层数据库自增加的方式选择identity或sequence】

                           若是是mysql数据库, 采用的自增加方式是identity

                           若是是oracle数据库, 使用sequence序列的方式实现自增加

                  

                   increment  自增加(会有并发访问的问题,通常在服务器集群环境使用会存在问题。)

                  

                   assigned  指定主键生成策略为手动指定主键的值

                   uuid      指定uuid随机生成的惟一的值

                   foreign   (外键的方式, one-to-one讲)

 

 

 

 

 

 

 

 

 

 

单个字段做为主键的实例:

    <id name="empId" column="id">
            <generator class="native" />
     </id>

<property>普通字段的配置

主要的属性有:

        name  指定对象的属性名称

                column 指定对象属性对应的表的字段名称,若是不写默认与对象属性一致。

                length 指定字符的长度, 默认为255

                type   指定映射表的字段的类型,若是不指定会匹配属性的类型

                           java类型:     必须写全名

                     hibernate类型:  直接写类型,都是小写。

例如:

      <property name="empName" column="empName" type="java.lang.String" length="20"></property>
        <property name="workDate" type="java.util.Date"></property>
        <!-- 若是列名称为数据库关键字,须要用反引号或改列名。 -->
        <property name="desc" column="`desc`" type="java.lang.String"></property>//desc是一个关键字,用于排序

其余经常使用(了解即便可):

lazy:指定实例变量第一次被访问时,这个属性是否延迟抓取,默认为false。

unique:使用DDL为该字段添加惟一的约束,此外,这也能够用作property-ref的目标属性。

not-null:使用DDL为该字段添加能否为空的约束。

access:Hibernate用来访问属性值的策略。

access属性用来让你控制Hibernate如何在运行时访问属性。默认状况下,Hibernate会使用属性的get/set方法对。若是你指明access="field",则Hibernate会忽略get/set方法对,直接使用反射来访问成员变量。

 

<composite-id>复合主键

复合主键其实就是一组字段例如(姓名+地址)组合成的主键

使用步骤:

           1. 咱们要定义一个主键的类,而后将其中的主键组成字段定义成类的属性(咱们以地址和姓名为主键为例)

// 复合主键类
public class CompositeKeys implements Serializable{
    private String userName;
    private String address;
   // .. get/set
}

//--------------------------------------------------
//咱们在具体的类中只须要引用主键就能够
public class User {

    // 名字跟地址,不会重复
    private CompositeKeys keys;
    private int age;
}

           2.配置符合主键的映射关系

    <!-- 复合主键映射 -->
        <composite-id name="keys">
            <key-property name="userName" type="string"></key-property>
            <key-property name="address" type="string"></key-property>
        </composite-id>
相关文章
相关标签/搜索