Hibernate.cfg.xml 主配置

Hibernate.cfg.xml

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

常用配置查看源码:

hibernate-distribution-3.6.0.Final\project\etc\hibernate.properties

session-factory 节点: 一般来说一个数据库对应着一个session-factory节点。

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

      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.其他参数的配置

    自动建表:

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

    #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>

初识Hibernate的主配置和映射配置的更多相关文章

  1. hibernate 的一对多关联关系映射配置

    hibernate 是操作实体类: 表是一对多的关系,当创建这2个实体的时候 在一的一方定义一个多的一方的集合 在多的一方定义一个一的一方的对象 表是多对多的关系,当创建这2个实体的时候 在互相中都有 ...

  2. Hibernate框架--配置,映射,主键

    SSH框架: Struts框架, 基于mvc模式的应用层框架技术! Hibernate,    基于持久层的框架(数据访问层使用)! Spring,   创建对象处理对象的依赖关系以及框架整合! Da ...

  3. Hibernate框架 主配置文件(Hibernate.cfg.xml) 映射配置 说明

    Hibernate.cfg.xml 主配置文件中主要配置:数据库连接信息.其他参数.映射信息! 常用配置查看源码: hibernate-distribution-3.6.0.Final\project ...

  4. Hibernate框架 主配置文件 Hibernate.cfg.xml 映射配置 说明

    1 主配置文件 Hibernate.cfg.xml 主配置文件中主要配置:数据库连接信息.其他参数.映射信息! 常用配置查看源码: hibernate-distribution-3.6.0.Final ...

  5. Hibernate一对一关联映射配置

    一.一对一关联 Hibernate提供了两种映射一对一关联关系的方式:按照外键映射和按照主键映射.下面以员工账号和员工档案表为例,介绍这两种映射方式,并使用这两种映射方式分别完成以下持久化操作: (1 ...

  6. hibernate 联合主键生成机制(组合主键XML配置方式)

    hibernate 联合主键生成机制(组合主键XML配置方式)   如果数据库中用多个字段而不仅仅是一个字段作为主键,也就是联合主键,这个时候就可以使用hibernate提供的联合主键生成策略. 具体 ...

  7. 2018.10.6 Hibernate配置文件详解-------ORM元数据配置 &&& hibernate主配置文件

    ORM既然是实体与关系数据库的映射,那就需要建立实体和关系数据库之间的基础数据,也可以称为元数据.简单的说就是表示类与表.列与属性(get.set方法)等等之间对应关系的数据. Customer.hb ...

  8. Hibernate学习---第六节:数组&list&map&set的映射配置

    1.实体类,代码如下: package learn.hibernate.bean; import java.util.Date; import java.util.HashMap; import ja ...

  9. 大家一起撸代码之——Hibernate各种主键生成策略与配置详解

    1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...

随机推荐

  1. 轻谈BFC

    BFC 定义 CSS2.1的定义 Block formatting contexts 9.4.1 Block formatting contexts Floats, absolutely positi ...

  2. POJ 2195Going Home(网络流之最小费用流)

    题目地址:id=2195">POJ2195 本人职业生涯费用流第一发!!快邀请赛了.决定还是多学点东西.起码碰到简单的网络流要A掉.以后最大流费用流最小割就一块刷. 曾经费用流在我心目 ...

  3. ASP.NET Core 使用 Alipay.AopSdk.Core 常见问题解答

    1.Alipay.AopSdk.Core.AopException:"您使用的私钥格式错误,请检查RSA私钥配置,charset = UTF-8" 出现这个问题,就是配置不正确.首 ...

  4. Java加密与解密笔记(二) 对称加密

    前面的仅仅是做了编码或者摘要,下面看看真正的加密技术. DES public class DESUtil { static final String ALGORITHM = "DES&quo ...

  5. MyBatis:lazy loading

    懒加载的原理 mybatis 会循环处理结果集中返回的每行数据的,在处理之前首先会通过反射调用构造方法来创建 result 对象,结果集中的一行数据最终会映射为一个 result 对象(严格的来说是不 ...

  6. 【python】BIF及查看函数帮助

    Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 07:18:10) [MSC v.1900 32 bit (Intel)] on win32 Type ...

  7. IOS学习7——cocoapod安装与使用教程

    参考: iOS开发-CocoaPods使用详细说明  iOS开发-CocoaPods使用详细说明 一.CocoaPods简述 iOS开发时,项目中经常会需要引用第三方框架库,如果每用到一个第三方框架哦 ...

  8. SSH框架完全整合

    大三学期渐末,事情也挺多的,上周就开始着手整合SSH框架,到现在才真正的完成,过程中碰到了许多小问题(小问题大折腾,哭脸.jpg).本着善始善终的原则,最终把它给完成了. 本篇文章就在: win7 6 ...

  9. 对于group by 和 order by 并用 的分析

    今天朋友问我一个sql查询. 需求是 找到idapi最近那条数据,说明idapi 是重复的,于是就简单的写了 SELECT * FROM `ag_alarm_history`   group by ` ...

  10. Nginx 错误处理方法: bind() to 0.0.0.0:80 failed

    Nginx 错误处理方法: bind() to 0.0.0.0:80 failed 今天启动window上的nginx总是报错 错误信息是bind() to 0.0.0.0:80 failed (10 ...