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(); } } }
相关文章推荐
- Hibernate学习-09:核心API:Configuration、SessionFactory、Session、Transaction、Query、Criteria
- hibernate学习之核心api
- Hibernate学习(二):heibernate核心接口
- Hibernate核心API(理解)
- Hibernate的主要体系结构,基本步骤,核心API,主键生成方式
- hibernate学习之Hibernate API
- hibernate学习之Hibernate API
- Hibernate学习(二):heibernate核心接口
- Hibernate学习——Hibernate的核心接口与类
- Hibernate:核心API
- Hibernate学习07---Hibernate的Session-API实现CRUD
- Hibernate核心API
- Hibernate学习(二):heibernate核心接口
- Hibernate的核心接口学习
- Hibernate核心API(Notes)
- HIbernate学习笔记(二) hibernate对象的三种状态与核心开发接口
- Hibernate API及核心接口简介
- JPA核心API-基于Hibernate实现
- hibernate---核心API-JTA/对象的三种状态
- Hibernate 核心的API