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 ...
随机推荐
- 【转】Selenium2学习路线
课程大纲:第一部分:基础入门 第一课: SELENIUM2的原理介绍及环境搭建本节课主要讲解SELENIUM2的原理,让大家了解SELENIUM2的发展历程,同时解惑大家对自动化测试中产生的一些误区. ...
- UIButton的图片和文字相对位置调整
通常.假设直接设置UIButton的图片和文字,默认的两者相对位置可能不是我们想要的,那么须要进行调整. 须要用到的函数例如以下: UIEdgeInsetsMake(CGFloat top, CGFl ...
- [转] When to use what language and why
Published by Seraphimsan Oct 13, 2010 (last update: Oct 14, 2010) When to use what language and why ...
- 不等式数列 DP
度度熊最近对全排列特别感兴趣,对于1到n的一个排列,度度熊发现可以在中间根据大小关系插入合适的大于和小于符号(即 '>' 和 '<' )使其成为一个合法的不等式数列.但是现在度度熊手中只有 ...
- Koa2学习(四)POST请求
Koa2学习(四)POST请求 接受请求 POST请求的数据实体,会根据数据量的大小进行分包传送. 当node.js后台收到post请求时,会以buffer的形式将数据缓存起来.Koa2中通过ctx. ...
- SetWindowPos
SetWindowPos函数改变一个子窗口,弹出式窗口或顶层窗口的尺寸,位置和Z序.子窗口,弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序.顶层窗口设置的级别最高,并且被设置为Z序的第一个窗口. ...
- 【140】◀▶ ArcGIS技巧
目录: Add XY Data 图例修改 中文字符左斜体设置 专题图只显示“度” 制作渐变图例 待定 待定 待定 1. 在ArcGIS中插入含有经纬度的*.txt或者*.xls文件等 File> ...
- Ajax 异步查询 ,刷新页面的一部分
调用的过程是,通过Jquery注册单击事件,当单击分部视图中的按钮,就取得分部视图中文本框的值,然后调用$.Get()函数以Get形式调用控制器SearchPeople方法,参数为searchText ...
- 彻底解决SysFader:IEXPLORE.EXE应用程序错误
彻底解决SysFader:IEXPLORE.EXE应用程序错误 转载于 西部e网(weste.net) 最近安装了IE8浏览器玩玩,但是发现一个严重的问题,就是在访问某些页面的时候,经常会出现“ysF ...
- (转)Javascript中console.log()用法
原文地址应该是这个吧:http://my.oschina.net/junn/blog/142728 注意:必须要提前打开IE的开发者模式才能看到输入 否则就会报错. IE下可以这个判断: if (co ...