一、什么是映射

这里所说的映射就是对象关系映射:将对象数据保存到数据库中,同时可以将数据库数据读入对象中,开发人员只对对象进行操作就可以完成对数据库数据的操作。

二、什么是基本映射

知道了什么是映射,那么我们先来看一下最基本的映射关系——基本映射,即根据表结构创建相应实体类

例如:还是以Mysql数据库为例,进行说明。有如下一张表:

建立相应的实体类:User

  1. public class User {
  2. private String id;
  3. private String username;
  4. public String getId() {
  5. return id;
  6. }
  7. public void setId(String id) {
  8. this.id = id;
  9. }
  10. public String getUsername() {
  11. return username;
  12. }
  13. public void setUsername(String userName) {
  14. this.username = userName;
  15. }
  16. }

对于Hibernate来说,最重要的就是配置文件,即还需要一个User.hbm.xml文件

  1. <hibernate-mapping>
  2. <class name="com.example.hibernate.User" table="t_user">
  3. <id name="id">
  4. <generator class="uuid"/>
  5. </id>
  6. <property name="username"/>
  7. </class>
  8. </hibernate-mapping>

其他部分的代码参照上一篇文章即可。

三、建立User实体类的一些原则

1、实现无参的默认的构造函数

2、提供一个标识

3、建议不要使用fianl修饰实体类

4、建议为实体类生成setter和getter方法

对于第3条建议,如果使用了fianl关键字,那么延迟加载(load)将会无效。具体含义将会在下一篇文章中给出实例。

四、HIbernate主键生成策略

在上面User.hbm.xml配置文件中有一个标签:<generator>。它表示的是主键生成策略。主键生成策略必须配置,用来为该持久化类的实例生成唯一的标识。它有如下几种策略

uuid: 用一个128-bit的UUID算法生成字符串类型的标识符,这在一个网络中是唯一的(使用了IP地址),UUID被编码为一个32位16进制数字的字符串,它的生成是由Hibernate生成,一般不会重复UUID包含:IP地址,JVM的启动时间,系统时间和一个计算器值。

identity:MySql数据库中自增长

Sequence:Oracle数据库自增长

native:根据底层数据库能力选择identity、sequence中的一个。

assigned:手动分配主键.<generator>没有指定时的默认生成策略

foreign:使用另外一个相关联的对象的标示符。通常和<one-to-one>配合使用

五、总结

概括一下Hibernate的基本映射就是:
实体类——对应了——数据库中表、实体类中的属性——对应了——表中字段。

一、Hibernate概述

(一)什么是Hibernate?

Hibernate核心内容是ORM(关系对象模型)。可以将对象自动的生成数据库中的信息,使得开发更加的面向对象。这样作为程序员就可以使用面向对象的思想来操作数据库,而不用关心繁琐的JDBC。所以,Hibernate处于三层架构中的D层(持久层)。

(二)使用Hibernate的优点

1、Hibernate可以使用在java的任何项目中,不一定非要使用在java web项目中。因为Hibernate不需要类似于tomact这些容器的支持,可以直接通过一个main方法进行测试。

2、通过下面的实例,可以发现使用Hibernate可以大大减少代码量。

3、由于使用了Hibernate,代码中不涉及具体的JDBC语句,所以就方便了代码的可移植性。

二、Hibernate开发的环境搭建

(一)Hibernate的环境搭建非常简单,只需要引入Hibernate核心包(单击下载)以及Hibernate依赖包(单击下载)即可。
(二)加入数据库驱动。下面的例子中主要是采用Mysql数据库来演示的,所以在这里引入MysqL的JDBC驱动(点击下载)。
(三)提供核心配置文件hibernate.cfg.xml文件(在src文件夹下即可)。其中的配置如下(针对mysql)
[html] view plain
  1. <!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. <!-- mysql数据库驱动 -->
  7. <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  8. <!-- mysql数据库名称 -->
  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">root</property>
  14. <!-- 方言:为每一种数据库提供适配器,方便转换 -->
  15. <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  16. </session-factory>
  17. </hibernate-configuration>

三、HIbernate第一个实例

 
该实例的目录结构如下
说明:最后一个HIBERNATE3里面包含了所有的需要引用的jar包
1、新建一个普通的java项目,按照上面的步骤引入相关的jar包和配置文件
2、建立User实体类
[java] view plain
  1. import java.util.Date;
  2. public class User {
  3. private String id;
  4. private String username;
  5. private String password;
  6. private Date createTime;
  7. private Date expireTime;
  8. public String getId() {
  9. return id;
  10. }
  11. public void setId(String id) {
  12. this.id = id;
  13. }
  14. public String getUsername() {
  15. return username;
  16. }
  17. public void setUsername(String userName) {
  18. this.username = userName;
  19. }
  20. public String getPassword() {
  21. return password;
  22. }
  23. public void setPassword(String password) {
  24. this.password = password;
  25. }
  26. public Date getCreateTime() {
  27. return createTime;
  28. }
  29. public void setCreateTime(Date createTime) {
  30. this.createTime = createTime;
  31. }
  32. public Date getExpireTime() {
  33. return expireTime;
  34. }
  35. public void setExpireTime(Date expireTime) {
  36. this.expireTime = expireTime;
  37. }
  38. }
2、提供User.hbm.xml文件,完成实体类的映射
[html] view plain
  1. <?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.example.hibernate.User">
  7. <id name="id">
  8. <generator class="uuid"/>
  9. </id>
  10. <property name="username"/>
  11. <property name="password"/>
  12. <property name="createTime"/>
  13. <property name="expireTime"/>
  14. </class>
  15. </hibernate-mapping>

其中的property标签是将要生成是数据库表中的字段,在这里不用关心各个字段是什么类型的。因为Hibernate会根据上面的实体类中属性的类型来决定将来表中字段的类型

3、配置hibernate.cfg.xml文件
[html] view plain
  1. <hibernate-configuration>
  2. <session-factory >
  3. <!-- mysql数据库驱动 -->
  4. <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  5. <!-- mysql数据库名称 -->
  6. <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
  7. <!-- 数据库的登陆用户名 -->
  8. <property name="hibernate.connection.username">root</property>
  9. <!-- 数据库的登陆密码 -->
  10. <property name="hibernate.connection.password">root</property>
  11. <!-- 方言:为每一种数据库提供适配器,方便转换 -->
  12. <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  13. <span style="color:#ff0000;"><mapping resource="com/example/hibernate/User.hbm.xml"/></span>
  14. </session-factory>
  15. </hibernate-configuration>

注意:必须是“/”而不能是“.”。

4、生成表:编写工具类ExoprtDB.java,将hbm生成ddl
[java] view plain
  1. import org.hibernate.cfg.Configuration;
  2. import org.hibernate.tool.hbm2ddl.SchemaExport;
  3. /**
  4. * 将hbm生成ddl
  5. * @author BCH
  6. *
  7. */
  8. public class ExoprtDB {
  9. public static void main(String[] args) {
  10. //默认读取hibernate.cfg.xml文件
  11. Configuration cfr = new Configuration().configure();
  12. SchemaExport export = new SchemaExport(cfr);
  13. export.create(true, true);
  14. }
  15. }

到这里就可以生成User表了,但是如果直接运行ExoprtDB.java文件是不能生成User表的。因为在mysql数据中还没有建立数据库Hibernate-first。所以在mysql控制台中通过create database hibernate-first; use hibernate-first;之后再执行ExoprtDB.java文件就可以生成表了。

5、向表中添加数据
[java] view plain
  1. import java.util.Date;
  2. import org.hibernate.Session;
  3. import org.hibernate.SessionFactory;
  4. import org.hibernate.cfg.Configuration;
  5. public class Client {
  6. public static void main(String[] args) {
  7. //读取配置文件
  8. Configuration cfg = new Configuration().configure();
  9. SessionFactory factory = cfg.buildSessionFactory();
  10. Session session = null;
  11. try{
  12. session = factory.openSession();
  13. //开启事务
  14. session.beginTransaction();
  15. User user = new User();
  16. user.setUsername("用户名");
  17. user.setPassword("123");
  18. user.setCreateTime(new Date());
  19. user.setExpireTime(new Date());
  20. session.save(user);
  21. //提交事务
  22. session.getTransaction().commit();
  23. }catch(Exception e){
  24. e.printStackTrace();
  25. //回滚事务
  26. session.getTransaction().rollback();
  27. }finally{
  28. if(session != null){
  29. if(session.isOpen()){
  30. //关闭session
  31. session.close();
  32. }
  33. }
  34. }
  35. }
  36. }
执行该java文件就可以完成向表中增加数据了,效果如下

(四)总结

通过上面的代码我们可以看出,在代码中没有涉及到任何有关JDBC的代码,作为开发人员只需要写好相应的实体类,然后通过配置就可以实现了表的建立以及向表中实现数据的插入。
在代码中有许多Hibernate的核心对象,例如Configuration、SessionFactory、Session等等。这些内容将在以后介绍。
转自:http://blog.csdn.net/aboy123/article/details/10085635

java的三大框架(三)---Hibernate的更多相关文章

  1. 2018.11.11 Java的 三大框架:Struts+Hibernate+Spring

    ·定义:Java三大框架主要用来做WEN应用.Struts主要负责表示层的显示: Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作): Hibernate主要是数据持久化到数据库. ...

  2. Java三大框架之——Hibernate

    什么是Hibernate? Hibernate是基于ORM(O:对象,R:关系,M:映射)映射的持久层框架,是一个封装JDBC的轻量级框架,主要实现了对数据库的CUPD操作. 注:CRUD是指在做计算 ...

  3. 三大框架之hibernate入门

    hibernate入门   1.orm      hibernate是一个经典的开源的orm[数据访问中间件]框架           ORM( Object Relation Mapping)对象关 ...

  4. 【SSH三大框架】Hibernate基础第一篇:编写第一个Hibernate程序

    接下来这几章节学习的是Hibernate,Hibernate的主要作用就是用来和数据库进行连接,简化了JDBC的操作. 首先,我们创建项目,然后把Hibernate的jar包和sqlserver的驱动 ...

  5. 【SSH三大框架】Hibernate基础第十一篇:对继承映射的操作

    在java中.类之间能够有继承关系.可是在数据库中是没有继承关系的.只是Hibernate是为了把面向对象的关系反映到数据库中.Hibernate为我们提供了3种方案: 第一.一个继承体系放在一张表中 ...

  6. Java_Web三大框架之Hibernate+jsp+HQL分页查询

    分页查询无处不在.使用Hibernate+jsp+HQL进行分页查询. 第一步:编写房屋实体类和House.hbm.xml映射. /* * 房屋实体类 */ public class House { ...

  7. Java_Web三大框架之Hibernate+jsp+selvect+HQL注册用户

    Hibernate比SQL语句简单多了,代码冗余少,切方便简洁明了.下面用Hibernate+jsp+selvect+HQL来实现注册用户. 第一步:编写用户实体类和Users2.hbm.xml映射. ...

  8. Java_Web三大框架之Hibernate配置文件(二)

    下面介绍一下编写Hibernate的配置文件,使用Hibernate操作数据库. 开始部署:下载需要的jar包               下载Hibernate           Hibernat ...

  9. 三大框架 之 Hibernate框架概述(概述、配置、核心API)

    目录 Hibernate框架概述 什么是框架 hibernate简介(JavaEE技术三层架构所用到的技术) hibernate是什么框架 ORM hibernate好处 Hibernate基本使用 ...

随机推荐

  1. Flask源码学习—config配置管理

    自己用Flask做了一个博客(www.hbnnlove.sinaapp.com),之前苦于没有对源码解析的文档,只能自己硬着头皮看.现在我把我自己学习Flask源码的收获写出来,也希望能给后续要学习F ...

  2. XPath

    XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言.XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力. XPath的需要理解的相关概念 ...

  3. linux tar命令的使用

    tar格式,会打包成一个文件,可以对多个目录,或者多个文件进行打包 tar命令只是打包,不会压缩,打包前后大小是一样的 tar命令 -c    //打包 -x    //解压 -f    //指定文件 ...

  4. Java中文件的随机读写

    [例 10-12]模仿系统日志,将数据写入到文件尾部. //********** ep10_12.java ********** import java.io.*; class ep10_12{ pu ...

  5. Unity在PC上创建Excel文档

    NPOI下载连接:http://pan.baidu.com/s/1qWoITRI

  6. C语言程序设计第10堂作业

    一.本次课主要内容: 本次课程学习数组,一种最基本的构造类型,它是一组相同类型数据的有序集合.数组中的元素在内存中连续存放,每个元素都属于同一种数据类型,用数组名和下标可以唯一地确定数组元素: (1) ...

  7. oracle之rownum(伪列)

    整理和学习了一下网上高手关于rownum的帖子: 参考资料:  http://tech.ddvip.com/2008-10/122490439383296.html 和 http://tenn.jav ...

  8. OPENCV配置 C1083: 无法打开包括文件:“opencv2/opencv.hpp”

    本人没实操过C/C++,理论看过不少. 目前出于提升技术的考虑想做OPENCV 配置了2天,总算是配置好了..遇到不少问题. 计算机配置WIN10,用户环境变量配置也郁闷过... JDK等配置方式,配 ...

  9. opendir()函数

    opendir() 函数打开一个目录句柄,可由 closedir(),readdir() 和 rewinddir() 使用. 若成功,则该函数返回一个目录流,否则返回 false 以及一个 error ...

  10. 对一个目录的文件从cp936转换成utf-8

    打开一个文件,确认能够无乱码打开 [xw@localhost work]$ vi NPOSP/src/sjl05.cpp 但是,这里打开的方式是以cp936的编码方式打开的. 编码的选择,记录在~/. ...