一.总体概述:
Hibernate 的底层也是由JDBC 实现的。是对象/关系映射(Object/Relation Mapping)的解决方案,是一个可以自动的根据xml 完成对象关系映射,并持久化到数据库的开源组件。
对象持久化,把数据保存在永久的存储介质中(数据库)OR/M(object relation mapping)对象关系映射。
POJO 类,就是标准的Java Bean。
二,总的hibernate.cfg.xml配置文件和XXXX.hbm.xml的配置:
hibernate 的系统配置文件的名字一般叫做hibernate.cfg.xml,实体映射文件名为类名.hbm.xml。一般将映射类的xml文件和实体类放在一起。
hibernate.cfg.xml 中设置数据库的连接信息,以及引用的其他映射文件的文件名,和一些其他的设置。这个文件一般放在项目的根目录下。
hibernate.cfg.xml 的写法
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property>
//显示sql 语句
<property name="format_sql">true</property>
//使显示的sql 语句格式化
<property name="dialect">...</property>
//使用的数据库方言信息
<property name="connection.driver_class">....</property>
<!--使用的数据库的驱动-->
<property name="connection.url">....</property>
<!--连接数据库使用的url-->
<property name="connection.username">...</property>
<!--连接数据库的用户名-->
<property name="connection.password">...</property>
<!--连接数据库的密码-->
<property name="xml2ddl.auto">create/update/none</property>
<!--是否自动建表-->
<mapping resource="xxx/xxxx/Xxxxxx.hbm.xml"/>
<!--引入的映射对象的xml 文件的全路径及文件名-->
</session-factory>
</hibernate-configuration>
虽然现在用NetBeans可以自动生成注释等,用不着,但是还是写上,以后参考;
hibernate 的映射类的XXXX.hbm.xml 的写法
对象关系映射
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="XXX.XXX.XXX">
<!--映射类所在的包-->
<class name="Xxxxxx" table="Xxxxx">
<!--将类和数据库的表联系起来-->
<id name="studentId" column="studentId">
<generator class="native"/>
<!--主键生成策略-->
</id>
<property name="XXX" column="XXXX" type="string"/>
<!--类中的属性和字段之间建立联系-->
<property name="homeAddress" column="homeAddress"/>
<property name="schoolAddress" column="schoolAddress"/>
<property name="brithday" column="brithday" type="data"/>
<!--在hibernate 中其他类型可以自动识别只有Data 类型必须指明-->
</class>
</hibernate-mapping>
三.Hibernate中对类关系的处理:
one―to―one关系
在数据库中如何体现,在JavaBean中如何体现,在Hibernate中如何映射。
1、数据库中:一个表的外健对应另一个表的主健,外健要加上Unique约束(外健关联)。或者是两个表共享一个主健,表现为子表中的pk同时引
用了父表的pk作外健而存在(主健关联,子表中的pk和fk为一个字段)。
2、javaBean中:在JavaBean中增加一个属性,即另外一个对象的引用,可以单向也可以双向。
3、在hibernate中:
A、主健映射:都是one-to-one要用foreign生成策略。
以汽车car和发动机Engine(一对一关系)为例:
a、主表Car.hbm.xml的写法
<class name="Car" table="car_pk">
<id name="id" column="id" type="integer">
<generator class="native" />
</id>
<property name="name" column="name" type="string" />
<one-to-one name="engine" class="Engine" cascade="all"/>
</class>
注:cascade="all" 表示增删改查Car对象时都会级联增加、删除和修改Engine对象。级联一定是在主对象的映射文件中
b、附表Engine.hbm.xml的写法
<class name="Engine" table="engine_pk">
<id name="id" column="id" type="integer">
<generator class="foreign">
<param name="property">car</param>
</generator>
</id>
<property name="model" column="model" type="string" />
<one-to-one name="car" class="Car" constrained="true"/>
</class>
注:constrained="true"表示Engine应用了Car的主健作为外健。
B、外健映射(唯一外键):主表中用one-to-one,副表通过property -ref, many-to-one来实现
a、主表Car.hbm.xml的写法
<class name="Car" table="car_fk">
<id name="id" column="id" type="integer">
<generator class="native" />
</id>
<property name="name" column="name" type="string" />
<one-to-one name="engine" class="Engine"
property-ref="car" cascade="save-update"/>
</class>
注:name="engine" property-ref="car"表示engine表引用了car表的主健作为他的外健。
cascade="save-update"表示增,改Car对象时都会级联增加和修改Engine对象。
b、附表Engine.hbm.xml的写法
<class name="Engine" table="engine_fk">
<id name="id" column="id" type="integer">
<generator class="native" />
</id>
<property name="model" column="model" type="string" />
<many-to-one name="car" class="Car" unique="ture" column="carid"/>
</class>
注:unique="ture" column="carid"表示为engine表中的外健carid加上唯一约束,使之一对多关系强制转化为一对一关系。
many-to-one关系
在数据库中如何体现,在JavaBean中如何体现,在Hibernate中如何映射
1、数据库中:一个表的主健对应另一个表的外健。
2、javaBean中:一个对象包含另一个对象的一个引用,另一个对象包含这个对象的一组(集合,用set)引用。
3、在hibernate中:用set,key指定具体列。
我们以订单Order(一方)和订单项Item(多方)为例:
a、Order.hbm.xml的写法:
<class name="Order" table="ec_order">
<id name="id" column="id" type="integer">
<generator class="native" />
</id>
<property name="owner" column="owner" type="string" />
<property name="phone" column="phone" type="string" />
<property name="address" column="address" type="string" />
<set name="items" cascade="all-delete-orphan" inverse="true">
<key column="orderid" />
<one-to-many class="Item" />
</set>
</class>
注:inverse=“true”表示忽略集合一端的变化。
cascade="all-delete-orphan":这个比较麻烦一点,我们先来看看把cascade设为all的情况:在我们调用session.delete(order)时,会删除
order下所有的item,但是如果调用order.getItems().remove(item),然后调用session.update(order)则不会删除此item,只会把 ec_item表
中该条item记录的order_id设置为null。因此,如果想通过order.getItems.remove(item)删除对象,需要在已有级联的基础上加上“delete-
orphan”。
b、Item.hbm.xml的写法
<class name="Item" table="ec_item">
<id name="id" column="id" type="integer">
<generator class="native" />
</id>
<property name="product" column="product" type="string" />
<property name="amount" column="amount" type="integer" />
<many-to-one name="order" class="Order" column="orderid"/>
</class>
many-to-many关系:
以课程和学生为例,student_course_link为链接表,两端都指定.
a.Student.hbm.xml
<hibernate-mapping>
<class name="com.test.Student" table="student" >
<id name="sid" type="string" unsaved-value="null" >
<column name="sid" sql-type="char(32)" not-null="true"/>
<generator class="uuid.hex"/>
</id>
<property name="sname">
<column name="sname" sql-type="varchar(16)" not-null="true"/>
</property>
<set name="course" table="student_course_link" cascade="all" outer-join="false">
<key column="sid"/>
<many-to-many class="com.test.Course" column="cid"/>
</set>
</class>
</hibernate-mapping>
b.Course.hbm.xml
<hibernate-mapping>
<class name="com.test.Course" table="course" >
<id name="cid" type="string" unsaved-value="null" >
<column name="cid" sql-type="char(32)" not-null="true"/>
<generator class="uuid.hex"/>
</id>
<property name="cname">
<column name="cname" sql-type="varchar(16)" not-null="true"/>
</property>
<set name="student" table="student_course_link" lazy="false" cascade="all">
<key column="cid"/>
<many-to-many class="com.test.Student" column="sid"/>
</set>
</class>
</hibernate-mapping>
四.使用基本的Hibernate_API进行编码:
使用hibernate 编程步骤
a、配置环境,加载hibernate 的jar 文件,以及连接数据库连接使用的jar 文件,并配置CLASSPATH 环境变量。
b、写hibernate 所需的配置文件,hibernate.cfg.xml ,Xxxxx.hbm.xml
c、写POJO 类\\就是标准的Java Bean。
d、调用hibernate API。
如何调用hibernathibernateAPI?
e、创建Configuration 对象。(解析配置文件)
Configuration config=newConfiguration().configure();
//configure()方法会在CLASSPATH下寻找hibernate.cfg.xml
f、通过Configuration 创建Session Factory (线程安全的重量级组件)。
SessionFactory sessionFactory=config.buildSessionFactory();
//创建SessionFactory对象
g、通过SessionFactory 创建Session 会话对象。
Session session=sessionFactory.openSession();
//创建Session对象
h、通过Session 取得事务对象。
Transaction trans= session.beginTransaction();
//开始事务(创建一个事物对象)
i、通过session 与数据库进行会话。
session.save(Object o); //增
session.update(Object o); //改
session.saveOrUpdate(Object o) //增加或更新
session.delete(object o); //删
session.get(Class clazz, Serializable id); //根据Id 查找对象,找不到就返回null;
session.load(Class clazz, Serializable id); //根据Id 查找对象,找不到就报异常。
session.createQuery(String sql); //自己拼HQL 语言查找对象返回一个Query 对象。
j、提交操作,结束事务。
Trans.commit();
k、关闭Session
session.close();
分享到:
相关推荐
**总结** Hibernate 作为 ORM 工具,简化了 Java 应用程序与数据库之间的交互,提高了开发效率。理解并熟练掌握 Hibernate 的基本概念、配置、操作及优化策略,对于开发高效、稳定的 Java 应用至关重要。
hibernate基础教程,准确的总结了hibernate的一些基本的用法
<org.hibernate.version>4.2.10.Final</org.hibernate.version> <org.aspectj-version>1.6.10</org.aspectj-version> <org.slf4j-version>1.6.6</org.slf4j-version> </properties> <dependencies> <!-- ...
本教程将详细介绍如何在Hibernate 4.0版本中创建一个基础的“HelloWorld”项目,这个项目将会演示如何配置Hibernate、建立数据库连接以及执行基本的数据操作。 首先,我们需要设置项目的基础结构。由于项目依赖于...
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean> <!-- Hibernate Transaction Manager --> <bean id=...
总结,Hibernate教程涵盖了从基础配置到高级特性的方方面面,旨在帮助开发者高效地利用Hibernate进行数据库操作,提升开发效率,并实现Java应用与数据库之间的无缝交互。通过学习和实践,你将能够自如地运用...
- "01-2018-7-7-Hibernate.pptx"可能是Hibernate基础概念和入门教程,包括基本的配置、实体类、持久化操作等。 这些资料构成了一套完整的Hibernate学习路径,从基础到高级,从配置到实践,对于理解Hibernate的核心...
### Hibernate基础教程知识点详解 #### 一、Hibernate简介(开源O/R映射框架) **Hibernate** 是一个开源的对象关系映射(Object/Relational Mapping,简称 O/R Mapping)框架,它为Java应用提供了使用关系型...
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> </session-factory> </hibernate-configuration> ``` 一旦配置完成,你可以开始创建实体类并使用Hibernate的注解或XML映射...
总结,`hibernate 连接数据库基础源码`的学习涵盖了Hibernate的基本配置、对象关系映射、会话和事务管理、查询操作等方面。深入理解这些概念并实践源码,将对初学者掌握Hibernate及数据库操作大有裨益。在实际项目中...
### 开始冬眠_Hibernate教程 #### ORM简介与出现背景 ORM(Object Relational Mapping,对象关系映射)是一种编程技术,用于将关系型数据库的数据映射到对象上。随着软件开发越来越注重面向对象的设计模式,传统的...
总结来说,这个视频教程将详细讲解如何在SSH项目中使用Maven来管理Struts2、Spring和Hibernate的依赖,以及如何引入和使用Bootstrap。通过学习,开发者可以更高效地构建和维护Java Web项目,提高开发效率。
该教程分为四个部分,全面覆盖了Hibernate的基础知识、核心概念以及高级特性,是Java开发者的宝贵学习资料。 第一部分:Hibernate入门 这部分主要介绍Hibernate的基本概念,包括什么是ORM、为什么要使用Hibernate,...
根据提供的标题、描述、标签及部分内容,我们可以总结出以下与Java、Java EE、Struts2、Spring、Hibernate相关的学习知识点: ### Java基础 - **Java语言特性**:介绍Java的基本语法,包括变量、数据类型、流程...
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property> <property name="connection.password">hcsys</property> <property name="connection.driver_class">...
"hibernate完整小示例"是一个基础的教程,涵盖了配置、实体类、持久化操作和查询等关键点。通过这个示例,开发者能够快速上手Hibernate,了解如何在Java项目中利用其强大功能进行数据库操作。不过,要完全掌握...
总结起来,"hibernate基础demo"是一个关于如何使用Hibernate框架的教程,特别是通过注解的方式来简化数据库操作。它涵盖了Hibernate的基本配置、实体类的注解映射、会话工厂和会话的使用、以及查询和事务管理等核心...
本教程涵盖了Hibernate的基础知识,从安装配置到实体映射,再到查询和事务管理。通过学习,你应该能够掌握如何在实际项目中使用Hibernate来简化数据库操作。继续实践和深入学习,你将在ORM领域更加熟练。祝你在...
<artifactId>hibernate-validator</artifactId> <version>5.2.4.Final</version> </dependency> ``` 2. **被调用方法**: 使用Java注解来定义WebService服务。`@WebService`注解标记一个类为WebService服务,...