配置Hibernate有2种方式,本文讲的是通过外部配置文件配置的方式


Hibernate核心配置文件

 <?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>
<!--1.配置数据源-->
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:mytest</property>
<property name="connection.username">sys</property>
<property name="connection.password">sys</property>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<!--是否打印Hibernate生成的sql语句-->
<property name="show_sql">true</property>
<!-- 2.引入映射文件 -->
<!-- <mapping package="com.accp.hbm.xml"/> 批量引入 -->
<mapping resource="com/jazz7/hbm/xml/Users.hbm.xml" /><!--逐个引入-->
</session-factory>
</hibernate-configuration>

    Hibernate核心配置文件中主要配置2个东西

        1:数据源,其中各个属性直接看单词字面意思即可;还有Hibernate一些行为设置,比如是否显示生成的sql语句、是否格式化sql语句之类的

        2:引入Hibernate映射文件,可以批量引入以及逐个引入。映射文件一定要在这里引入,否则是没有任何作用的。

Hibernate映射文件

1.最简单的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 1.package的值是此映射文件对应的实体类的包名 -->
<hibernate-mapping package="com.jazz7.entity">
<!-- 2.配置实体类,如果实体类的名称和数据库中的表名称不同的话,则这里需要指定表名table="表名" -->
<class name="Student" table="tbl_Student">
<!-- 3.指定主键,主键需要用id节点指定,和表名一样,如果主键或字段名和实体类中的属性名不同的话,可以使用column属性指定数据库表中的字段名称 -->
<id name="sid" >
<!-- 4.指定主键的生成方式,sequence是以序列的方式生成,还有其他的指定方式,比如increment,自动生成-->
<generator class="sequence" >
<!-- 5.指定已经创建好的序列名称 -->
<param name="sequence">seq_student_id</param>
</generator>
</id>
<!-- 6.普通属性 -->
<property name="sname" />
</class>
</hibernate-mapping>

    Hibernate映射文件主要是将实体类和数据库中的表进行映射匹配,其中有2个注意点

        1:定义主键的时候有多种生成方式,需要根据不同的数据库来分别制定,比如oracle需要用序列,mysql需要用identity。

        2:如果表名或字段名和实体类中定义的不一样的话,需要额外在配置文件中说明。

2.多对一配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.jazz7.entity">
<class name="Emp" table="emp">
<id name="empno" column="empno">
<generator class="increment" />
</id>
<property name="ename" />
<property name="job" />
<property name="mgr" />
<property name="hiredate" />
<property name="sal" />
<property name="comm" />
<!-- 多对一配置 -->
<!-- 需要将实体类中相关基本类型属性改为外键对应的实体类类型 -->
<!-- name指的是此实体类中的对应属性名称 -->
<!-- column指的是外键名称 -->
<!-- class指的是外键对应的实体类 -->
<many-to-one name="dept" column="deptno" class="Dept" />
</class>
</hibernate-mapping>

3.一对多配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.jazz7.entity">
<class name="Dept" >
<id name="deptno">
<generator class="increment" />
</id> <property name="dname" />
<property name="loc" />
<!-- 一对多配置 -->
<!-- cascade的意思是级联操作,比如这里配置了delete,那么删除一的一方的时候,会将此“一”关联的所有的多的一方都删除掉 -->
<!-- inverse的意思是控制反转,这里配置了true,表示将控制权交给另一方,如果是false的话,则表示将控制权交给自己 -->
<!-- lazy的意思是延迟加载,就是如果读取一的一方的数据的时候是否将多的一方的数据也都读出来 -->
<set name="emps" cascade="delete" inverse="true" lazy="extra" >
<!-- 配置主键 -->
<key column="deptno" />
<!-- 配置多的一方的实体类 -->
<one-to-many class="Emp" />
</set>
</class>
</hibernate-mapping>

4.多对多配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.jazz7.entity">
<class name="Student" table="tbl_Student">
<id name="sid" >
<generator class="sequence" >
<param name="sequence">seq_student_id</param>
</generator>
</id>
<property name="sname" />
<!-- 多对多配置 -->
<set name="teachers" table="tbl_teacher_student">
<key column="sid" />
<many-to-many class="Teacher" column="tid" />
</set>
</class>
</hibernate-mapping>

    多对多这种关系比较特殊,它主要用在那种需要将关联关系抽出来放在一个新的表中的场合。

    可能说的不清楚,举个例子吧(共享单车)。

    现在有两个表,一个是单车信息表,一个是用户信息表。

    一个单车可能被多个用户骑过,一个用户也可能骑过多个单车。那么此时,主外键关系就不能满足我们的需求了,我们可以创建一个新的表,“单车_用户关联表”,这个表中只有3个字段,分别是id,单车id,用户id。

    就是将单车和用户的关系抽出来,放在一个新的表中。

Hibernate配置(外部配置文件方式)的更多相关文章

  1. 【转】Hibernate 配置

    转自:http://www.blogjava.net/19851985lili/articles/108128.html 由于Hibernate是为了能在各种不同环境下工作而设计的, 因此存在着大量的 ...

  2. 十八、springboot中hibernate配置sessionFactory访问数据库

    前提 在yml或properties文件中配置数据库与数据库连接池 Hibernate配置 几种方式: 方式一: @Configuration public class HibernateConfig ...

  3. Hibernate配置方式

    Hibernate配置方式 Hibernate给人的感受是灵活的,要达到同一个目的,我们可以使用几种不同的办法.就拿Hibernate配置来说,常用的有如下三种方式,任选其一. 在 hibernate ...

  4. application.properties多环境配置文件、jar包外部配置文件、配置项加密、程序中配置使用

    一.简介 spring boot项目application.properties文件存放及使用介绍 二.方法一多环境配置文件 我们一般都会有多个应用环境,开发环境.测试环境.生产环境,各个环境的配置会 ...

  5. spring+hibernate 配置多个数据源过程 以及 spring中数据源的配置方式

    spring+hibernate 配置多个数据源过程 以及 spring中数据源的配置方式[部分内容转载] 2018年03月27日 18:58:41 守望dfdfdf 阅读数:62更多 个人分类: 工 ...

  6. 基于已构建S2SH项目配置全注解方式简化配置文件

    如果还不熟悉s2sh项目搭建的朋友可以先阅读 eclipse环境下基于tomcat-7.0.82构建struts2项目 eclipse环境下基于已构建struts2项目整合spring+hiberna ...

  7. SpringBoot常用配置,引入外部配置文件信息,热加载

    SpringBoot的配置文件格式 yml规范 SpringBoot的配置文件支持properties和yml,甚至还支持json. 更推荐使用yml文件格式: yml文件,会根据换行和缩进帮助咱们管 ...

  8. JavaWeb配置外部应用的两种方式

    原来我们的项目放到webapps下,现在放到外面,也希望tomcat可以找到它!把应用放到tomcat之外,这就是外部应用了.应用已经不在tomcat中了,这时我们需要在tomcat中配置外部应用的位 ...

  9. 通过外部配置文件做mybatis的基础配置,以及Mapper代理接口的实现

    1.通过外部配置文件做mybatis的基础性的配置. 1)先编写config.properties的文件(做一些动态的配置). 配置的内容如下: jdbc.jdbcUrl=jdbc:oracle:th ...

随机推荐

  1. JMeter 系列之—-01使用

    用Jmeter 做压测,总体与LoadRunner 类似: 一.线程组 1. 线程数 2. 循环次数 单个线程循环次数 3. Ramp-up Period(in seconds) [1]决定多长时间启 ...

  2. 偶遇HiWork,请不要擦肩而过

    非常多朋友可能都不了解HiWork,在这里介绍一下. HiWork是基于云存储的团队即时沟通协作平台,主要针对于中小团队及中小企业的即时沟通,让团队沟通更顺畅.在HiWork平台可即时得知所使用第三方 ...

  3. 《C++ Primer Plus》学习笔记3

    <C++ Primer Plus>学习笔记3 第8章 函数探幽 ============================================================== ...

  4. TPC-H is a Decision Support Benchmark

    TPC-H is a Decision Support Benchmark http://www.dba-oracle.com/t_tpc_benchmarks.htm

  5. 初识JVM虚拟机

    前言: Java语言里负责解释执行字节码文件的是Java虚拟机,即JVM——Java Virtual Machine(Java虚拟机). 执行Java程序的两个步骤: 由Java语言编写的程序需要进过 ...

  6. BZOJ_3172_[Tjoi2013]单词_AC自动机

    BZOJ_3172_[Tjoi2013]单词_AC自动机 Description 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. ...

  7. Excel -- 实用技巧

    一起来学习这45个职场Excel小窍门,轻轻松松提高工作效率,超实用,新技能get! 1.快速填充公式的三种方式 2.最快求和 3.添加文字下面线条的2种方法 4.设置列宽的3种方法 5.以cm为单位 ...

  8. bzoj 4069: [Apio2015]巴厘岛的雕塑【dp】

    居然要对不同的数据写不同的dp= = 首先记得开long long,<<的时候要写成1ll<<bt 根据or的性质,总体思路是从大到小枚举答案的每一位,看是否能为0. 首先对于 ...

  9. bzoj 3122: [Sdoi2013]随机数生成器【BSGS】

    题目要求的是: \[ ...a(a(a(ax+b)+b)+b)+b...=a^nx+a^{n-1}b+a^{n-2}b+...+b\equiv t(mod\ p) \] 后面这一大坨看着不舒服,所以考 ...

  10. div不换行

    三种方法: 1.float <div class="div1">123</div> <div class="div2">45 ...