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 ...
随机推荐
- iOS学习之动画效果的实现
// // ViewController.m // UI-动画练习 // // Created by jzq_mac on 15/7/22. // Copyright (c) 2015年 jz ...
- VUE组件如何与iframe通信问题
vue组件内嵌一个iframe,现在想要在iframe内获取父vue组件内信息,由于本人技术有限,采用的是H5新特性PostMessage来解决跨域问题. postMessage内涵两个API: on ...
- Redis管理key命令
1 DEL key该命令用于在 key 存在时删除 key. 2 DUMP key 序列化给定 key ,并返回被序列化的值. 3 EXISTS key 检查给定 key 是否存在. 4 EXPIRE ...
- Android不刷机下的app2sd方法(dex cache占空间解决篇)
抱着5年的HTC G7这个古董,一直没有想法去换换. 近期微信.支付宝什么的apk应用都開始走程序巨型化,一次性就来个50MB的空间占用,让还是Android 2.2的手机怎样吃的消? 看看100多M ...
- 2016/4/26 sublime text 2 版本 遇到的问题及解决方法
1.汉化:下载汉化包 .打开程序Preference下的浏览包文件夹.将解压的程序包粘贴进包文件夹2.破解:标题栏上面有带(unregistered)表示还没有注册: 打开HELP→Enter lic ...
- NSString字符串截取方法
1.字符串 1> 字符串比较 NSString *a = @“hello”; NSString *b = [NSString stringWithFormat:@hello”]; if (a = ...
- C# mouse keyboard monitor
/*********************************************************************************** * C# mouse keyb ...
- Spring事物注意事项
一.尽量用注解声明事务 过去开发喜欢用tx:advice+aop命名空间方式来配置事务,一次配置对满足切点规则的方法永久生效.但也可能因此导致事务滥用,在不需要用到事务的地方用了会影响系统的并发性能. ...
- NPU 2015年陕西省程序设计竞赛网络预赛(正式赛)F题 和谐的比赛(递推 ||卡特兰数(转化成01字符串))
Description 今天西工大举办了一场比赛总共有m+n人,但是有m人比较懒没带电脑,另外的n个人带了电脑.不幸的是,今天机房的电脑全坏了只能用带的电脑,一台电脑最多两人公用,确保n>=m. ...
- bzoj3389
3389: [Usaco2004 Dec]Cleaning Shifts安排值班 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 367 Solved: ...