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 ...
随机推荐
- js 二维码
https://larsjung.de/jquery-qrcode/ 源码 <!DOCTYPE html> <html> <head> <title>j ...
- Java 负载均衡
什么是负载均衡 负载均衡,英文 名称为Load Balance,指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助.通过某种 负载分 ...
- Spring Security调研记录【七】--核心模型与实现
网上有非常多关于Spring Security文章中,都觉得Spring Security(相对于shiro)过于复杂,个人觉得复杂的是Spring Security的官方文档而不是Spring Se ...
- POJ1661 Help Jimmy —— DP
题目链接:http://poj.org/problem?id=1661 Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submi ...
- POJ - 3177 Redundant Paths(边双连通分支)(模板)
1.给定一个连通的无向图G,至少要添加几条边,才能使其变为双连通图. 2. 3. //边双连通分支 /* 去掉桥,其余的连通分支就是边双连通分支了.一个有桥的连通图要变成边双连通图的话, 把双连通子图 ...
- TCP/IP协议与Http协议的区别
转自:https://www.cnblogs.com/xianlei/p/tcpip_http.html TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如 ...
- ASP.NET验证控件CustomValidator客户端验证DropDownList、TextBox
<asp:DropDownList ID="ddlTown" runat="server"> <asp:ListItem Value=&quo ...
- python 面向对象七 property() 函数和@property 装饰符
一.property引入 为了使对象的属性不暴露给调用者和进行属性值检查,设置了访问属性的接口函数,使用函数访问属性,并可以在函数内部检查属性. >>> class Student( ...
- 洛谷 P2762 太空飞行计划问题 【最大权闭合子图+最小割】
--一道难在读入的题. 最后解决方案直接getline一行然后是把读优拆掉放进函数,虽然很丑但是过了. 然后就是裸的最大权闭合子图了,把仪器当成负权点向t连流量为其价格的边,s向实验连流量为实验报酬的 ...
- 矩阵快速幂/矩阵加速线性数列 By cellur925
讲快速幂的时候就提到矩阵快速幂了啊,知道是个好东西,但是因为当时太蒟(现在依然)没听懂.现在把它补上. 一.矩阵快速幂 首先我们来说说矩阵.在计算机中,矩阵通常都是用二维数组来存的.矩阵加减法比较简单 ...