您的位置:首页 > 编程语言 > Java开发

hibernate学习之三——hibernate核心API

2017-06-09 11:46 274 查看


1. Configuration

(1) Configuration  类负责管理 Hibernate  的配置信息 , 包括如下内容:

1) Hibernate 运行的底层信息:数据库的 URL、用户名、密码、JDBC 驱动类,数据库 Dialect,数据库连接池等(对应 hibernate.cfg.xml 文件)


2) 持久化类与数据表的映射关系(*.hbm.xml 文件)

3) 该类的全名: org.hibernate.cfg.Configuration


(2)创建 Configuration  的两种方式



//1,属性文件properties
Configuration config=new Configuration();
//2,xml文件
//解析配置文件
//2.1,默认解析hibernate.cfg.xml文件
Configuration conf = new Configuration().configure();
//2.2,指定解析文件
Configuration conf=new Configuration().configure("hibernate.cfg.xml");

2. SessionFactory

Configuration 对 象 根 据 当 前 的 配 置 信 息 生 成 SessionFactory 对 象 。

SessionFactory 对象一旦构造完毕,即被赋予特定的配置信息(SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的 SQL 语句。同时,SessionFactory 还负责维护 Hibernate 的二级缓存) 。










Configuration conf=new Configuration().configure("hibernate.cfg.xml");
//根据解析对象获取sessionFactory
SessionFactory sessionFactory=conf.buildSessionFactory();
    /**
     *
说明:
1) SessionFactory 是线程安全的。
2) 构造 SessionFactory 很消耗资源,一般情况下一个应用中只初始化 一个SessionFactory 对象。
3) SessionFactory 是生成 Session 的工厂:
Session session = sessionFactory.openSession();
     */
3. Session

3.1. Session  概述

Session  是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate  运作的中心,所有持久化对象必须在 session  的管理下才可以进行持久化操作。此对象的生命周期很短。Session 中有一个缓存,显式执行 flush()方法之前,所有的持久层操作的数据都缓存在 session 对象处。 (相当于 JDBC 中的 Connection) 。一般一个业务操作使用一个 Session。

Session 是线程不安全的,一般是一次业务操作使用一个 Session



3.2. Session  常用方法



package com.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.bean.User;
import com.util.HibernateUtil;

public class SessionApi {

private static SessionFactory sessionFactory = HibernateUtil.getSessionFactory();

public static void save(){
//1,获取session对象
Session session = sessionFactory.openSession();
//2,开启事务
session.beginTransaction();

User user = new User();
user.setUid("5");
user.setName("xiaoming");
user.setAge(20);
//3,调用save方法
session.save(user);
//4,提交事务
session.getTransaction().commit();
//5,关闭资源
session.close();
}

public static void update(){
Session session = sessionFactory.openSession();
session.beginTransaction();
User user = new User();
user.setUid("5");
user.setName("xiaohong");

session.update(user);
session.getTransaction().commit();
session.close();
}

//存在就更新,不存在插入
public static void saveOrUpdate(){
Session session = sessionFactory.openSession();
session.beginTransaction();
User user = new User();
//	user.setUid(4);
//	Hibernate: select user_.Uid, user_.Name as Name0_, user_.Age as Age0_ from user user_ where user_.Uid=?
//			Hibernate: update user set Name=?, Age=? where Uid=?
user.setUid("6");
//	Hibernate: select user_.Uid, user_.Name as Name0_, user_.Age as Age0_ from user user_ where user_.Uid=?
//			Hibernate: insert into user (Name, Age, Uid) values (?, ?, ?)
user.setName("dada");
user.setAge(11);

session.saveOrUpdate(user);
session.getTransaction().commit();
session.close();
}

public static void query(){
//1,获取session对象
Session session = sessionFactory.openSession();
//2,调用load,get方法
//bean.class,主键id的值 String类型 bean类id也要String
//Object obj = session.load(User.class, "1");
Object obj = session.get(User.class, "1");

System.out.println("------使用obj的分割线-------");
System.out.println(obj);
//load方法使用时才加载 延迟加载
//------使用obj的分割线-------
//Hibernate: select user0_.Uid as Uid0_0_, user0_.Name as Name0_0_, user0_.Age as Age0_0_ from user user0_ where user0_.Uid=?
//User [uid=1, name=dongdong, age=20]

//get方法 即时加载
//Hibernate: select user0_.Uid as Uid0_0_, user0_.Name as Name0_0_, user0_.Age as Age0_0_ from user user0_ where user0_.Uid=?
//------使用obj的分割线-------
//User [uid=1, name=dongdong, age=20]

session.close();
}

public static void delete(){
Session session = sessionFactory.openSession();
session.beginTransaction();
User user = new User();
user.setUid("3");
session.delete(user);
session.getTransaction().commit();
session.close();

}
public static void main(String[] args) {

//save();
//update();
//saveOrUpdate();
//query();
delete();
}
}

4. Transaction

Transaction 接口是 Hibernate 的数据库事务接口,代表一次原子操作,它具有数据库事务(mysql事务概念)的概念,它对底层的事务接口做了封装,底层事务接口包括:

1) JDBC API

2) JTA(Java Transaction API)

3) CORBA(Common Object Request Broker Architecture) API



public static void update() {
/*
获得事务对象: Transaction tx = session.beginTransaction();
常用方法:
1) commit():提交相关联的 session实例
2) rollback():撤销事务操作
3) wasCommitted():检查事务是否提交
*/
User user = new User();
user.setUid("5");
user.setName("xiaohong");
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.update(user);
tx.commit();
} catch (HibernateException ex) {
ex.printStackTrace();
tx.rollback();
} finally {
if (session != null) {
session.close();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java hibernate