`

【SSH进阶之路】Hibernate基本映射(三)

阅读更多

【SSH进阶之路】Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,采用对象化的思维操作关系型数据库。

【SSH进阶之路】Hibernate搭建开发环境+简单实例(二),小编搭建了基本Hibernate的开发环境,并做了一个简单实例,对它的基本原理有了一个理性的认识。

 

这篇博客小编介绍Hibernate的经典内容:对象关系映射。主要介绍映射的基本概念,映射的分类,映射文件。

 

概念

 

ORM(Object Relational Mapping),即对象关系映射。它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。相信很多人跟小编一个毛病,看到概念就头疼,下面小编画了一张图加深理解。

 

 

这张图特别简单:原来,没有Hibernate时,我们需要通过JDBC+手动写SQL语句来操作数据库,现在,有了Hibernate,它将JDBC+SQL进行了高度封装,我们不需要再去和复杂SQL打交道,只要像操作对象一样操作数据库就可以了。

 

ORM的实现思想就是将数据库中表的数据映射成对象,Hibernate可以使我们采用对象化的思维操作关系型数据库。

 

映射文件

 

Hibernate在实现ORM功能的时候主要用到的文件有:
1、 映射类(*.java):它是描述数据库表的结构,表中的字段在类中被描述成属性,将来就可以实现把表中的记录映射成为该类的对象了。

2、映射文件(*.hbm.xml):它是指定数据库表和映射类之间的关系,包括映射类和数据库表的对应关系、表字段和类属性类型的对应关系以及表字段和类属性名称的对应关系等。

3、 hibernate核心配置文件(*.properties/*.cfg.xml):它指定hibernate的一些核心配置,包含与数据库连接时需要的连接信息,比如连接哪种数据库、登录数据库的用户名、登录密码以及连接字符串等。映射文件的地址信息也放在这里。

 

分类

 

 

 

上面的内容看上去挺多,其实特别少,基本映射很简单,我们主要学习关联关系映射,其他几种映射一般不会用,只需要了解即可,用的时候看一下相关资料会做就好。

 

基本映射

 

上篇博文我们已经实现了一个基本映射,是使用XML方式配置映射,如下所示:

<span style="font-size:12px;"><?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>
	<class name="com.liang.hibernate.User" >
		<id name="id">
			<!-- 算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成GUID -->
			<generator class="uuid"></generator>
		</id>
		<property name="name"></property>
		<property name="password"></property>
		<property name="createTime" type="date"></property>
		<property name="expireTime" type="date"></property>
	</class>
</hibernate-mapping></span>

 

除了XML方式配置映射外,还可以通过给类文件添加注解的方式配置映射,在上篇博文的基础之上,我们稍加修改。

 

1、加入hibernate annotion支持包

*hibernate-annotations.jar
*hibernate-commons-annotations.jar
*ejb3-persistence.jar

 

如图所示:

 

2、建立实体类User,采用注解完成映射

package com.liang.hibernate;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity //不写Table默认为user,@Table(name="t_user")
public class User {

	@Id //主键
	@GeneratedValue(strategy=GenerationType.AUTO)//采用数据库自增方式生成主键
	//JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO. 
	//TABLE:使用一个特定的数据库表格来保存主键。 
	//SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。 
	//IDENTITY:主键由数据库自动生成(主要是自动增长型) 
	//AUTO:主键由程序控制。
	private int id;
	
	private String name;
	private String password;
	
	@Temporal(TemporalType.DATE)//生成yyyy-MM-dd类型的日期
	private Date createTime;
	@Temporal(TemporalType.DATE)//生成yyyy-MM-dd类型的日期
	private Date expireTime;
	
	

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	@Column(name="name",unique=true,nullable=false) //字段为name,不允许为空,用户名唯一
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Date getCreateTime() {
		return createTime;
	}
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	public Date getExpireTime() {
		return expireTime;
	}
	public void setExpireTime(Date expireTime) {
		this.expireTime = expireTime;
	}

}

 

注:由于主键改成了自增长,所以数据类型修改成了int类型

 

3、提供hibernate.cfg.xml文件,将实体类User加入到hibernate.cfg.xml配置文件中,完成基本配置

<span style="font-size:12px;"><!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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<!-- 数据库URL -->
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
		<!-- 数据库用户名 -->
		<property name="hibernate.connection.username">root</property>
		<!-- 数据库密码 -->
		<property name="hibernate.connection.password">123456</property>
		<!-- mysql的方言 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		
		<!-- 映射文件 -->
       	<!--  <mapping resource="com/liang/hibernate/User.hbm.xml"/>  -->  
		
		<!-- 由原来的映射文件,改成实体类 -->
		<mapping class="com.liang.hibernate.User"/>
		
	</session-factory>
</hibernate-configuration></span>

 

4、编写工具类ExportDB.java,注解生成ddl,必须采用AnnotationConfiguration类

<span style="font-size:12px;">package com.liang.hibernate;

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

/**
 * 将hbm生成ddl
 * @author liang
 *
 */
public class ExportDB{	
	public static void main(String[]args){
		//默认读取hibernate.cfg.xml文件
		Configuration cfg = new AnnotationConfiguration().configure();
		SchemaExport export = new SchemaExport(cfg);
		export.create(true, true);
	}
}</span>

 

数据库生成表如图所示:



5、建立客户端类Client,添加用户数据到mysql

package com.liang.hibernate;

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

public class Client {
	public static void main(String[]args){
		//读取hibernate.cfg.xml文件
		Configuration cfg = new AnnotationConfiguration().configure();
		//建立SessionFactory
		SessionFactory factory =cfg.buildSessionFactory();
		
		//取得session
		Session session = null;
		
		try{
			//开启session
			session = factory.openSession();
			//开启事务
			session.beginTransaction();
			
			User user = new User();
			user.setName("jiuqiyuliang");
			user.setPassword("123456");
			user.setCreateTime(new Date());
			user.setExpireTime(new Date());
			//保存User对象
			session.save(user);
			
			//提交事务
			session.getTransaction().commit();
			
		}catch(Exception e){
			e.printStackTrace();
			//回滚事务
			session.getTransaction().rollback();
		}finally{
			if(session != null){
				if(session.isOpen()){
					//关闭session
					session.close();
				}
			}
		}
	}
}

 

运行之后,数据库表生成的数据,如下图所示:

 

注解和xml文件的优缺点,网上有很多,有兴趣可以查一下,小编就不再累述了,但是小编认为,学习初期最好不要使用注解,不易于理解Hibernate的原理,并且注解对于程序的可扩展性而言,太差了。

 

下篇博文,我们介绍Hibernate的七种关联关系映射,异常简单,谢谢关注。

分享到:
评论

相关推荐

    ssh框架中的hibernate5

    SSH框架,全称为Spring、Struts和Hibernate,是Java Web开发中常见的三大开源框架的组合。这个框架集合提供了模型-视图-控制器(MVC)的设计模式,使得开发者能够更高效地构建动态网站和企业级应用程序。在这个组合...

    基于SSH的J2EE项目网上书城

    【基于SSH的J2EE项目网上书城】是一个典型的Java Web应用程序,它采用了Spring、Struts2和Hibernate(SSH)三大框架进行开发。这个项目旨在实现一个完整的在线图书销售平台,用户可以在平台上浏览、搜索图书,进行...

    ssh框架实例过程(MyEclipse+struts+spring+hibernate整合)

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个实例是为初学者设计的,通过MyEclipse集成开发环境,详细介绍了如何将这三大框架整合到一个登录工程中。下面将详细...

    传智播客SSH(struts2 spring2.5 hibernate3.5) ppt 课件

    SSH(Struts2 + Spring + Hibernate)是Java开发中一种常见的企业级应用框架组合,它由三个主要组件构成,用于构建高效、灵活的Web应用程序。本篇将详细讲解这三个组件的核心概念、工作原理以及如何在实际项目中进行...

    ssh(spring+strut1.x+hibernate)整合完整教程 附带包

    SSH整合是Java Web开发中的一个经典组合,由Spring、Struts1.x和Hibernate三个框架构成。这个整合提供了全面的企业级应用解决方案,涵盖了控制层、业务层和服务数据持久化层的管理。下面将详细讲解SSH整合的主要知识...

    spring+struts2+hibernate完整项目初学者进阶练习

    【标题】"spring+struts2+hibernate完整项目初学者进阶练习"是一个针对Java初学者设计的进阶项目,旨在帮助他们熟练掌握三大主流Java Web开发框架——Spring、Struts2和Hibernate的集成应用。这个项目是基于MySQL...

    (进阶)SSH框架实现员工部门管理系统

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个项目“(进阶)SSH框架实现员工部门管理系统”旨在利用SSH的优势,构建一个能够管理员工及其所在部门的高效应用。...

    Java SSH 框架整合,学习源码

    Java SSH 框架整合是Java开发中常见的一项技术,主要涉及Spring、Struts和Hibernate这三个开源框架。这些框架在企业级应用开发中扮演着重要角色,分别负责控制层、视图层和持久层的管理。下面将详细介绍SSH框架整合...

    一个简单的SSH框架程序

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个“一个简单的SSH框架程序”很显然是一个基于这些技术构建的应用实例,用于帮助开发者理解并学习如何整合这三种框架...

    SSH1框架集成

    5. **数据库设计**:理解如何根据业务需求设计数据库表结构,并通过Hibernate映射到Java对象。 通过实践SSH1框架集成,初学者不仅能提升Web开发技能,还能深入理解各组件间的协作机制,为后续的进阶学习打下坚实的...

    ssh框架整合demo,经典整合,初学必备

    通过学习和实践这个"ssh框架整合demo",初学者不仅可以掌握SSH的基本用法,还能了解企业级项目的开发流程,为后续的进阶学习打下坚实基础。同时,这个demo也可以作为快速开发新项目的起点,节省了从零开始构建框架的...

    JAVA Struts2+Spring+Hibernate=SSH框架集成教程(ppt+源代码).zip

    SSH(Struts2、Spring、Hibernate)是Java开发中常见的三大开源框架,它们分别负责Web层、业务层和服务层的管理,为开发者提供了强大的功能支持和高效的开发模式。本教程旨在深入解析这三个框架的集成与应用。 ### ...

    SSH例子执行增删改查 刚接触ssh学习的一个很好的例子

    9. **扩展性**:SSH例子不仅限于基本的CRUD操作,还可以扩展到事务管理、权限控制、缓存机制等更复杂的领域,为进阶学习打下基础。 通过这个SSHDemo项目,初学者不仅可以掌握SSH框架的基本用法,还能了解到Web应用...

    struts_hibernate_spring三大开源框架例子

    5. **示例应用**:在"ssh"这个压缩包中,可能包含了使用SSH框架构建的一个简单示例应用,包括Struts的Action类、Hibernate的实体类和映射文件、Spring的配置文件以及相关的JSP页面。开发者可以通过分析这些文件了解...

    三大框架(ssh)实现用户登录

    三大框架SSH,全称为Struts2、Spring和Hibernate,是Java Web开发中广泛使用的三大集成框架,它们分别负责MVC模式中的视图、控制和模型层。本项目实现了SSH框架下的用户登录功能,旨在提供一个学习和实践的例子,...

    SSH(Struts2,Spring,Hibernate)框架gradle项目源码2.0

    SSH框架是Java开发中常用的三大开源框架集合,包括Struts2、Spring和Hibernate。这个"SSH(Struts2,Spring,Hibernate)框架gradle项目源码2.0"是一个基于这三大框架的Gradle构建的Java Web项目。让我们深入探讨这三个...

    ssh需要的包

    在IT行业中,"SSH整合"通常指的是将SSH与其他技术(如Spring、Struts和Hibernate,这三者合称为SSH框架)结合使用,构建基于Java的Web应用程序。下面将详细解释SSH整合开发涉及的知识点,以及压缩包中可能包含的相关...

    java ext ssh andrew iphone 新生学习之路

    SSH是三个Java Web开发框架的简称:Spring负责依赖注入和业务逻辑管理,Struts处理请求和视图,Hibernate则专注于对象关系映射(ORM)。学习SSH可以帮助你构建高效、可维护的大型企业级应用。Spring的核心是IoC...

    JAVA SSH学习帮助文档1

    这个“JAVA SSH学习帮助文档1”涵盖了这三个框架的基础知识、进阶技巧以及常见问题的解决方案,是Java程序员学习SSH集成开发的宝贵资料。 **Struts2** 是一个基于MVC设计模式的Web应用框架,它强调了控制层的分离,...

    一个简单的ssh整合项目

    SSH整合是指将Spring、Struts2和Hibernate这三个流行的开源框架集成到一个项目中,以便实现高效、灵活且可维护的企业级应用开发。标题中的“一个简单的ssh整合项目”表明这是一个面向初学者的基础教程,旨在帮助他们...

Global site tag (gtag.js) - Google Analytics