初识Hibernate的主配置和映射配置
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的主配置和映射配置相关推荐
- hibernate一对一主键关联映射(一)---单向关联
1.新建工程项目hibernate_one2one_pk_1,添加hibernate所需Jar包和mysql驱动Jar包. 2.建立工具类HihernateUtils.java和ExportDB.ja ...
- hibernate 的一对多关联关系映射配置
hibernate 是操作实体类: 表是一对多的关系,当创建这2个实体的时候 在一的一方定义一个多的一方的集合 在多的一方定义一个一的一方的对象 表是多对多的关系,当创建这2个实体的时候 在互相中都有 ...
- hibernate一对一主键关联映射(单向关联Person-----IdCard)
一对一关联映射原理:让两个实体的主键一样,这样就不需要加入多余的字段 例子: package com.hibernate; public class IdCard { private int id; ...
- hibernate一对一主键关联映射(二)---双向关联
1.新建工程项目hibernate_one2one_pk_2,加入hibernate所需的Jar包和数据库mysql驱动Jar包. 2.编写工具类HibernateUtils.java和ExportD ...
- Hibernate基于主键一对一映射操作实例
背景: 公民和公民的身份证,是一个一对一的例子,一个公民只有一个身份证. 这个是基于主键的,基于外键的映射在:http://blog.csdn.net/nthack5730/article/detai ...
- 初识Hibernate——关系映射
Hibernate的主要目的就是是Java程序员可以随心所欲的使用对象编程思维来操纵数据库.所以,一些数据库表的关系我们应该可以通过hibernate实现,比如在数据库中我们厂用的用到的主外键关系,还 ...
- Hibernate框架 主配置文件 Hibernate.cfg.xml 映射配置 说明
1 主配置文件 Hibernate.cfg.xml 主配置文件中主要配置:数据库连接信息.其他参数.映射信息! 常用配置查看源码: hibernate-distribution-3.6.0.Final ...
- Hibernate一对一关联映射配置
一对一关联 Hibernate提供了两种映射一对一关联关系的方式:按照外键映射和按照主键映射.下面以员工账号和员工档案表为例,介绍这两种映射方式,并使用这两种映射方式分别完成以下持久化操作: (1)保 ...
- Hibernate实体映射配置1(java@注解方式)
实体和数据库之间存在某种映射关系,hibernate根据这种映射关系完成数据的存取.在程序中这种映射关系由映射文件(*.hbm.xml)或者java注解(@)定义. 本文以java注解的形式总结映射关 ...
- Hibernate各种主键生成策略与配置详解 - 真的很详细啊!!
1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...
最新文章
- 我以为的周末 vs 实际上的周末
- 面试再也不怕问到HashMap(一)
- depends用于测试程序运行所缺少的文件,可以帮我们很快找到问题
- Android 将图片网址url转化为bitmap,drawable转bitmap,file转bitmap,bitmap转file
- python模拟浏览器代码_python 模拟浏览器
- 斑斓中国BlenderCN项目库
- java 认证考试题,2017年Java认证考试试题
- DB2报错原因汇总(sqlcode sqlstate)
- Java POJO 自动生成器
- 【持续更新...】相关资源汇总
- PLC开发没有前景想转行嵌入式,找个培训机构还是自学?
- 根据几何定义使用计算机编程求定积分的值
- 服务器两块硬盘怎么合并,Windows2008磁盘合并和分区教程
- entrez检索系统要服务器吗,Entrez 系统
- excel去掉公式()
- PHP 下载保存文件到本地
- 入职国企外包第一个星期,实感
- 2018年舆情产品小总结
- 华为 android 5.0系统下载地址,华为emui5.1
- 使用install shield制作安装程序问题集锦
热门文章
- Java中的JVM虚拟机
- 至少出现k次重复的子串的最大长度
- 马尾物联网企业主导或参与制定修订各级标准达60项
- 应用Mongoose开发MongoDB(1)数据库连接
- javascript 字符串中单引号和双引号区别
- 如何用sql语言只获得数据库当前日期,且格式为yyyy-mm-dd?
- Windows XP sp3上可以安装SQL Server 2008企业版?
- 如何解决It's likely you're attempting to run Eclipse using the JRE instead of the JDK
- 【笔记】vim如何删除重复行
- TypeError: Cannot read property ‘forceUpdate‘ of undefined