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();}}}
阅读全文
0 0
- hibernate学习之三——hibernate核心API
- hibernate学习之核心api
- Hibernate学习笔记——CoreAPI(Hibernate核心API)
- 【JavaEE—Hibernate】Hibernate核心api
- hibernate学习之Hibernate API
- Hibernate核心API(理解)
- Hibernate核心API
- Hibernate:核心API
- Hibernate 核心的API
- Hibernate核心API
- Hibernate核心API
- hibernate核心API简介
- Hibernate的核心API
- hibernate核心api
- Hibernate入门----核心API
- hibernate核心API介绍
- Hibernate核心API详解
- Hibernate 核心 api
- putty最佳的的颜色配置
- Linux下nautilus:图形与终端的结合
- 深入FFM原理与实践
- Node.js开发环境部署
- js打开新窗体的方式总结
- hibernate学习之三——hibernate核心API
- [YTU]_2636 ( B3 指向基类的指针访问派生类的成员函数)
- 阿里、网易、滴滴共十次前端面试碰到的问题
- nginx中使用pfx格式的ssl证书
- git技巧
- socket通信基础(三)
- 安装GITLAB
- 1.3 VS 2017 SDK的新特性
- 汇编复习Test5