一  映射文件User.hbm.xml

定义了持久化类实例是如何存储和加载的,这个文件定义了持久化类和表的映射。

根据映射文件,Hibernate可以生成足够的信息以产生所有的SQL语句,也就是类的实例进行插入,更新,删除和查询所需要的SQL语句。

二  配置文件hibernate.cfg.xml(另外一种格式是hibernate.properities)

Hibernate配置文件:配置数据库连接以及Hibernate运行时所需要的各个属性的值。两种格式的文件是等价的,同时存在的的话xml的会覆盖properties的。

xml相比properties的优势:XML格式的文件更易于修改,配置能力更强;当改变底层应用配置时不需要改变和重新编译代码,由hibernate自动加载,而properties就没有这个优势。

常见配置属性:

   (1) Hibernate JDBC属性

        访问DB,要获得JDBC连接,所以需要有JDBC连接属性:    JDBC驱动, URL, 用户名, 密码, 连接池个数(pool_size)

(2) hibernate.dialect属性

         不同SQL数据库的SQL语言有一定的差异,为了让hibernate对不同的DB产生合适的SQL,需要指定方言。Hibernate会根据JDBC返回的metadata得到正确的方言。

    (3) hibernate.show_sql

         SQL语句输出到控制台,方便调试。

    (4) 映射文件列表

          包含xxx.hbm.xml文件

三: HibernateUtil.java

要启动hibernate需要创建一个SessionFactory对象。SessionFactory是一个线程安全的对象,只能被实例化一次,可以被多个线程共享。使用SessionFactory可以获得Session的一个或多个实例。package cn.jbit.auction.dao;import org.hibernate.Session;import org.hibernate.SessionFactory;

Session是持久化操作的基础,为持久化对象提供CURD操作。

Hibernate在处理session的时候使用延迟加载机制,在真正访问DB的时,才从连接池中获取数据库连接。

Session不是线程安全的,所以这里使用了Thread Local模式。

import org.hibernate.cfg.Configuration;

public class HibernateUtil {
// 初始化一个ThreadLocal对象
private static final ThreadLocal sessionTL = new ThreadLocal(); // Session每个线程有一个session的副本,线程之间不影响。 // configuration 和 SessionFactory都是静态的,只能实例化一次
private static Configuration configuration;
private final static SessionFactory sessionFactory;
static {
try {
configuration = new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
public static Session currentSession() {
//sessionTL的get()方法根据当前线程返回其对应的线程内部变量,
//也就是我们需要的Session,多线程情况下共享数据库连接是不安全的。
//ThreadLocal保证了每个线程都有自己的Session。
Session session = (Session) sessionTL.get();
// 如果session为null,则打开一个新的session
// 如下的标为红色的代码不需要加锁,不需要双重判断,因为session本身是线程局部变量了,不存在多线程的问题。
if (session == null) {
//创建一个数据库连接对象session。
session = sessionFactory.openSession();
// 保存该数据库连接session到ThreadLocal中。
sessionTL.set(session);
}
//如果当前线程已经访问过数据库了,
//则从sessionTL中get()就可以获取该线程上次获取过的数据库连接对象。
return session;
}
/**
* 关闭Session
*/
public static void closeSession(){
Session session = (Session) sessionTL.get();
sessionTL.set(null);
session.close();
}
}

四 编写Dao(Data Access Object)接口

Dao模式是标准的J2EE模式:

(1) 一个Dao接口

(2) 一个实现Dao接口的具体类

(3) 一个Dao工厂类

(4) 数据传递对象,主要是POJO

Dao接口定义了所有的CURD操作。Dao实现类实现了接口中定义的方法。

UserDAOImple.java的的一部分代码如下:

public void  save(User user)
{
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
try {
session.save(user);
tx.commit();
} catch(Exception e) {
tx.rollback;
}
finally {
HibernatenateUtil.closeSession();
}
}

hibernate学习二 基本用法的更多相关文章

  1. Hibernate学习(二)关系映射----基于外键的单向一对一

    事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似.只需要将原来的many-to-one元素增加unique="true"属性, ...

  2. Hibernate学习---QBC_hibernate完整用法

    QBC(Query By Criteria) API提供了检索对象的另一种方式,它主要有Criteria接口.Criterion接口和Expresson类组成,它支持在运行时动态生成查询语句. Hib ...

  3. hibernate学习二(HelloWorld)

    一.建立hibernate配置文件 在工程Hibernate_01_HelloWorld下的src上建立hibernate.cfg.xml,打开hibernate-release-4.3.11.Fin ...

  4. hibernate学习(二)

    hibernate 单向一对多映射 一.数据表设计 数据库名:hibernate5 数据表: ①表名:CUSTOMERS 字段: CUSTOMER_ID  CUSTOMER_NAME ②表名:ORDE ...

  5. Hibernate学习二----------hibernate简介

    © 版权声明:本文为博主原创文章,转载请注明出处 1.hibernate.cfg.xml常用配置 - hibernate.show_sql:是否把Hibernate运行时的SQL语句输出到控制台,编码 ...

  6. Hibernate学习(二补充)关系映射----基于外键的双向一对一

    刚刚写的是基于外键的单向一对一.  那么双向一对一就是在单向一对一的基础上稍微改动就可以了. account.java和account.hbm.xml都不用变动  只要我们小小的变动address.j ...

  7. Hibernate学习笔记(二)

    2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...

  8. 我的hibernate学习记录(二)

    通过上一篇文章我的hibernate学习记录(一)基本上的入门了hibernate,但是,里面还有还多东西是通过迷迷糊糊的记忆,或者说copy直接弄进去的,所以这篇文章就需要对上篇的一些文件.对象进行 ...

  9. Hibernate学习大全

    第1课 课程内容. 6 第2课Hibernate UML图. 6 第3课 风格. 7 第4课 资源. 7 第5课 环境准备. 7 第6课 第一个示例HibernateHelloWorld 7 第7课 ...

随机推荐

  1. MDCC 2014移动开发人员大会參会实录

    MDCC 2014移动开发人员大会參会实录 详细讲什么我就不反复了,各大媒体的编辑整理的比我的好! 我就晒晒图!后面有惊喜哦! 会场地点:早上七点多.天色有点暗,主要是阴天的原因. watermark ...

  2. weblogic中部署项目报错org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken .

    原因: 原因是weblogic要查找自己的antlr,和lib下面的antlr包冲突.... 解决方法: 在weblogic.xml添加 <container-descriptor>    ...

  3. vue2.0 自定义 生成二维码(QRCode)组件

    1.自定义 生成二维码组件 QRCode.vue <!-- 生成二维码 组件 --> <template> <canvas class="qrcode-canv ...

  4. run kubernetes

    use kubeadm in lab only,,, do not use it in production      install docker 1.12.6 -..   please noted ...

  5. Citrix_XenServer-6.1安装过程详解(转)

    本次为使用VirtualBox虚拟机过安装测试机过程,我们在使用Vm(无论是Vbox还是VMware等)我们的CPU都必须可支持Intel-V或AMD-V,并且在VM软件设置和BIOS设置开启虚拟化支 ...

  6. Fedora21 安装视频播放解码器

    12 12月 2014年12月12日 Posted by 涛儿 2 首先启用RPM Fusion软件源: sudo rpm -ivh http://download1.rpmfusion.org/fr ...

  7. css3背景及字体渐变

    1.背景渐变: .linear { width: 100%; FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,sta ...

  8. source insight 配置小记

    0/ Alt + T 打开 Document Options,设置字体,添加 C++ 类型文件 .cc , 删除 Plain txt 类型以避免添加 .txt 文件 1/ Alt + F12 切换函数 ...

  9. EasyDarwin流媒体服务器实现关键帧推送功能

    -本篇由团队成员Fantasy供稿! 功能背景 随着社会进步,人们对产品体验要求越来越高.EasyDarwin也不例外.为了能满足用户对链接服 后看到画面时间(也就是我们经常看到的起播时间)短的要求, ...

  10. eacharts 根据后台数据生成柱状图

    说明:开发环境vs2012 ,asp.net mvc4项目,c#语言 1.效果图 2.HTML 前端代码 <%@ Page Language="C#" AutoEventWi ...