一、创建Java工程,新建Lib文件夹,加入Hibernate和数据库(如MySql、Oracle、SqlServer等)的Jar包,创建 hibernate.cfg.xml 文件,并配置,配置项如下:

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory> <!-- 配置连接数据库的基本信息 -->
<property name="connection.username">root</property>
<property name="connection.password"></property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- <property name="connection.url">jdbc:mysql:///mis</property> -->
<property name="connection.url">
<!-- 解决Mysql插入中文乱码的问题 -->
<![CDATA[jdbc:mysql://localhost:3306/mis?useUnicode=true&characterEncoding=utf8]]>
</property> <!-- 配置 hibernate 的基本信息 -->
<!-- hibernate 所使用的数据库方言 -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 执行操作时是否在控制台打印 SQL -->
<property name="show_sql">true</property> <!-- 是否对 SQL 进行格式化 -->
<property name="format_sql">true</property> <!-- 指定自动生成数据表的策略 -->
<property name="hbm2ddl.auto">update</property> <!-- 设置 Hibernate 的事务隔离级别 :读已提交的记录-->
<property name="connection.isolation"></property> <!-- 删除对象后, 使其 OID 置为 null -->
<property name="use_identifier_rollback">true</property> <!-- 配置 C3P0 数据源 -->
<property name="hibernate.c3p0.max_size"></property>
<property name="hibernate.c3p0.min_size"></property>
<property name="c3p0.acquire_increment"></property> <property name="c3p0.idle_test_period"></property>
<property name="c3p0.timeout"></property> <property name="c3p0.max_statements"></property> <!-- 设定 JDBC 的 Statement 读取数据的时候每次从数据库中取出的记录条数 -->
<property name="hibernate.jdbc.fetch_size"></property> <!-- 设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小 -->
<property name="jdbc.batch_size"></property> <!-- 指定关联的 .hbm.xml 文件 -->
<!--
<mapping resource="com/mcs/hibernate/entities/News.hbm.xml" />
<mapping resource="com/mcs/hibernate/entities/Worker.hbm.xml" /> <mapping resource="com/mcs/hibernate/entities/n21/Customer.hbm.xml" />
<mapping resource="com/mcs/hibernate/entities/n21/Order.hbm.xml" />
--> <mapping resource="com/mcs/hibernate/entities/n21/both/Customer.hbm.xml" />
<mapping resource="com/mcs/hibernate/entities/n21/both/Order.hbm.xml" /> </session-factory> </hibernate-configuration>

二、基于外键的一对一映射

1、创建Java实体类

 package com.mcs.hibernate.entities.onetoone.foreign;

 public class Department {

     private Integer departmentId;
private String departmentName; private Manager manager; public Integer getDepartmentId() {
return departmentId;
} public void setDepartmentId(Integer departmentId) {
this.departmentId = departmentId;
} public String getDepartmentName() {
return departmentName;
} public void setDepartmentName(String departmentName) {
this.departmentName = departmentName;
} public Manager getManager() {
return manager;
} public void setManager(Manager manager) {
this.manager = manager;
} }
 package com.mcs.hibernate.entities.onetoone.foreign;

 public class Manager {

     private Integer managerId;
private String managerName; private Department department; public Integer getManagerId() {
return managerId;
} public void setManagerId(Integer managerId) {
this.managerId = managerId;
} public String getManagerName() {
return managerName;
} public void setManagerName(String managerName) {
this.managerName = managerName;
} public Department getDepartment() {
return department;
} public void setDepartment(Department department) {
this.department = department;
} }

2、根据实体类创建对应的 hbm.xml文件

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated -- :: by Hibernate Tools 3.5..Final -->
<hibernate-mapping>
<class name="com.mcs.hibernate.entities.onetoone.foreign.Department" table="DEPARTMENTS">
<id name="departmentId" type="java.lang.Integer">
<column name="DEPARTMENT_ID" />
<generator class="native" />
</id>
<property name="departmentName" type="java.lang.String">
<column name="DEPARTMENT_NAME" />
</property> <!-- 使用 many-to-one 的方式来映射 - 关联关系 -->
<many-to-one name="manager"
class="com.mcs.hibernate.entities.onetoone.foreign.Manager"
column="MANAGER_ID"
unique="true"></many-to-one>
</class>
</hibernate-mapping>
 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated -- :: by Hibernate Tools 3.5..Final -->
<hibernate-mapping>
<class name="com.mcs.hibernate.entities.onetoone.foreign.Manager" table="MANAGERS">
<id name="managerId" type="java.lang.Integer">
<column name="MANAGER_ID" />
<generator class="native" />
</id>
<property name="managerName" type="java.lang.String">
<column name="MANAGER_NAME" />
</property> <!-- 映射 - 的关联关系: 在对应的数据表中已经有外键了, 当前持久化类使用 one-to-one 进行映射 -->
<!--
没有外键的一端需要使用one-to-one元素,该元素使用 property-ref 属性指定使用被关联实体主键以外的字段作为关联字段
-->
<one-to-one name="department"
class="com.mcs.hibernate.entities.onetoone.foreign.Department"
property-ref="manager">
</one-to-one>
</class>
</hibernate-mapping>

注:

  1、在有外键的一端需要使用many-to-one元素,该元素使用 unique="true" 属性来约束唯一值,并指定外键栏 column="MANAGER_ID"

  2、没有外键的一端需要使用one-to-one元素,该元素使用 property-ref 属性指定使用被关联实体主键以外的字段作为关联字段

  3、在保存操作中,建议先保存没有外键列的那个对象. 这样会减少 UPDATE 语句

  4、默认情况下对关联属性使用懒加载,注意可能会出现懒加载异常的问题。

  5、在查询没有外键的实体对象时, 使用的左外连接查询, 一并查询出其关联的对象,并已经进行初始化。

三、基于主键的一对一映射

1、创建Java实体类

 package com.mcs.hibernate.entities.onetoone.primary;

 public class Department {

     private Integer departmentId;
private String departmentName; private Manager manager; public Integer getDepartmentId() {
return departmentId;
} public void setDepartmentId(Integer departmentId) {
this.departmentId = departmentId;
} public String getDepartmentName() {
return departmentName;
} public void setDepartmentName(String departmentName) {
this.departmentName = departmentName;
} public Manager getManager() {
return manager;
} public void setManager(Manager manager) {
this.manager = manager;
} }
 package com.mcs.hibernate.entities.onetoone.primary;

 public class Manager {

     private Integer managerId;
private String managerName; private Department department; public Integer getManagerId() {
return managerId;
} public void setManagerId(Integer managerId) {
this.managerId = managerId;
} public String getManagerName() {
return managerName;
} public void setManagerName(String managerName) {
this.managerName = managerName;
} public Department getDepartment() {
return department;
} public void setDepartment(Department department) {
this.department = department;
} }

2、根据实体类创建对应的 hbm.xml文件

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated -- :: by Hibernate Tools 3.5..Final -->
<hibernate-mapping>
<class name="com.mcs.hibernate.entities.onetoone.primary.Department" table="DEPARTMENTS">
<id name="departmentId" type="java.lang.Integer">
<column name="DEPARTMENT_ID" />
<!-- 使用外键的方式来生成当前的主键 -->
<generator class="foreign" >
<!-- property 属性指定使用当前持久化类的哪一个属性的主键作为外键 -->
<param name="property">manager</param>
</generator>
</id>
<property name="departmentName" type="java.lang.String">
<column name="DEPARTMENT_NAME" />
</property> <!--
采用 foreign 主键生成器策略的一端增加 one-to-one 元素映射关联属性,
其 one-to-one 节点还应增加 constrained=true 属性, 以使当前的主键上添加外键约束
-->
<one-to-one name="manager"
class="com.mcs.hibernate.entities.onetoone.primary.Manager"
constrained="true">
</one-to-one>
</class>
</hibernate-mapping>
 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated -- :: by Hibernate Tools 3.5..Final -->
<hibernate-mapping>
<class name="com.mcs.hibernate.entities.onetoone.primary.Manager" table="MANAGERS">
<id name="managerId" type="java.lang.Integer">
<column name="MANAGER_ID" />
<generator class="native" />
</id>
<property name="managerName" type="java.lang.String">
<column name="MANAGER_NAME" />
</property> <one-to-one name="department"
class="com.mcs.hibernate.entities.onetoone.primary.Department">
</one-to-one>
</class>
</hibernate-mapping>

注:

  1、其中一端会使用另外一端的主键做为主键,另外一端代码采用 foreign 主键生成器策略的一端增加 one-to-one 元素映射关联属性,其 one-to-one 节点还应增加 constrained=true 属性, 以使当前的主键上添加外键约束。 

  2、在保存操作中,建议先保存没有外键列的那个对象. 这样会减少 UPDATE 语句

  3、默认情况下对关联属性使用懒加载,注意可能会出现懒加载异常的问题。

Hibernate的一对一映射的更多相关文章

  1. hibernate中一对一映射

    一.hibernate中一对一映射有两种 1 主键方式,一张表的主键是通过另一张表的主键生成的 2 外键方式,一张表添加外键引用另一张表的主键,并添加唯一unique约束 二.下面进行简单例子,用户和 ...

  2. 9.hibernate的一对一映射

    一.hibernate的一对一按照外键映射 1.创建如下sql脚本: --员工账号表 create table USERS1 ( USERID ) not null, USERNAME ), USER ...

  3. Hibernate(七)一对一映射

    一.创建数据库表 --班级表 create table grade ( gid number primary key, --班级ID gname ), --班级名称 gdesc ) --班级介绍 ); ...

  4. Hibernate表关系映射之一对一映射

    一.数据表的映射关系 在数据库领域中,数据表和数据表之间关系一般可以分为如下几种: 一对一:比如公民和身份证的关系,一个人只有一张身份证,同时每张身份证也仅仅对应一个人! 一对多:比如客户和订单之间的 ...

  5. hibernate笔记--基于主键的单(双)向的一对一映射关系

    上一节介绍的基于外键的一对一映射关系中,在Person表中有一个外键列idCard_id,对应的idCard表的主键id,至于基于主键的一对一映射关系,就是指Person表中抛弃了idcard_id这 ...

  6. hibernate笔记--基于外键的单(双)向的一对一映射关系

    假设我们有两张表,人员信息表Person,和身份信息表IdCard,我们知道每个人只有一个身份证号,所以这里的Person和IdCard表是一一对应的,也就是一对一的映射关系,基于外键的单向一对一映射 ...

  7. Hibernate一对一映射关联

    Hibernate提供了两种一对一映射关联关系的方式: 1)按照外键映射 2)按照主键映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这两种 映 ...

  8. Hibernate中的一对一映射

    1.需求 用户和身份证是一一对应的关系. 有两种对应方式: 用户id作为身份证表的外键,身份证号作为主键: 用户id作为身份证表的主键: 2.实体Bean设计 User: public class U ...

  9. 【Hibernate 3】一对一映射配置

    一.一对一映射简介 一对一关联映射有两种实现策略: 第一种:主键关联,即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联 ...

随机推荐

  1. Tomcat 调优的技巧

    转载:www.cnblogs.com/wangsen, https://mp.weixin.qq.com/s/WrIsOOyR7o4SwSXMT0Zecg 最近,看到一篇讲述 Tomcat 调优的文章 ...

  2. DELPHI 数据库操作

    DELPHI 把数据库中的数据转换成XML格式 function ReplaceString(AString: string): string; begin Result := StringRepla ...

  3. NX二次开发-UFUN导入表达式UF_MODL_import_exp

    最近在做表达式创建,发现UFUN的创建表达式函数UF_MODL_create_exp,UF_MODL_create_exp_tag没有办法创建字符串类型的表达式,例如AA="BB" ...

  4. C++从string中删除所有的某个特定字符【转载】

    转载自https://www.cnblogs.com/7z7chn/p/6341453.html C++中要从string中删除所有某个特定字符, 可用如下代码 str.erase(std::remo ...

  5. Centos7.5安装kafka集群

    Tags: kafka Centos7.5安装kafka集群 Centos7.5安装kafka集群 主机环境 软件环境 主机规划 主机安装前准备 安装jdk1.8 安装zookeeper 安装kafk ...

  6. [转]C# 将类的内容写成JSON格式的字符串

    将类的内容写入到JSON格式的字符串中 本例中建立了Person类,赋值后将类中内容写入到字符串中 运行本代码需要添加引用动态库Newtonsoft.Json 程序代码: using System; ...

  7. JVM内核-原理、诊断与优化学习笔记(三):常用JVM配置参数

    文章目录 Trace跟踪参数 -verbose:gc (打开gc的跟踪情况) -XX:+printGC(打开gc的log开关,如果在运行的过程中出现了gc,就会打印出相关的信息.) -XX:+Prin ...

  8. jquery preventDefault()事件

    定义和用法 preventDefault() 方法阻止元素发生默认的行为(例如,当点击提交按钮时阻止对表单的提交). 语法 event.preventDefault() 参数 描述 event 必需. ...

  9. 拾遗:『rhel6系列的开、关机脚本』

    一.系统脚本位置及含义 /etc/inittab./etc/init/* 存放开关机配置文件 /etc/init.d/* 服务脚本,是一个到/etc/rc.d/init.d/的软链接 /etc/rc. ...

  10. php代码post请求

    <?php /** * 发送post请求 * @param string $url 请求地址 * @param array $post_data post键值对数据 * @return stri ...