Hibernate中重要的api

  • Configuration
  • SessionFactory
  • Session(重点)
  • Transaction

  

  在Dao层中UserDao.java使用Hibernate向数据库中添加注册的用户

    public void addUser(User user) {

        //使用Hibernate
//得到配置信息
Configuration config = new Configuration().configure();
//创建sessionFactiory对象
SessionFactory sessionFactory = config.buildSessionFactory();
//获取session
Session session = sessionFactory.openSession(); //打开事务
Transaction transaction = session.beginTransaction(); //存储User对象
session.save(user); //提交事务
transaction.commit(); //关闭资源
session.close(); }

Configuration:管理我们的配置文件的信息的

  //使用Hibernate(并没有去读取hibernate.cfg.xml)
  Configuration config1 = new Configuration();

  config1.configure();

  在Hibernate底层实现configure()方法时会默认在classpath下面(即从src目录下开始查找)寻找hibernate.cfg.xml,并进行配置,当然也可以自己指定hibernate.cfg.xml文件位置:

configuration.configure("/com/db/hibernate.cfg.xml");

  configure()方法源码:

    public Configuration configure() throws HibernateException {
return configure( StandardServiceRegistryBuilder.DEFAULT_CFG_RESOURCE_NAME );
}

  

  DEFAULT_CFG_RESOURCE_NAME静态String在StandardServiceRegistryBuilder有定义

public static final String final String DEFAULT_CFG_RESOURCE_NAMEDEFAULT_CFG_RESOURCE_NAME = "hibernate.cfg.xml";

  所以src下hibernate.cfg配置文件名字不要写错,如果有修改,要与StandardServiceRegistryBuilder.java中的final String DEFAULT_CFG_RESOURCE_NAME一一对应

SessionFactory:创建session(数据库核心对象)的工厂

  简单来说就是创建session对象

  sessionFactory负责保证和使用所有的配置信息,消耗内存资源很大,所以我们要保证一个web项目中,只创建一个sessionFactory

Configuration 类负责管理 Hibernate 的配置信息。包括如下内容:

Hibernate 运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等(对应 hibernate.cfg.xml 文件)。
持久化类与数据表的映射关系(*.hbm.xml 文件)

  Session对象的增、删、改、查

  //增加用户
public void addUser(User user) { //使用Hibernate(并没有去读取hibernate.cfg.xml)
Configuration config1 = new Configuration();
config1.configure(); //得到sessionFactory 功能:创建session(数据库核心对象)的工厂
// 简单来说就是创建session对象
//sessionfactory负责保存和使用所有配置信息,消耗内存和资源大
// 线程安全
// 保证一个web项目中,只创建一个
SessionFactory factory = config1.buildSessionFactory();
//创建session对象
Session openSession = factory.openSession(); //得到配置信息
Configuration config = new Configuration().configure();
//创建sessionFactory对象
SessionFactory sessionFactory = config.buildSessionFactory();
//获取session
Session session = sessionFactory.openSession(); //打开事务
Transaction transcation = session.beginTransaction();
//存储user对象
session.save(user);
//关闭事务
session.close();
} //删除用户
public void deleteUser()
{
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
Session session = factory.openSession();
Transaction transcation = session.beginTransaction();
//得到id为d03de4eb-e033-41c1-9da0-c9f155713e18的对象
User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
session.delete(user);
transcation.commit();
session.close();
} //修改用户
public void ChangeUser()
{
//读取hibernate.cfg.xml
Configuration config = new Configuration().configure();
//获取sessionFactory工厂
SessionFactory factory = config.buildSessionFactory();
//获取session
Session session = factory.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
//根据id,得到session
User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
//修改名字,将对象改名为lGary
user.setUsername("lGary");
//更新数据库中的值
session.update(user);
//提交事务
transaction.commit();
//关闭session
session.close();
} //查询用户
public void findUser()
{
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
Session openSession = factory.openSession();
Transaction transaction = openSession.beginTransaction();
User user = openSession.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
System.out.println(user);
transaction.commit();
openSession.close();
}
package com.Gary.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration; import com.Gary.domain.User; public class UserDao { //增加用户
public void addUser(User user) { //使用Hibernate(并没有去读取hibernate.cfg.xml)
Configuration config1 = new Configuration();
config1.configure(); //得到sessionFactory 功能:创建session(数据库核心对象)的工厂
// 简单来说就是创建session对象
//sessionfactory负责保存和使用所有配置信息,消耗内存和资源大
// 线程安全
// 保证一个web项目中,只创建一个
SessionFactory factory = config1.buildSessionFactory();
//创建session对象
Session openSession = factory.openSession(); //得到配置信息
Configuration config = new Configuration().configure();
//创建sessionFactory对象
SessionFactory sessionFactory = config.buildSessionFactory();
//获取session
Session session = sessionFactory.openSession(); //打开事务
Transaction transcation = session.beginTransaction();
//存储user对象
session.save(user);
//关闭事务
session.close();
} //删除用户
public void deleteUser()
{
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
Session session = factory.openSession();
Transaction transcation = session.beginTransaction();
//得到id为d03de4eb-e033-41c1-9da0-c9f155713e18的对象
User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
session.delete(user);
transcation.commit();
session.close();
} //修改用户
public void ChangeUser()
{
//读取hibernate.cfg.xml
Configuration config = new Configuration().configure();
//获取sessionFactory工厂
SessionFactory factory = config.buildSessionFactory();
//获取session
Session session = factory.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
//根据id,得到session
User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
//修改名字,将对象改名为lGary
user.setUsername("lGary");
//更新数据库中的值
session.update(user);
//提交事务
transaction.commit();
//关闭session
session.close();
} //查询用户
public void findUser()
{
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
Session openSession = factory.openSession();
Transaction transaction = openSession.beginTransaction();
User user = openSession.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
System.out.println(user);
transaction.commit();
openSession.close();
} }

UserDao.java

Transaction:事务

1、hibernate对数据的操作都是封装在事务当中,并且默认是非自动提交的方式,所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中。

2、如果想让hibernate像jdbc那样自动提交事务,必须调用session对象的doWork()方法,获得jdbc的connection后,设置其为自动提交事务模式。(注意:通常并不推荐这样做)

        //打开事务
Transaction transcation = session.beginTransaction(); //关闭事务
session.close();

JavaWeb_(Hibernate框架)Hibernate中重要的api的更多相关文章

  1. JavaWeb_(Struts2框架)Action中struts-default下result的各种转发类型

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

  2. JavaWeb_(Hibernate框架)Hibernate中创建实体

    Hibernate中创建实体 创建实体五个基本规则 --提供无参的构造器 --成员变量的私有化,提供get.set方法,提供属性 --尽量使用包装类型 --主键(一定要有) --不要加final(hi ...

  3. JavaWeb_(Hibernate框架)Hibernate中对象的三种状态

    对象的三种状态 瞬时状态: 实体 没有id.没有与session关联 持久化状态: 特点:持久化状态对象的任何改变都会同步到数据库中 游离态[也称作托管态]: 实体 有id,没有与session关联 ...

  4. hibernate框架学习笔记3:API详解

    Configuration对象: package api; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configur ...

  5. JavaWeb_(Hibernate框架)Hibernate与c3p0与Dbutils的区别

    JavaWeb_(Hibernate框架)使用Hibernate开发用户注册功能 传送门 JavaWeb_(Hibernate框架)使用c3p0与Dbutils开发用户注册功能 传送门 Hiberna ...

  6. JavaWeb_(Hibernate框架)Hibernate中事务

    Hibernate中事务 事务的性质 事物的隔离级别 配置事务的隔离级别 事务的性质 原子性:原子,不可再分,一个操作不能分为更小的操作,要么全都执行,要么全不执行. 一致性:事务在完成时,必须使得所 ...

  7. JavaWeb_(Hibernate框架)Hibernate论坛项目中多对多案例

    基于SSH论坛小型项目 传送门 用户和发帖进行举例 多对多关系:多个用户可以回复多个帖子 因此引入了一张回复表,用来保存用户id和帖子id CREATE TABLE `hforum`.`answer` ...

  8. JavaWeb_(Hibernate框架)Hibernate论坛项目中一对多案例

    基于SSH论坛小型项目 传送门 用户和发帖进行举例 一对多关系:一个用户可以发表多个帖子 一对一关系:一个帖子属于一个用户发布 创建数据库用户user表 CREATE TABLE `hforum`.` ...

  9. JavaWeb_(Hibernate框架)Hibernate中数据查询语句SQL基本用法

    本文展示三种在Hibernate中使用SQL语句进行数据查询基本用法 1.基本查询 2.条件查询 3.分页查询 package com.Gary.dao; import java.util.List; ...

随机推荐

  1. python读写增删修改ini配置文件

    一,百度百科 .ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,统管windows的各项配置,一般用户就用windows提供的 ...

  2. 修改源码去除zblog博客分类目录的RSS图标

    zblog博客的所建立的分类默认前面是有一个RSS图标的,如下图所示: 其实这个图标的存在并不能起到太大的美化作用,增加用户订阅数量的作用.那么应该如何去掉这个RSS图标呢? 这个RSS图标的生成在z ...

  3. css;js学习(一)

    推荐基础前端学习地址https://ke.qq.com/course/315961蝉壳学院 清除浮动 .clearfix:before,.clearfix:after{ content: " ...

  4. SpringCloud 配置文件 application.yml和 bootstrap.yml区别

    前言: SpringBoot默认支持properties和YAML两种格式的配置文件.前者格式简单,但是只支持键值对.如果需要表达列表,最好使用YAML格式.SpringBoot支持自动加载约定名称的 ...

  5. 绑定css样式,点击高亮

    <div class="flex-lay" style="color:#999"> <div bindtap="changeType ...

  6. SSIS 初次接触 + 开发记录

    第一次接触SSIS,昨天终于把一套流程走通,记一下流水. 1:安装 使用SSIS需要安装插件(VS 和Sql Server都需要另外安装). 自己使用的vs2017开发,官网有专门的 VS2017 安 ...

  7. U盘加载速度慢的解决方法

    在日常的生活和工作中,我们经常用U盘存储一些文件和程序.然而,一些朋友发现U盘有时候在使用过程中的识别加载速度非常缓慢.是U盘出故障了吗?其实不尽然,下面就为大家分享一下如何快速解决U盘加载缓慢的方法 ...

  8. Win7自带的系统备份还原功能如何去使用?

    很多用户都会反映Win7系统使用过程中会出现系统或应用程序方面的小故障,针对这些小问题,再选择进行电脑系统的重装就有些过于麻烦了. 其实Win7系统内带有系统备份和还原的功能,可以在电脑系统出现小问题 ...

  9. 目标检测之车辆行人(tensorflow版yolov3)

    背景: 在自动驾驶中,基于摄像头的视觉感知,如同人的眼睛一样重要.而目前主流方案基本都采用深度学习方案(tensorflow等),而非传统图像处理(opencv等). 接下来我们就以YOLOV3为基本 ...

  10. 给Eclipse安装MinGW

    @2019-06-30 [小记] 安装完Eclipse后Toolchains只有Cross GCC,下载安装MinGW后添加系统环境变量即可