博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate4.x之入门篇
阅读量:6082 次
发布时间:2019-06-20

本文共 7038 字,大约阅读时间需要 23 分钟。

hot3.png

Hibernate作为一个优秀的持久化框架、ORM框架。在日常的Java开发中常常用到。本文主要通过一个简单的例子来介绍下Hibernate4.x的入门知识。

新建一个Java项目,并加入Hibernate要使用的jar包和数据库驱动包,

  1. 建立Hibernate的配置文件
  2. 新建持久化类
  3. 新建持久化类的配置文件
  4. 利用Hibernate API编写测试类

完成后的项目结构大概如下图:

  

 

Hibernate配置文件:hibernate.cfg.xml

1 
2 5
6
7
8
scott
9
tiger
10
oracle.jdbc.driver.OracleDriver
11
jdbc:oracle:thin:@localhost:1521:orcl
12 13
14
15
org.hibernate.dialect.Oracle10gDialect
16 17
18
true
19 20
21
true
22 23
24
update
25 26
27
28 29
30

持久化类:News.java

  

1 package com.yl.hibernate.helloworld; 2  3 import java.sql.Date; 4  5 public class News { 6      7     private Integer id; 8     private String title; 9     private String author;10     11     private Date newsdate;12 13     public Integer getId() {14         return id;15     }16 17     public void setId(Integer id) {18         this.id = id;19     }20 21     public String getTitle() {22         return title;23     }24 25     public void setTitle(String title) {26         this.title = title;27     }28 29     public String getAuthor() {30         return author;31     }32 33     public void setAuthor(String author) {34         this.author = author;35     }36 37     public Date getNewsdate() {38         return newsdate;39     }40 41     public void setNewsdate(Date newsdate) {42         this.newsdate = newsdate;43     }44 45     public News(){}46     47     public News(String title, String author, Date newsdate) {48         super();49         this.title = title;50         this.author = author;51         this.newsdate = newsdate;52     }53 54     @Override55     public String toString() {56         return "News [id=" + id + ", title=" + title + ", author=" + author57                 + ", date=" + newsdate + "]";58     }59     60     61     62 }

持久化类的配置文件:News.hbm.xml

1 
2 4
5
6
7 8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

测试类:HibernateTest.java

1 package com.yl.hibernate.helloworld; 2  3 import java.sql.Date; 4  5 import org.hibernate.Session; 6 import org.hibernate.SessionFactory; 7 import org.hibernate.Transaction; 8 import org.hibernate.cfg.Configuration; 9 import org.hibernate.service.ServiceRegistry;10 import org.hibernate.service.ServiceRegistryBuilder;11 import org.junit.Test;12 13 public class HibernateTest {14 15     @Test16     public void test() {17         //1.创建一个SessionFactory对象18         SessionFactory sessionFactory = null;19         20         //1.1 创建Configuration对象,对应hibernate的基本配置信息和对象关联映射信息21         Configuration configuration = new Configuration().configure();22         //4.0之前的创建方式23         //sessionFactory = configuration.buildSessionFactory();24         25         //1.2  创建一个ServiceRegistry 对象:hibernate4.x新添加的对象。hibernate的任何配置和服务器都需要在该对象中注册后才能有效26         ServiceRegistry serviceRegistry = 27                 new ServiceRegistryBuilder().applySettings(configuration.getProperties())28                                             .buildServiceRegistry();29         30         //1.3 创建SessionFactory对象31         sessionFactory = configuration.buildSessionFactory(serviceRegistry);32         33         //2.创建一个Session对象34         Session session = sessionFactory.openSession();35         //3.开启事务36         Transaction transaction = session.beginTransaction();37         //4.执行保存操作38         News news = new News("Java", "yulei", new Date(new java.util.Date().getTime()));39         session.save(news);40         41         /*News news2 = (News) session.get(News.class, 2);42         System.out.println(news2);*/43         //5.提交事务44         transaction.commit();45         //6.关闭Session46         session.close();47         //7.关闭SessionFactory 对象48         sessionFactory.close();49         50     }51 52 }

----------------------------------------------------以上为代码部分--------------------------------------------------------------------------------------------

----------------------------------------------------以下为对部分代码的解释--------------------------------------------------------------------------------------------

Configuratioin类

  Configuratioin类负责管理Hibernate的配置信息。包括以下内容:
    Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类、数据库Dialect、数据库连接池等(对应hibernate.cfg.xml)文件
    持久化类与数据库表的映射关系(*.hbm.xml文件)
  创建Configuration的两种方式:
    属性文件:Configuration cfg = new Configuration();
    XML文件:Configuration cfg = new Configuration().configuration();
  Configuration的configuration方法还支持带参数的访问:
    File file = new File("simple.xml");
    Configuration cfg = new Configuration().configuration(file);

SessionFactory接口

  针对单个数据库映射关系经过编译后的内存映像,是线程安全的。
  SessionFactory对象一旦构建完毕,即被赋予特定的配置信息
  SessionFactory是生成Session的工厂
  构造SessionFactory很消耗资源,一般情况下一个应用中只初始化一个SessionFactory对象
  Hibernate4新增了一个ServiceRegistry接口,所有基于Hibernate的配置或服务都必须统一向这个ServiceRegistry注册后才能生效
  Hibernate4中创建SessionFactory的步骤:
    

1 //1.1 创建Configuration对象,对应hibernate的基本配置信息和对象关联映射信息 2 Configuration configuration = new Configuration().configure(); 3  4 //1.2 创建一个ServiceRegistry 对象:hibernate4.x新添加的对象。hibernate的任何配置和服务器都需要在该对象中注册后才能有效 5 ServiceRegistry serviceRegistry =  6 new ServiceRegistryBuilder().applySettings(configuration.getProperties()) 7 .buildServiceRegistry(); 8  9 //1.3 创建SessionFactory对象10 sessionFactory = configuration.buildSessionFactory(serviceRegistry);

 

Session接口

  Session是应用程序与数据库之间交互操作的一个单线程对象,是Hibernate运作的中心,所有持久化对象必须在session的管理下才可以进行持久化操作。此对象的生命周期很短。Session对象有一个一级缓存,显示执行flush之前,所有的持久层操作的数据都缓存在session对象处。相当于JDBC中的Connection。
  持久化类与Session关联起来后就具有了持久化的能力
  

  Session类的方法:

    取得持久化对象的方法:get()、load()
    持久化对象的保存、更新和删除:save()、update()、saveOrUpdate()、delete()
    开启事务:beiginTransaction()
    管理Session的方法:isOpend()、flush()、clear()、evict()、close()等

Transaction(事务)

  代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行,即使是只读操作。
  Transaction tx = session.beginTransaction();
  常用方法:
    commit():提交相关联的session实例
    rollback():撤销事务操作
    wasCommitted():检查事务是否提交
Hibernate配置文件的两个配置项
  hbm2ddl.auto:该属性可帮助程序员实现正向工程,即由Java代码生成数据库脚本,进而生成具体的表结构。取值create|update|create-drop|validate
    create:会根据.hbm.xml文件来生成数据库表,但是每次运行都会删除上一次的表,重新生成表,哪怕二次没有任何改变
    create-drop:会根据.hbm.xml文件生成表,但是SessionFactory一关闭,表就自动删除
    update:最常用的属性值,也会根据.hbm.xml文件来生成数据库表,但若.hbm.xml文件和数据库中对应的表的表结构不同,Hibernate将更新数据表结构,但不会删除已有的行和列
    validate:会和数据库中的表进行比较,若.hbm.xml文件中的列在数据表中不存在,则抛出异常
  

  format_sql:是否将SQL转化为格式良好的SQL。取值为true|false

转载于:https://my.oschina.net/yulei1943/blog/1490712

你可能感兴趣的文章
带空格文件名的处理(find xargs grep ..etc)
查看>>
华为Access、Hybrid和Trunk的区别和设置
查看>>
centos使用docker下安装mysql并配置、nginx
查看>>
关于HTML5的理解
查看>>
需要学的东西
查看>>
Internet Message Access Protocol --- IMAP协议
查看>>
Linux 获取文件夹下的所有文件
查看>>
对 Sea.js 进行配置(一) seajs.config
查看>>
第六周
查看>>
解释一下 P/NP/NP-Complete/NP-Hard 等问题
查看>>
javafx for android or ios ?
查看>>
微软职位内部推荐-Senior Software Engineer II-Sharepoint
查看>>
sql 字符串操作
查看>>
【转】Android布局优化之ViewStub
查看>>
网络安全管理技术作业-SNMP实验报告
查看>>
根据Uri获取文件的绝对路径
查看>>
Flutter 插件开发:以微信SDK为例
查看>>
.NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?...
查看>>
边缘控制平面Ambassador全解读
查看>>
Windows Phone 7 利用计时器DispatcherTimer创建时钟
查看>>