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>

转载于:https://www.cnblogs.com/hhua-best/p/8059232.html

初识Hibernate的主配置和映射配置相关推荐

  1. hibernate一对一主键关联映射(一)---单向关联

    1.新建工程项目hibernate_one2one_pk_1,添加hibernate所需Jar包和mysql驱动Jar包. 2.建立工具类HihernateUtils.java和ExportDB.ja ...

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

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

  3. hibernate一对一主键关联映射(单向关联Person-----IdCard)

    一对一关联映射原理:让两个实体的主键一样,这样就不需要加入多余的字段 例子: package com.hibernate; public class IdCard { private int id; ...

  4. hibernate一对一主键关联映射(二)---双向关联

    1.新建工程项目hibernate_one2one_pk_2,加入hibernate所需的Jar包和数据库mysql驱动Jar包. 2.编写工具类HibernateUtils.java和ExportD ...

  5. Hibernate基于主键一对一映射操作实例

    背景: 公民和公民的身份证,是一个一对一的例子,一个公民只有一个身份证. 这个是基于主键的,基于外键的映射在:http://blog.csdn.net/nthack5730/article/detai ...

  6. 初识Hibernate——关系映射

    Hibernate的主要目的就是是Java程序员可以随心所欲的使用对象编程思维来操纵数据库.所以,一些数据库表的关系我们应该可以通过hibernate实现,比如在数据库中我们厂用的用到的主外键关系,还 ...

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

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

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

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

  9. Hibernate实体映射配置1(java@注解方式)

    实体和数据库之间存在某种映射关系,hibernate根据这种映射关系完成数据的存取.在程序中这种映射关系由映射文件(*.hbm.xml)或者java注解(@)定义. 本文以java注解的形式总结映射关 ...

  10. Hibernate各种主键生成策略与配置详解 - 真的很详细啊!!

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

最新文章

  1. 我以为的周末 vs 实际上的周末
  2. 面试再也不怕问到HashMap(一)
  3. depends用于测试程序运行所缺少的文件,可以帮我们很快找到问题
  4. Android 将图片网址url转化为bitmap,drawable转bitmap,file转bitmap,bitmap转file
  5. python模拟浏览器代码_python 模拟浏览器
  6. 斑斓中国BlenderCN项目库
  7. java 认证考试题,2017年Java认证考试试题
  8. DB2报错原因汇总(sqlcode sqlstate)
  9. Java POJO 自动生成器
  10. 【持续更新...】相关资源汇总
  11. PLC开发没有前景想转行嵌入式,找个培训机构还是自学?
  12. 根据几何定义使用计算机编程求定积分的值
  13. 服务器两块硬盘怎么合并,Windows2008磁盘合并和分区教程
  14. entrez检索系统要服务器吗,Entrez 系统
  15. excel去掉公式()
  16. PHP 下载保存文件到本地
  17. 入职国企外包第一个星期,实感
  18. 2018年舆情产品小总结
  19. 华为 android 5.0系统下载地址,华为emui5.1
  20. 使用install shield制作安装程序问题集锦

热门文章

  1. Java中的JVM虚拟机
  2. 至少出现k次重复的子串的最大长度
  3. 马尾物联网企业主导或参与制定修订各级标准达60项
  4. 应用Mongoose开发MongoDB(1)数据库连接
  5. javascript 字符串中单引号和双引号区别
  6. 如何用sql语言只获得数据库当前日期,且格式为yyyy-mm-dd?
  7. Windows XP sp3上可以安装SQL Server 2008企业版?
  8. 如何解决It's likely you're attempting to run Eclipse using the JRE instead of the JDK
  9. 【笔记】vim如何删除重复行
  10. TypeError: Cannot read property ‘forceUpdate‘ of undefined