【SSH】之Hibernate

接着上篇博客,这篇博客继续介绍SSH之Hibernate。想先说明一下,本文只是简单的介绍Hibernate,但为什么放在SSH里,是为了后面有一个SSH的整合。所以只是从最基本最简单的原理来讲解Hibernate。

在开始之前我们最好先了解一下Hibernate。其实Hibernate本身是一个独立的、开放源码的对象关系型数据映射框架,它对JDBC进行了轻量级的封装,使得Java程序员可以随心所欲的使用对象编程的思想来操纵数据库。所以,简单的理解,可以把Hibernate理解成是和数据库打交道的框架。

好,现在我们来说如何配置Hibernate.还是按照那三个步骤:jar包、hibernate.cfg.xml主配置文件和*.hbm.xml映射文件。现在,先说配置Hibernate需要哪些jar包。

现在说一下这些jar包的作用:

1、antlr-2.7.6.jar:一个语言转换工具,Hibernate利用它实现HQL到SQL的转换。它可以接受词文法语言面熟,并能产生识别这些语言的语句的程序。

2、c3p0-0.9.1.jar:C3P0连接池

3、commons-collections-3.1.jar:collections Apache的工具集,用来增强Java对集合的处理能力。使用javax.persistence下的Annotation可以不依赖Hibernate的jar包,这样可以切换到其他的ORM框架。

4、dom4j-1.6.1.jar:dom4j xml解析器。是一个java的xml api,类似于jdom。用来读写xml文件的。

5、hibernate3.jar:Hibernate的核心库,这个没什么说的,必须使用的jar包

6、hibernate-jpa-2.0-api-1.0.0.Final.jar:对JPA(Java持久化API)规范的支持。

7、javassist-3.12.0.GA.jar:代码生成工具,Hibernate用它在运行时扩展java类和实现,同cglib

8、jta-1.1.jar:标准的java事务处理接口

9、mysql-connector-java-5.1.5-bin.jar:java连接mysql的数据库驱动

10、slf4j-api-1.6.1.jar:Hibernate使用的一个日志系统

好,下面说主配置文件:hibernate.cfg.xml,这个主配置文件是做什么用的?它里面都配置什么东西呢?下面我们就来具体说一下。Hibernate配置文件主要用于配置数据库连接和Hibernate运行时所需的各种属性。

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>	<pre name="code" class="javascript">         //1.数据库连接信息
	 <property name="dialect">
		 org.hibernate.dialect.MySQL5InnoDBDialect
 	</property>
                //后面要写数据库名字和mysql的用户名和密码
                 <property name="connection.url">jdbc:mysql://localhost:3306/******</property>
		 <property name="connection.driver_class">com.jdbc.mysql.Driver</property>
 		 <property name="connection.username">****</property>
		 <property name="connection.password">****</property> 

	//2.其他配置 (这些有一个共同的特点,就是这些不配是可以的)
        //显示SQL语句
	<property name="show_sql">true</property>
        //自动建表,update的意思就是不要每次都重建(每次都重建,数据就没了)
	 <property name="hbm2ddl.auto">update</property>
        //自动建表
	<!-- <property name="hbm2ddl.auto">create</property> -->

        //3.导入映射文件
	<mapping resource="cn/itcast/oa/domain/User.hbm.xml" />
        //原来role的实体和映射文件写好了,就是映射不到数据库中去,就是因为这个原因Hibernate.cfg.xml配置文件中没有配
	<mapping resource="cn/itcast/oa/domain/Role.hbm.xml" />
	<mapping resource="cn/itcast/oa/domain/Department.hbm.xml" />

</session-factory>
</hibernate-configuration>

看配置文件里的信息注意看这句话:

//1.数据库连接信息
<property name="dialect">
     org.hibernate.dialect.MySQL5InnoDBDialect
</property>

这个是Hibernate主配置文件中配置的mysql方言,那么什么是方言呢?因为不同的数据库,在SQL语句设计上是存在差异的,就好比不同地方的人说不同的方言,Hibernate到哪个数据库哪里就要说哪个数据库的“方言”。而我们要做的就是配置方言选项,告诉Hibernate要说哪里的方言。

那么这个方言我们不会写啊,这个不用记的。去哪里找呢?跟我来。首先打开类型,Ctrl+Shift+t

所有的方言都是有类名的,而且这个方言还有特点,开头是数据库类型,结尾是方言结尾。

mysql*dialect这个就是mysql的方言

所以相对应的Oracle方言就是这样

Sql Server的方言如下:

所以按照这样的方式,选择一个就可以了。

好了,下面说*.hbm.xml映射文件。什么是映射文件呢?映射文件是用来定义Hibernate的持久化类和关系数据库之间的映射。这个映射文件是通过一系列的xml元素的配置,来将持久化类与数据库表之间建立起一一映射,这意味着映射文档是按照持久化类的定义来创建的,而不是表的定义。

所以简单来说,映射文件是Hibernate与数据库进行持久化的桥梁,是设定数据库表与实体类进行关联,让用户以面向对象的方式去操作持久化类,也就是实体bean,而不再是操作数据库表,免去了用户频繁书写sql语句的麻烦。我们以User的映射文件User.hbm.xml为例,代码如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.itcast.oa.domain">

	<class name="User" table="itcast_user">
		<id name="id">
			//这个地方,主键生成策略,我们采用native
            <generator class="native"/>
		</id>
		<property name="loginName" />
		<property name="password" />
		<property name="name" />
		<property name="gender" />
		<property name="phoneNumber" />
		<property name="email" />
		<property name="description" />

		//department属性, 本类与Department的多对一的关系
		//name属性名 ;  class类型,指关联谁  ;column列,指哪个外键
		 <many-to-one name="department" class="Department" column="departmentId"></many-to-one>

		//roles属性,本类与Role的多对多的关系 -->
		//一对多和多对一有一个外键,但是多对多有两个外键 -->
		//所以多对多比多对一多两个字段。多一个Table,多一个外键column -->
		<set name="roles" table="itcast_user_role">
			<key column="userId"></key>
			<many-to-many class="Role" column="roleId"></many-to-many>
		</set>

	</class>
</hibernate-mapping>

其实Hibernate的学习还远不止此,这篇博客只是简单的配置一下Hibernate,但是要继续研究的东西还很多。在SSH整合的时候我们会对主配置文件进行更进一步的划分,等在SSH整合的博客中会详细讲解,敬请期待吧!

时间: 2024-10-12 17:06:33

【SSH】之Hibernate的相关文章

工作笔记3.手把手教你搭建SSH(struts2+hibernate+spring)环境

上文中我们介绍<工作笔记2.软件开发常用工具> 从今天开始本文将教大家如何进行开发?本文以搭建SSH(struts2+hibernate+spring)框架为例,共分为3步: 1)3个独立配置:struts2. Hibernate. Spring 2)2个整合:整合Sring和struts2. 整合Spring和Hibernate 3)资源分类 开发包.软件.框架源码,已经共享到百度网盘:http://pan.baidu.com/s/1o6FkbA6 一.3个独立配置 1.Struts2: 1

SSH之Hibernate的Dao层和Service层

1.Dao层接口 package com.life.dao; import java.util.List; import java.util.Map; import org.hibernate.Query; public interface IDao<T> { /** * 根据id查找实体 * * @param clazz * @param id * @return */ public T find(Class<T> clazz, int id); public void crea

SSH之Hibernate总结篇

Hibernate hibernate 简介: hibernate是一个开源ORM(Object/Relationship Mipping)框架,它是对象关联关系映射的持久层框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库. 为什么要用hibernate(jdbc的缺点): 1.编程的时候很繁琐,用的try和catch比较多 2.jdbc没有做数据的缓存 3.没有做到面向对象编程 4.sql语句的跨平台性很差 JDBC的优点: 效率高! hibernat

SSH学习 Hibernate 多对多

Hibernate 多对多关系的处理,是把两个po类(持久化类)分别建表,这两个是要自己写po类和对应的映射文件,两个表的关系另外再建一张表,这个关系表不需要有对应的类,只需在映射文件写必要的标签即可 注明一点:fetch = "join" fetch参数指定了关联对象抓取的方式是select查询还是join查询,select方式时先查询返回要查询的主体对象(列表),再根据关联外键id,每一个对象发一个select查询,获取关联的对象,形成n+1次查询: 而join方式,主体对象和关联

SSH基于Hibernate eventListener 事件侦听器的操作日志自动保存到数据库

在spring xml配置文件中添加配置,包含:model.listener 在model中增加需要写入数据库对应表的model 在auditLog.xml配置文件中配置自己项目中,需要进行日志记录的model类shortName,以及相关属性. 相关代码如下: 首先spring xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframew

SSH中将hibernate托管给spring获取session的方法

import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.

SSH:Hibernate框架(七种关联关系映射及配置详解)

概念 基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用. 分类 关联关系分为上述七种,但是由于相互之间有各种关系,可以简化,例如:多对一与一对多映射,只是侧重的角度不对而已. 映射技巧 映射技巧是小编写映射文件的过程,总结的经典内容,总共分为四步,咋看不是特别易懂,但是效果很好.下面我们以实例看技巧. (1)写注释 格式为:?属性,表达的是本对象与?的?关系. 解释:在写映射文件之前先写注释,将问号的地方填上相

【SSH】Hibernate:核心类和接口

Hibernate的核心类和接口一共有6个,分别为:Configuration.SessionFactory.Session.Query.Criteria和Transaction.这6个核心类和接口在任何开发中都会用到.通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制.其中Query和Criteria是 hiernate 3中对Session 中find方法的取缔. Configuration : Configuration类服装管理hibernate 的配置信息.Hibernat

【SSH】Hibernate:配置文件解析

hibernate基础配置选项主要围绕着SessionFacotry 展开的.我们可以通过配置文件或编码方式这两种方式来实现hibernate 的基础配置. 配置文件方式:使用configuration类: 在实例化时自动加载CLASSPATHE中hibernate.cfg.xml的配置信息(DBURL/DBUSER/DBPASSWORD). 在实例化时手动加载: configuration cfg=newconfiguration().configure("myHibernate.cfg.xm

【SSH】Hibernate:常用的HQL语句

Hibernate query language 简称HQL,是实际开发中最长的hibernate查询封装模式. HQL提供了更加接近传统SQL语句的查询方法: <span style="font-family:Verdana;font-size:14px;">[select/update/delete-] [from-][where-][groupby-] [having -][order by-]</span> 实体查询: <span style=&q