当前位置: 首页 > news >正文

Java三大框架之——Hibernate

什么是Hibernate?

  Hibernate是基于ORM(O:对象,R:关系,M:映射)映射的持久层框架,是一个封装JDBC的轻量级框架,主要实现了对数据库的CUPD操作。

  注:CRUD是指在做计算处理时的增加(Create)、查询(Retrieve)(重新得到数据)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中数据库或者持久层的基本操作功能。

 

Hibernate中的核心接口和类

  Hibernate的核心类和接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。这6个核心类和接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。

  Session接口:负责对象的持久化操作,但需要注意的是它非线程安全的。

  SessionFactory接口:负责Hibernate的初始化操作,数据存储的代理对象,并且负责创建Session对象,

  Transaction接口:负责数据的事务操作。

  Query接口:负责数据库及持久化对象的查询操作,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。

  Criteria接口:Criteria接口与Query接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的是Criteria接口也是轻量级的,它不能在Session之外使用。

  Configuration类:Configuration 类的作用是对Hibernate 进行配置,以及对它进行启动。在Hibernate 的启动过程中,Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。虽然Configuration 类在整个Hibernate 项目中只扮演着一个很小的角色,但它是启动hibernate 时所遇到的第一个对象。

 

Hibernate的工作流程:

   工作流程图:  

        

 Hibernate持久化操作的七个步骤:

  1.创建Configuration对象,并加载cfg.xml配置文件;(配置文件可以通过Eclipse自动生成)

  2.通过Configuration对象构建SessionFactory工厂;

  3.通过SessionFactory工厂打开一个Session会话;

  4.开启事务;(查询方法可省略)

  5.用Session会话进行数据库及持久化对象的CRUD操作;

  6.提交事务;(查询方法可省略)

  7.关闭会话;

        代码如下:

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;



public class HibernateTest {

    public void Test(){
        //创建Configurtion对象并加载cfg.xml配置文件
        Configuration conf = new Configuration().configure("hibernate.cfg.xml");
        //构建SessionFactory工厂
        SessionFactory sessionFactory = conf.buildSessionFactory();
        //打开Session会话
        Session session = sessionFactory.openSession();
        //开启事务(增删改)需要开启事务 查询可以不用开启事务
        Transaction transaction = session.beginTransaction();
        
        //创建Users类对象
        Users users = new Users();
        
        /**
         * Session中封装的几个常用的方法
         */
        //调用Session中添加的方法
        session.save(users);
        //调用Session中删除的方法
        session.delete(users);
        //调用Session中修改的方法
        session.update(users);
        //调用Session中根据主键查询某个类的方法
        session.get(Users.class,users.getId());
        
        
        //根据HQL语句查询
        String hql = "from Users";
        Query query = session.createQuery(hql);
        List<Users> userList = query.list();
        
        
        //根据SQL语句查询
        String sql = "select * from Users";
        SQLQuery sqlQuery = session.createSQLQuery(sql);
        List<Users> sqlUsersList = sqlQuery.list();
        
        
        //根据你给的Bean.class类来指定查询哪个类
        Criteria criteria = session.createCriteria(Users.class);
        //用Criteria对象来添加条件(括号中用Restrictions对象来选择你要添加哪一种条件)
        criteria.add(Restrictions.ilike("name", "华盛顿%"));
        
        /**
         * 提交事务后将对数据库进行增删改查操作
         * 可以通过条件判断来确定是否提交事务
         * 例如:
         *         如果程序运行正常提交事务
         *         否则让事务回滚
         *         回滚后将不对数据库进行操作
         * 事务的回滚:        transaction.rollback();
         */
        //提交事务  
        transaction.commit();
            
        
        //关闭Session会话释放资源
        session.close();
  
    }
    
}

 

 

  

转载于:https://www.cnblogs.com/hcl22/p/6098579.html

相关文章:

  • IBMp6-550更换内存
  • 树莓派利用PuTTY进行远程登录
  • 浅析Node.js:DNS模块的使用
  • js学习篇--数组按升序降序排列
  • 【NetApp】C-mode storage failover takeover参数
  • 记事本程序
  • Java基础-Java中的Calendar和Date类
  • [转载]敏捷开发之Scrum扫盲篇
  • linux中权限的修改
  • Spring, MyBatis 多数据源的配置和管理
  • Vue 新手学习实战宝典
  • 初探插头dp
  • OSChina 周六乱弹 ——你们怎么懂我的少年心
  • Oracle内建函数(greatest, least, to_single_byte)
  • Selenium2+python自动化11-定位一组元素find_elements
  • echarts花样作死的坑
  • happypack两次报错的问题
  • Less 日常用法
  • Markdown 语法简单说明
  • Python 反序列化安全问题(二)
  • Python学习之路16-使用API
  • React中的“虫洞”——Context
  • Sass 快速入门教程
  • SQLServer插入数据
  • 分享几个不错的工具
  • 构造函数(constructor)与原型链(prototype)关系
  • 近期前端发展计划
  • 那些年我们用过的显示性能指标
  • 实习面试笔记
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 译米田引理
  • 运行时添加log4j2的appender
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • #Linux(make工具和makefile文件以及makefile语法)
  • #前后端分离# 头条发布系统
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (2022 CVPR) Unbiased Teacher v2
  • (70min)字节暑假实习二面(已挂)
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • .NET 依赖注入和配置系统
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .netcore如何运行环境安装到Linux服务器
  • .net程序集学习心得
  • .NET实现之(自动更新)
  • /etc/sudoers (root权限管理)
  • @font-face 用字体画图标
  • [\u4e00-\u9fa5] //匹配中文字符
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [2023-年度总结]凡是过往,皆为序章
  • [APIO2015]巴厘岛的雕塑
  • [CF]Codeforces Round #551 (Div. 2)
  • [C语言]——分支和循环(4)
  • [C语言]——柔性数组
  • [Deepin 15] 编译安装 MySQL-5.6.35