Hibernate配置(外部配置文件方式)
配置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配置(外部配置文件方式)的更多相关文章
- 【转】Hibernate 配置
转自:http://www.blogjava.net/19851985lili/articles/108128.html 由于Hibernate是为了能在各种不同环境下工作而设计的, 因此存在着大量的 ...
- 十八、springboot中hibernate配置sessionFactory访问数据库
前提 在yml或properties文件中配置数据库与数据库连接池 Hibernate配置 几种方式: 方式一: @Configuration public class HibernateConfig ...
- Hibernate配置方式
Hibernate配置方式 Hibernate给人的感受是灵活的,要达到同一个目的,我们可以使用几种不同的办法.就拿Hibernate配置来说,常用的有如下三种方式,任选其一. 在 hibernate ...
- application.properties多环境配置文件、jar包外部配置文件、配置项加密、程序中配置使用
一.简介 spring boot项目application.properties文件存放及使用介绍 二.方法一多环境配置文件 我们一般都会有多个应用环境,开发环境.测试环境.生产环境,各个环境的配置会 ...
- spring+hibernate 配置多个数据源过程 以及 spring中数据源的配置方式
spring+hibernate 配置多个数据源过程 以及 spring中数据源的配置方式[部分内容转载] 2018年03月27日 18:58:41 守望dfdfdf 阅读数:62更多 个人分类: 工 ...
- 基于已构建S2SH项目配置全注解方式简化配置文件
如果还不熟悉s2sh项目搭建的朋友可以先阅读 eclipse环境下基于tomcat-7.0.82构建struts2项目 eclipse环境下基于已构建struts2项目整合spring+hiberna ...
- SpringBoot常用配置,引入外部配置文件信息,热加载
SpringBoot的配置文件格式 yml规范 SpringBoot的配置文件支持properties和yml,甚至还支持json. 更推荐使用yml文件格式: yml文件,会根据换行和缩进帮助咱们管 ...
- JavaWeb配置外部应用的两种方式
原来我们的项目放到webapps下,现在放到外面,也希望tomcat可以找到它!把应用放到tomcat之外,这就是外部应用了.应用已经不在tomcat中了,这时我们需要在tomcat中配置外部应用的位 ...
- 通过外部配置文件做mybatis的基础配置,以及Mapper代理接口的实现
1.通过外部配置文件做mybatis的基础性的配置. 1)先编写config.properties的文件(做一些动态的配置). 配置的内容如下: jdbc.jdbcUrl=jdbc:oracle:th ...
随机推荐
- Android常见UI组件之ListView(二)——定制ListView
Android常见UI组件之ListView(二)--定制ListView 这一篇接上篇.展示ListView中选择多个项及实现筛选功能~ 1.在位于res/values目录下的strings.xml ...
- c# 把一个匿名对象赋值给一个Object类型的变量后,怎么取这个变量? c# dynamic动态类型和匿名类 详解C# 匿名对象(匿名类型)、var、动态类型 dynamic 深入浅析C#中的var和dynamic
比如有一个匿名对象,var result =......Select( a=>new { id=a.id, name=a.name});然后Object obj = result ;我怎 ...
- Android反复闹钟(每天)的实现
MainActivity例如以下: package cc.cc; import java.util.Calendar; import java.util.Locale; import android. ...
- for循环console输出结果的问题
我想定时打印出一串数字,写好了如下代码 for (var i = 0; i < 5; i++) { setTimeout(function () { console.log(i); ...
- gnu-ucos 增加 bmp 位图显示
昨天又下了点功夫弄了个在tft屏幕上显示bmp位图的. 我选择的是24位tft真彩測显示方式所以也要选择真彩色位图.网上给出的16位位图数组无法使用.在csdn上下载了2个制作工具,一个是c代码的,一 ...
- 笔试题:求第M个到第N个素数之间全部素数
题目描写叙述 令Pi表示第i个素数. 现任给两个正整数M <= N <= 10000,请输出PM到PN的全部素数. 输入描写叙述: 输入在一行中给出M和N,其间以空格分隔. 输出描写叙述: ...
- java语法基础(三)
类和对象 面向对象语言概述 java是一种面向对象的语言,什么是面向对象的语言? 要搞清楚什么是面向对象语言,我们需要相对的了解一下面向过程的语言. java入门阶段,我们又给大家说过一些语言的分类, ...
- Linux进程间通信——使用信号量【转】
本文转载自:http://blog.csdn.net/ljianhui/article/details/10243617 这篇文章将讲述别一种进程间通信的机制——信号量.注意请不要把它与之前所说的信号 ...
- website项目的reference问题
right click on website project--> property pages dll dependency Check the type column,if you have ...
- TP5.x——开启跨域访问
前言 其实很简单,在入口文件的index.php添加几句header就可以了. 代码 public/index.php header("Access-Control-Allow-Origin ...