介绍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方式配置映射,如下所示:

  1. <span style="font-size:12px;"><?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping>
  6. <class name="com.liang.hibernate.User" >
  7. <id name="id">
  8. <!-- 算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成GUID -->
  9. <generator class="uuid"></generator>
  10. </id>
  11. <property name="name"></property>
  12. <property name="password"></property>
  13. <property name="createTime" type="date"></property>
  14. <property name="expireTime" type="date"></property>
  15. </class>
  16. </hibernate-mapping></span>

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

1、加入hibernate annotion支持包

*hibernate-annotations.jar

      *hibernate-commons-annotations.jar

      *ejb3-persistence.jar

如图所示:

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

  1. package com.liang.hibernate;
  2. import java.util.Date;
  3. import javax.persistence.Column;
  4. import javax.persistence.Entity;
  5. import javax.persistence.GeneratedValue;
  6. import javax.persistence.GenerationType;
  7. import javax.persistence.Id;
  8. import javax.persistence.Temporal;
  9. import javax.persistence.TemporalType;
  10. @Entity //不写Table默认为user,@Table(name="t_user")
  11. public class User {
  12. @Id //主键
  13. @GeneratedValue(strategy=GenerationType.AUTO)//采用数据库自增方式生成主键
  14. //JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.
  15. //TABLE:使用一个特定的数据库表格来保存主键。
  16. //SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
  17. //IDENTITY:主键由数据库自动生成(主要是自动增长型)
  18. //AUTO:主键由程序控制。
  19. private int id;
  20. private String name;
  21. private String password;
  22. @Temporal(TemporalType.DATE)//生成yyyy-MM-dd类型的日期
  23. private Date createTime;
  24. @Temporal(TemporalType.DATE)//生成yyyy-MM-dd类型的日期
  25. private Date expireTime;
  26. public int getId() {
  27. return id;
  28. }
  29. public void setId(int id) {
  30. this.id = id;
  31. }
  32. @Column(name="name",unique=true,nullable=false) //字段为name,不允许为空,用户名唯一
  33. public String getName() {
  34. return name;
  35. }
  36. public void setName(String name) {
  37. this.name = name;
  38. }
  39. public String getPassword() {
  40. return password;
  41. }
  42. public void setPassword(String password) {
  43. this.password = password;
  44. }
  45. public Date getCreateTime() {
  46. return createTime;
  47. }
  48. public void setCreateTime(Date createTime) {
  49. this.createTime = createTime;
  50. }
  51. public Date getExpireTime() {
  52. return expireTime;
  53. }
  54. public void setExpireTime(Date expireTime) {
  55. this.expireTime = expireTime;
  56. }
  57. }

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

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

  1. <span style="font-size:12px;"><!DOCTYPE hibernate-configuration PUBLIC
  2. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  3. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  4. <hibernate-configuration>
  5. <session-factory>
  6. <!-- 驱动 -->
  7. <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  8. <!-- 数据库URL -->
  9. <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
  10. <!-- 数据库用户名 -->
  11. <property name="hibernate.connection.username">root</property>
  12. <!-- 数据库密码 -->
  13. <property name="hibernate.connection.password">123456</property>
  14. <!-- mysql的方言 -->
  15. <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  16. <!-- 映射文件 -->
  17. <!--  <mapping resource="com/liang/hibernate/User.hbm.xml"/>  -->
  18. <!-- 由原来的映射文件,改成实体类 -->
  19. <mapping class="com.liang.hibernate.User"/>
  20. </session-factory>
  21. </hibernate-configuration></span>

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

  1. <span style="font-size:12px;">package com.liang.hibernate;
  2. import org.hibernate.cfg.AnnotationConfiguration;
  3. import org.hibernate.cfg.Configuration;
  4. import org.hibernate.tool.hbm2ddl.SchemaExport;
  5. /**
  6. * 将hbm生成ddl
  7. * @author liang
  8. *
  9. */
  10. public class ExportDB{
  11. public static void main(String[]args){
  12. //默认读取hibernate.cfg.xml文件
  13. Configuration cfg = new AnnotationConfiguration().configure();
  14. SchemaExport export = new SchemaExport(cfg);
  15. export.create(true, true);
  16. }
  17. }</span>

数据库生成表如图所示:

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

  1. package com.liang.hibernate;
  2. import java.util.Date;
  3. import org.hibernate.Session;
  4. import org.hibernate.SessionFactory;
  5. import org.hibernate.cfg.AnnotationConfiguration;
  6. import org.hibernate.cfg.Configuration;
  7. public class Client {
  8. public static void main(String[]args){
  9. //读取hibernate.cfg.xml文件
  10. Configuration cfg = new AnnotationConfiguration().configure();
  11. //建立SessionFactory
  12. SessionFactory factory =cfg.buildSessionFactory();
  13. //取得session
  14. Session session = null;
  15. try{
  16. //开启session
  17. session = factory.openSession();
  18. //开启事务
  19. session.beginTransaction();
  20. User user = new User();
  21. user.setName("jiuqiyuliang");
  22. user.setPassword("123456");
  23. user.setCreateTime(new Date());
  24. user.setExpireTime(new Date());
  25. //保存User对象
  26. session.save(user);
  27. //提交事务
  28. session.getTransaction().commit();
  29. }catch(Exception e){
  30. e.printStackTrace();
  31. //回滚事务
  32. session.getTransaction().rollback();
  33. }finally{
  34. if(session != null){
  35. if(session.isOpen()){
  36. //关闭session
  37. session.close();
  38. }
  39. }
  40. }
  41. }
  42. }

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

转:http://blog.csdn.net/jiuqiyuliang/article/details/40153905

(Hibernate进阶)Hibernate基本映射(三)的更多相关文章

  1. Hibernate学习2--对象的三种状态以及映射关系的简单配置

    上篇hibernate的博客总体简单梳理了对象持久化的一些思想以及hibernate中对象持久化化的方法,下面说说对象持久化过程的三种状态. 一.hibernate缓存的概念 1.session与缓存 ...

  2. Hibernate初探之单表映射——第二章:Hibernate进阶

    第二章:Hibernate进阶 1.hibernate.cfg.xml常用配置 2.session 简介 3.transaction简介 4.session详解 5.对象关系映射常用配置 1.hibe ...

  3. (Hibernate进阶)Hibernate映射——一对一双向关联映射(六)

    上一篇博客我们介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身份证端加载人得信息.如图所示: 关键原因在于对象模型具有方向性: 单向: ...

  4. (Hibernate进阶)Hibernate系列——总结篇(九)

    这篇博文是hibernate系列的最后一篇,既然是最后一篇,我们就应该进行一下从头到尾,整体上的总结,将这个系列的内容融会贯通. 概念 Hibernate是一个对象关系映射框架,当然从分层的角度看,我 ...

  5. (Hibernate进阶)Hibernate搭建开发环境+简单实例(二)

    hibernate是非常典型的持久层框架,持久化的思想是非常值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和 ...

  6. 【SSH进阶之路】Struts + Spring + Hibernate 进阶开端(一)

    [SSH进阶之路]Struts + Spring + Hibernate 进阶开端(一) 标签: hibernatespringstrutsssh开源框架 2014-08-29 07:56 9229人 ...

  7. hibernate之单表映射

    目录 第一章 Hibernate初识 1-1 课程介绍 1-2 什么是ORM 1-3 Hibnerate简介 1-4 开发前的准备 1-5 编写第一个Hibernate例子 1-6 创建hiberna ...

  8. Hibernate多对多关系映射(建表)

    下边讲述Hibernate多对多关系映射. 多对多关系的表的结构为: 两个实体表,还包含一个关系表,关系表为复合主键,如果要使用Hibernate多对多关系映射,则关系表必须只包含两个字段,如果生成了 ...

  9. (Hibernate进阶)Hibernate基本原理(一)

    在开始学hibernate之前,一直就有人说:Hibernate并不难,无非是对JDBC进一步封装.一句不难,难道是真的不难还是眼高手低? 如果只是停留在使用的层面上,我相信什么技术都不难,看看别人怎 ...

随机推荐

  1. 备忘DES带向量的加密和解密与DES简单加密与解密

    package com.ego.util; import java.security.Key; import java.security.SecureRandom; import java.secur ...

  2. Eclipse中web项目部署至Tomcat步骤

    Eclipse的web工程至Tomcat默认的部署目录是在工程空间下,本文旨在将部署目录改为Tomcat安装目录,并解决依赖包输出问题. 1.在Eclipse中添加Tomcat服务器. 2.将web工 ...

  3. SQL Server Profiler

    一.SQL Profiler工具简介 SQL Profiler是一个图形界面和一组系统存储过程,其作用如下: 图形化监视SQL Server查询: 在后台收集查询信息: 分析性能: 诊断像死锁之类的问 ...

  4. Centos7 修改ssh 默认端口号

    第一步.修改/etc/ssh/sshd_config #Port 22 //这行去掉#号 Port 3600 //将端口号改成3600 第二步:在使用SELinux的系统中,需要修改SELinux 使 ...

  5. Mysql与Oracle区别

    1.Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高. 2.Oracle支持大并发,大访问量 ...

  6. SetForegroundWindow激活窗口

    在Window98以下,如果程序要激活自己,只需要简单的调用SetForegroundWindow即可达到目的.但到Win98以后,再也没有这么简单了. 新建一个简单的工程,加进一个Timer控件,设 ...

  7. nodeJS---express4+passport实现用户注册登录验证

    网上有很多关于passport模块使用方法的介绍,不过基本上都是基于express3的,本文介绍在express4框架中使用passport模块. 前言 passport是一个功能单一,但非常强大的一 ...

  8. vmware12无法打开内核设备“\\.\Global\vmx86”

    vmware12 无法打开内核设备"\\.\Global\vmx86": 系统找不到指定的文件.你想要在安装 VMware Workstation 前重启吗? 打开vmware12 ...

  9. Tips For Your Maya Plugin Development

    (The reason why I write English blog is that I'm trying to improve my written English. The Chinese v ...

  10. OAF_文件系列10_实现OAF将数据资料导出Excel到本地JXL(案例)

    20150729 Created By BaoXinjian