一、核心配置文件(hibernate.cfg.xml) 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<!-- SessionFactory,相当于之前学习连接池配置 -->
<session-factory>
<!-- 1 基本4项 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hi_01</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1234</property>
<!-- 2 与本地线程绑定 -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- 3 方言:为不同的数据库,不同的版本,生成sql语句(DQL查询语句)提供依据
* mysql 字符串 varchar
* orcale 字符串 varchar2
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 4 sql语句 -->
<!-- 显示sql语句 -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<!-- 5 自动创建表(了解) ,学习中使用,开发不使用的。
* 开发中DBA 先创建表,之后根据表生产 PO类
* 取值:
update(最常用的取值): 如果当前数据库中不存在表结构,那么自动创建表结构.
如果存在表结构,并且表结构与实体一致,那么不做修改
如果存在表结构,并且表结构与实体不一致,那么会修改表结构.会保留原有列.
create(很少):无论是否存在表结构.每次启动Hibernate都会重新创建表结构.(数据会丢失)
create-drop(极少): 无论是否存在表结构.每次启动Hibernate都会重新创建表结构.每次Hibernate运行结束时,删除表结构.
validate(很少):不会自动创建表结构.也不会自动维护表结构.Hibernate只校验表结构. 如果表结构不一致将会抛出异常.
-->
<property name="hibernate.hbm2ddl.auto">create</property> <!-- 6 java web 6.0 存放一个问题
* BeanFactory 空指针异常
异常提示:org.hibernate.HibernateException: Unable to get the default Bean Validation factory
* 解决方案:取消bean校验
-->
<property name="javax.persistence.validation.mode">none</property> <!-- 添加映射文件
<mapping >添加映射文件
resource 设置 xml配置文件 (addResource(xml))
class 配置类 (addClass(User.class)) 配置的是全限定类名
-->
<mapping resource="com/jxlg/domain/User.hbm.xml"/>
</session-factory>

  1.1、四个基本配置

      在核心配置文件中,我们首先需要配置的是连接数据库的基本操作,分别为:driver_class、url、username、password

  1.2、与本地线程绑定

    如果你要使用线程绑定的时候,你必须要在核心文件中配置,才能使用getCurrentSession()

  1.3、显示sql语句和格式化sql语句

    这个比较简单

  1.4、自动创建表

    在开发中我们知道,我们做项目的时候一把数据库中的表示首先建立好的,所以在开发中基本用不到,

    在key为hbm2ddl.atuo中有四个属性,通常用update

  1.5、数据库方言配置   

  为不同的数据库,不同的版本,生成sql语句(DQL查询语句)提供依据。我们使用哪一个数据库就要去
  hibernate.properties文件中去找key为hibernate.dialect对应的value值。在选择方言的时候,就选择最短的那个. 

  1.6、映射配置

    我们需要在核心配置文件中添加映射文件

二、Hibernate中的持久化类(javaBean)

  2.1、编写原则   

    提供一个无参数 public访问控制符的构造器
    提供一个标识属性,映射数据表主键字段
    所有属性提供public访问控制符的 set get 方法(javaBean)
    标识属性应尽量使用基本数据类型的包装类型
    不要用final修饰实体 (将无法生成代理对象进行优化)

  2.2、持久化对象的唯一标识OID  

    Java按地址区分同一个类的不同对象.
    关系数据库用主键区分同一条记录
    Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系
    结论: 对象的OID和数据库的表的主键对应。为保证OID的唯一性,应该让Hibernate来为OID赋值

  2.3、区分自然主键和代理主键   

    主键需要具备: 不为空/不能重复/不能改变
      自然主键: 在业务中,某个属性符合主键的三个要求.那么该属性可以作为主键列.
      代理主键: 在业务中,不存符合以上3个条件的属性,那么就增加一个没有意义的列.作为主键.

三、映射文件(*.hbm.xml)

  

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- ORM元数据 表对象关系映射文件
package : 配置该配置文件中类所在的包. -->
<hibernate-mapping package="com.jxlg.domain" >
<!-- class: 配置实体与表的关系
name : 填写实体的完整类名
table: 与实体对应表的名称
dynamic-insert:动态插入 默认值是false
true=>如果字段值为null,不参与insert语句
dynamic-update:动态更新 默认值"false"
true=> 没改动过的属性,将不会生成到update语句中
-->
<class name="User" table="t_user" >
<!-- id: 配置实体与表中 id对应
name: user对象中标识主键的属性名称
column: 主键在表中的列名
length: 列的数据长度
unsaved-value(不常用): 指定主键为什么值时,当做null来处理.
access(强烈推荐不要用):field 那么在操作属性时,会直接操作对应的字段而不是get/set方法
-->
<id name="id" column="id" length="255" >
<!-- generator:主键生成策略
1.increment 数据库自己生成主键. 先从数据库中查询最大的ID值,将ID值加1作为新的主键
2.identity 依赖于数据的主键自增功能
3.sequence 序列,依赖于数据中的序列功能(Oracle).
4.hilo(纯了解,永远用不到) : Hibernate自己实现序列的算法,自己生成主键. (hilo算法 )
5.native 自动根据数据库判断,三选一. identity|sequence|hilo
6.uuid 生成32位的不重复随机字符串当做主键
7.assigned 自己指定主键值. 表的主键是自然主键时使用. -->
<generator class="uuid"></generator>
</id>
<!-- property : 实体中属性与表中列的对应
name : 实体中属性名称
column : 表中列的名称
length : 数据长度
precision: 小数点后的精度
scale: 有效位数
insert(一般不用): 该属性是否加入insert语句.
update(一般不用): 该属性是否加入update语句.
not-null : 指定属性的约束是否使用 非空
unique : 指定属性的约束是否使用 唯一
-->
<!--
type: 表达该属性的类型
可以用三种方式指定属性
java类型 数据库类型指定 Hibernate类型指定
java.lang.String varchar string
-->
<property name="name" column="name" update="true" type="string" ></property>
<property name="password" column="password"></property>
<property name="sal" column="sal" precision="2" scale="3" ></property>
</class>
</hibernate-mapping>

  

  

 

Hibernate(三)之配置文件详解的更多相关文章

  1. [转]hibernate三种状态详解

    本文来自 http://blog.sina.com.cn/u/2924525911 hibernate 三种状态详解 (2013-04-15 21:24:23) 转载▼   分类: hibernate ...

  2. Oracle三个配置文件详解

    先说转自https://www.2cto.com/database/201305/211705.html ORACLE的三个配置文件介绍 在oracle安装目录$HOME/network/admin下 ...

  3. springboot系列(三)配置文件详解

    目录 properties 文件 1.语法 2.优先级 3.自定义数据配置 4.获取自定义数据配置 1.通过prefix获取 yml文件 1.语法 2.优先级 3.自定义数据配置. 4.获取自定义数据 ...

  4. 【JAVAEE学习笔记】hibernate01:简介、搭建、配置文件详解、API详解和CRM练习:保存客户

    今日学习:hibernate是什么 一.hibernate是什么 框架是什么: 1.框架是用来提高开发效率的 2.封装了好了一些功能.我们需要使用这些功能时,调用即可.不需要再手动实现. 3.所以框架 ...

  5. JAVAEE学习——hibernate01:简介、搭建、配置文件详解、API详解和CRM练习:保存客户

    今日学习:hibernate是什么 一.hibernate是什么 框架是什么: 1.框架是用来提高开发效率的 2.封装了好了一些功能.我们需要使用这些功能时,调用即可.不需要再手动实现. 3.所以框架 ...

  6. SaltStack 入门到精通第三篇:Salt-Minion配置文件详解

    SaltStack 入门到精通第三篇:Salt-Minion配置文件详解 作者:ArlenJ  发布日期:2014-06-09 17:52:16   ##### 主要配置设置 ##### 配置 默认值 ...

  7. Hibernate入门核心配置文件和orm元数据配置文件详解

    框架是什么? 框架是用来提高开发效率的 封装了一些功能,我们需要使用这些功能时,调用即可,不用手动实现 所以框架可以理解为一个半成品的项目,只要懂得如何使用这些功能即可 Hibernate是完全面向对 ...

  8. Nginx知多少系列之(三)配置文件详解

    目录 1.前言 2.安装 3.配置文件详解 4.Linux下托管.NET Core项目 5.Linux下.NET Core项目负载均衡 6.Linux下.NET Core项目Nginx+Keepali ...

  9. 【Hibernate】Hibernate系列3之配置文件详解

    配置文件详解 3.1.配置文件 连接池性能优化:http://www.cnblogs.com/xdp-gacl/p/4002804.html

  10. spring4配置文件详解

    转自: spring4配置文件详解 一.配置数据源 基本的加载properties配置文件 <context:property-placeholder location="classp ...

随机推荐

  1. 简单说说Markdown语法

    # 简单说说 MarkDown 语法 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr ...

  2. 1305 Pairwise Sum and Divide

    1305 Pairwise Sum and Divide 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 有这样一段程序,fun会对 ...

  3. Unity安装问题

    在VS2012中,使用NuGet安装Unity.MVC4的时候,提示以下错误: 'Unity' already has a dependency defined for 'CommonServiceL ...

  4. 【openstack N版】——镜像服务glance

    一.openstack镜像服务glance 1.1 glance介绍 glance主要是由三部分组成 glance-api:接收云系统镜像的创建,删除,读取请求,类似nova-api,通过其他模块(g ...

  5. 获取LayoutInflater对象的方法和inflate方法的一些参数问题

    一.获取LayoutInflater的三种方法 1. LayoutInflater layoutInflater = (LayoutInflater) MainActivity.this.getSys ...

  6. mfc---右键蹦出菜单

    WM_CONTEXTMENU CMenu menu; menu.LoadMenu(IDR_MENU_POPUP); menu.GetSubMenu(0)->TrackPopupMenu(TPM_ ...

  7. VisualStudio2017下ASP.NET CORE的TagHelper智能提示解决办法

    之前在VS2017RC中就发现该问题,安装了依赖,但是前段一直点不出来asp-for,后来查了发行说明, 才知道在VS2017rc中暂时无法解决,所以一直等到VS2017正式版的发布,急冲冲的装好, ...

  8. Java使用Schema模式对XML验证

    XML允许创作者定义自己的标签,因其灵活的特性让其难以编写和解析.因此必须使用某种模式来约束其结构.目前最流行的这种模式有两种:DTD和SCHEMA,而后者以其独特的优势即将取代DTD模式,目前只是过 ...

  9. Eclipse插件的各种安装方法

    这篇文章我们总结下安装Eclipse的各种方法,首先一下的步骤都是在版本为“Kepler Service Release 1”的Eclipse下完成的.如果你的Eclipse版本不是"Kep ...

  10. Java设计模式之《代理模式》及应用场景

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6525527.html 代理模式算是我接触较早的模式,代理就是中介,中间人.法律上也有代理, ...