hibernate学习之三——hibernate核心API

来源:互联网 发布:保定网络优化公司 编辑:程序博客网 时间:2024/06/03 07:08

1. Configuration
(1) Configuration  类负责管理 Hibernate  的配置信息 , 包括如下内容:
1) Hibernate 运行的底层信息:数据库的 URL、用户名、密码、JDBC 驱动类,数据库 Dialect,数据库连接池等(对应 hibernate.cfg.xml 文件)

2) 持久化类与数据表的映射关系(*.hbm.xml 文件)
3) 该类的全名: org.hibernate.cfg.Configuration

(2)创建 Configuration  的两种方式

//1,属性文件propertiesConfiguration 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");//根据解析对象获取sessionFactorySessionFactory 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();}}}




原创粉丝点击