hibernate学习之三——hibernate核心API

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();
			}
		}
		
	}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值