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. Linux安装Nginx以及简单理解

    1.Nginx简单介绍 ①.Nginx:一个高性能的HTTP和反向代理服务器,高并发处理很不错. ②.反向代理:在计算机世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的接入请求蜂 ...

  2. Oracle改动字段类型和长度

    Oracle改动字段名 alter table 表名 rename column 旧字段名 to 新字段名 Oracle改动字段类型和长度 alter table 表名 modify 字段名 数据类型 ...

  3. Dell poweredge r210进BIOS改动磁盘控制器(SATA Controller)接口模式

    Dell poweredge r210进BIOS改动磁盘控制器(SATA Controller)接口模式 开机后按F2键进入BIOS设置,例如以下图: BIOS设置主界面: 使用上下键移动光标到&qu ...

  4. Weka学习 -- StringToWordVector 源代码学习(1)

    代码整个运行流程 參数设置 input数据,设置数据格式 batchFinished(),处理数据(Tokenzier,Stemming,Stopwords) determineDictionary( ...

  5. Ambari源代码分析之Resource.Type与ResourceProvider相应关系

    前面提到.每一种Resource都相应一个ResourceProvider,以下给出其相应关系: Resource.Type ResourceProvider Workflow WorkflowRes ...

  6. webpack+babel+transform-runtime, IE下提示Promise未定义?

    知识要求 babel的基础知识(推荐阮一峰的babel入门教程) 充分理解babel-plugin-transform-runtime与babel-runtime的作用(推荐github项目首页) w ...

  7. AspNet Core Api Restful +Swagger 实现微服务之旅(四)

    这几天没更新,项目框架也是在发展阶段,这几天学习配置了一遍Apollo和RabbitMQ 等到放到框架上之后我整理一下到时候把心得写出来相互学习. 接着上一篇的内容 (2)  程序错误时  返回数据格 ...

  8. Shell编程实践之批量安装JDK

    实验环境 只有两台机子,一台虚拟机192.168.1.200,另外一台物理机192.168.1.201. 目标 执行一个shell脚本,给这两台机子自动安装jdk. 实验步骤 1.自动设置ssh免密码 ...

  9. .Net版InfluxDB客户端使用时的一些坑

    1.如果应用程序是WebAPi,则需要使用同步版的InfluDB客户端 2.如果应用程序是Winform或Console程序或Windows服务,则使用同步或异步版客户端都可以,建议用异步版 3.如果 ...

  10. JS中数组的迭代方法和归并方法

    昨天总结的JavaScript中的数组Array方法 数组的迭代方法 ES5中为数组定义了5个迭代方法.每个方法都要接收两个参数:要在每一项上面运行的函数和(可选的)运行该函数的作用域对象---影响t ...