Hibernate学习入门教程.docx
《Hibernate学习入门教程.docx》由会员分享,可在线阅读,更多相关《Hibernate学习入门教程.docx(68页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、Hibernate学习入门教程开发环境搭建日期:2015-08-11来源:Linux社区 作者:doctorJoe字体:大中小其实一两个月前就在了解Hibernate方面的知识了,但一直以来,都没有好好的总结,而且一直使用的是myeclipse,感觉有些傻瓜式的操作就可以搭建起Hibernate的开发环境,但这样一点都不好,没有理解到Hibernate到底是怎么配置的,所以你今天特使用Eclipse来一步一步搭建Hibernate的开发环境,下面,正式进入正题。在Hibernate中开启日志Hibernate+JUnit测试实体类生成数据库表Hibernate整体理解Hibernate的映射机
2、制 新建一个web项目,名字就随便吧,你喜欢什么名字就什么吧,这是我的截图。引入hibernate的依赖jar包,我使用的是hibernate-release-4.3.10.Final,下载好后解压,打开压缩包下的lib目录下的require文件夹,这是hibernate的所以来的必须的jar包,接下来,在刚才新建的项目里新建一个libs文件夹,将刚才的所说的jar包copy进去,另外,由于我们需要连接MySQL数据库以及使用JUnit测试,将所需的mysql-connector-java-5.0.8-bin.jar和junit-4.5.jar两个jar包引用进去,关于这些jar包,可以在网上
3、搜索。接下来,就是把这些jar包添加到编译环境中去,选中libs下的jar包,右击选择Build Path Add to Build Path,这样就把依赖jar包成功添加进去了。继续往下,我们需要配置最重要的hibernate配置文件hibernate.cfg.xml以及进行日志处理的log4j.properties属性文件:打开上一步解压后的hibernate文件夹,打开projectetc文件夹,将该文件夹下的hibernate.cfg.xml和log4j.properties文件拷贝到项目的src文件夹下,打开hibernate.cfg.xml文件,将session-factory标签
4、中的内容替换成如下的内容: org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql:/hibernatedemo root yzp 这样就配置好了。接下来,要做的就是做开发测试了:在项目的src目录下新建一个实体类包com.joe.entity,在该包下新建一个实体类Student,代码如下:package com.joe.entity;import java.io.Serializable;public class Student implements Serializable /* * */ private s
5、tatic final long serialVersionUID = L; private int id; private String name; private int age; /* * 申明无参构造函数 */ public Student() public int getId() return id; public void setId(int id) this.id = id; public String getName() return name; public void setName(String name) this.name = name; public int getA
6、ge() return age; public void setAge(int age) this.age = age; 对了,说明下,必须申明一个无参的构造函数,这是必须的哦!关键问题来了,我们不是说hibernate是做数据持久化的吗?那说百了就是要和数据库打交道呗,对于Student类,怎么和数据库关联呢,那我们就要说说这对象关系映射文件了Xxx.hbm.xml文件了,其中的Xxx是实体类的名称,那我们的Student.hbm.xml文件的内容就是: 将该文件同样添加到com.joe.entity包下,这样就行了吗?答案当然是否定的,我们还要将这个实体类注册到hibernate.cfg.
7、xml文件中,在session-factory标签下面最后一个property标签后添加: 再往下走,我们来测试一下,在项目下新建一个资源文件夹test,再在test文件下新建测试包com.joe.test,在该包下新建一个StudentTest.java类,并书写如下代码:package com.joe.test;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.boot.registry.Standard
8、ServiceRegistryBuilder;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.tool.hbm2ddl.SchemaExport;import org.junit.Test;import com.joe.entity.Student;public class StudentTest /* * Test是junit4测试的注解方式申明 * 根据对象关系映射文件生成DDL */ Test public void creat
9、eTable() Configuration cfg=new Configuration().configure(); SchemaExport se=new SchemaExport(cfg); se.create(true, true); 当然,也可以使用如下的方式生成DDL,在hibernate.cfg.xml问价中新增: create |update最后,执行StudentTest.java类,选择Run AsJUnit Test, 在控制台可以看到如下的信息,那就证明成功了:当然,也可以打开MySQL ,进一步验证。好了,hibernate的开发环境就算正式搭建完成。更多详情见请继续
10、阅读下一页的精彩内容:在上一篇文章hibernate学习系列-(1)开发环境搭建中,大致总结了hibernate的开发环境的搭建步骤,今天,我们继续了解有关hibernate的知识,先说说这篇文章的主要内容吧:1. Configuration类2. SessionFactory接口3. Session接口4. Transaction接口5. Query和Criteria接口下面就进行分类别地详细说明:Configuration类1. 功能描述:Configuration类负责管理Hibernate的配置信息作并根据配置信息启动Hibernate。2. 详细说明:提供数据库的链接参数;数据库连接
11、池以及对象关系文件的配置,通过Configuration类来加载配置信息并且启动hibernate的应用程序3. hibernate的配置方法:(1):使用hibernate.properties文件进行配置;(2)使用xml文件进行配置,也就是“hibernate.cfg.xml”文件,推荐使用后者SessionFactory接口 SessionFactory实例对应一个数据存储源,我们的应用程序就是通过SessionFactory实例来获取我们的Session对象,SessionFactory的特点有:o (1)线程安全,一个SessionFactory实例可以被应用的多个线程共享o (2
12、)重量级:需要很大的缓存来存储预定义的SQL语句以及映射数据,so,如果我们的应用程序只使用一个数据库,则只需建立一个SessionFactory对象即可Session接口 Session又被称之为持久化管理器,它提供了和持久化相关的CRUD操作,在hibernate中应用最为广泛。Session接口有哪些特点呢?o (1)线程不安全:它代表了我们对数据库的一次操作,因此在开发中应尽量避免多个线程共享同一个Session实例;o (2)轻量级:它的销毁和创建不需要消耗太多资源;o (3)hibernate的一级缓存:存放了当前工作单元加载的一些对象,每一个Session都有自己的缓存,缓存中的
13、对象只能被当前的工作单元所使用;o (4)SessionFactory对象打开:使用完毕后要及时关闭。Transaction接口 Transaction接口是hibernate中的事务接口,它包括:JDBC API、JTA,hibernate在进行持久化操作时(CRUD),必须在事务中加以控制。Query和Criteria接口 Query和Criteria接口是hibernate中的查询接口:o (1)Query接口包装了一个HQL(Hibernate Query Language)查询语句。o (2)Criteria接口比较面向对象,擅长执行动态查询。hibernate的核心接口就大致说到这
14、儿了,下面说一下hibernate的工作机制,先上图:这张图还是比较好理解的,我就不再说明。Session缓存原理为了能够在控制台更好的看到我们的hibernate干了些什么,可以在hibernate.cfg.xml文件中写入如下配置: true true在上一篇中,我们就曾说:Session在hibernate中被称为一级缓存,Session接口的原理:1. 当应用程序调用Session的CRUD方法、以及调用查询接口的list()、iterate()或filter()方法时,如果在Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中2. 当清理缓存时,H
15、ibernate会根据缓存中对象的状态变化来同步更新数据库。Session缓存的作用:1. 减少访问数据库的频率2. 保证缓存中的对象与数据库中的对象同步3. 当缓存中的持久化对象之间存在循环关联关系时,Session会保证不出现访问对象图的死循环,以及由死循环引起的JVM堆栈溢出异常Session缓存的应用:1. 当应用程序调用Transaction的commit方法时,commit方法会清理缓存,然后再向数据库提交事务 ,这里使用一个例子来简单说明一下 目前数据库表中数据有:使用JUnit测试下面的这个方法:Test public void get() Configuration cfg=
16、new Configuration().configure(); StandardServiceRegistryBuilder ssrb=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties(); ServiceRegistry service= ssrb.build(); SessionFactory factory=cfg.buildSessionFactory(service); Session session= factory.openSession(); Transaction tx=session.
17、beginTransaction(); try Student stu=(Student)session.get(Student.class, 1); stu.setName(lisi); mit(); catch (Exception e) / TODO: handle exception tx.rollback(); finally session.close(); 运行时,我们可以在控制台看到:再次看看数据库表中的数据:透过这个案例,我们可以看到调用commit()方法时,hibernate进行了事务提交并把数据永久地保存到了数据库中,变为持久态。1. 当应用程序中显示调用session
18、的flush方法时,通过session的setFlushMode(FlushMode fm)方法来设定清理缓存的时间点。(1)FlushMode.ALWAYS:在session执行查询、commit方法以及flush方法时都会清理缓存;(2)FlushMode.AUTO:在session执行查询、commit方法以及flush方法时都会清理缓存,这与第一种在本质上没有区别;(3)FlushMode.COMMIT:在session执行commit方法以及flush方法时都会清理缓存;(4)FlushMode.MANUAL:只有显示地调用flush方法时才会清理缓存,其他情况都不会清理缓存;ses
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hibernate 学习 入门教程
限制150内