Hibernate学习笔记(二)

Hibernate概述:

什么是Hibernate:是一个持久层的ORM的框架
什么是ORM:
ORM:对象关系映射,指的是将一个java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可以完成数据库的相关操作

为什么学习Hibernate
简化JDBC的开发
性能很好

Hibernate的API
Configuration:加载配置文件
SessionFactory:内部维护连接池。配置C3p0连接池,自定义工具类。

Session:
维护一级缓存,与数据库交互桥梁。
常用的方法:
save(Object obj)
get()/load()
update()
delete()
saveOrUpdate()

Transaction:
commit();
rollback();


#####持久化类编写的规则

持久化类的概述

【】什么是持久化?将内存中的一个对象持久化到数据库中过程。Hibernate框架就是用来进行持久化的框架

【】什么是持久化类?一个java对象与数据库的表建立了映射关系,那么这个类在Hibernate中称为是持久化类
【】持久化类=java类+映射文件


持久化类编写的规则

【】对持久化类提供一个无参数的构造函数 Hibernate底层需要使用反射生成实例

【】属性需要私有,对私有属性提供public的get和set函数的方法 Hibernate中获取,设置对象的值

【】对持久化类提供一个唯一标识OID与数据库主键对应 java中通过对象的地址区分是否是同一个对象,数据库中通过主键确定是否是同一记录,
在Hiberbate中通过持久化类的OID的属性区分是否是同一对象

【】持久化类中属性尽量使用包装类类型 因为基本数据类型默认是0,那么0就会有很多的歧义。包装类类型默认值就是null

【】持久化类不要使用final进行修饰


#####主键生成策略

 

 

 

######持久化类的三种状态

 


######Hibernate的一级缓存

 

 

//区分三种状态public void demo1(){Session session=HibernateUtils.GetSession();//手动开启事务Transaction transaction=session.beginTransaction();HibernateDemo1 hibernateDemo1=new HibernateDemo1();//瞬时态对象:没有唯一标识OID,没有被Session管理hibernateDemo1.setCust_name("XXXX");session.save(hibernateDemo1);//持久态对象:有唯一标识OID,被Session管理transaction.commit();//事件的提交session.close();//会话关闭//session.clear();//清空所有//session.evict(hibernateDemo1);//清空一个对象。这是一级缓存的管理处理//脱管态对象:有唯一标识对象OID,没有被Session管理System.out.println("客户名称:"+hibernateDemo1.getCust_name());}

 

 


#####事务的回首

【】事务:事务指的是逻辑上的一组操作,组成这组操作的各个逻辑单元要么全部成功,要么全部都失败
【】事务:事务指的是逻辑上的一组操作,组成这组操作的各个逻辑单元要么全部成功,要么全部都失败

####事务的特性:

【】原子性:代表事务不可分割

【】一致性:代表事务执行前后,数据的完整性保持一致

【】隔离性:代表一个事务执行的过程中,不应该受到其他事务的干扰

【】持久性:代表事务执行完成后,数据就持久到数据库中

####如果不考虑隔离的问题,会引发如下的安全问题:

【】读问题

#脏读:一个事务读到另一个事务未提交的数据

#不可重复读:一个事务读到另一个事务已经提交的update数据,导致在前一个事务多次查询的结果不一致

#虚读:一个事务读到另一个事务已经提交的insert数据,导致在前一个事务多次查询的结果不一致

【】写问题(了解)

#引发两类丢失更新

【】读问题的解决

#设置事务隔离级别

#Read uncommitted 以上都问题都会发生

#Read committed 解决脏读,但是不可重复读和虚读有可能发生

#Repeatable read 解决脏读和不可重复读,但是虚读有可能发生

#Serializable 解决所有读问题

一般的情况下,数据库通常会使用第二或者第三种方式隔离,默认的oracle是使用第二种,而mysql是使用第三种

关于在Hibernate中配置隔离的相关的问题--照片

设置隔离级别 <property name="hibernate.connection.isolation">4</property>

 

 

####sevice事务:

#####Hibernate的其他API

【】Query

public void queryTest(){Session session=HibernateUtils.GetSession();//手动开启事务Transaction transaction=session.beginTransaction();//通过Session获得Query接口String hql="from HibernateDemo1";//查询HIbernateDemo1中的对应表的数据,可以设置whereorg.hibernate.Query query=session.createQuery(hql);//设置条件//query.setParameter(0, "1");//设置分页query.setFirstResult(0);//起始数据query.setMaxResults(2);//每页的显示数List<HibernateDemo1> list=query.list();transaction.commit();//事件的提交session.close();//会话关闭}

 

 

【】Criteria

 

public void CriteriaTest(){Session session=HibernateUtils.GetSession();//手动开启事务Transaction transaction=session.beginTransaction();//通过session获得Criteria的对象/* Criteria criteria=session.createCriteria(HibernateDemo1.class);List<HibernateDemo1>list=criteria.list();//获取数据表的全部信息*///条件查询Criteria criteria=session.createCriteria(HibernateDemo1.class);criteria.add(Restrictions.like("cust_name","宋%"));List<HibernateDemo1>list=criteria.list();//获取到查询的信息//设置分页criteria.setFirstResult(0);criteria.setMaxResults(3);transaction.commit();//事件的提交session.close();//会话关闭}

 

 

【】SQLQuery

 

 

 

 信息类:

public class HibernateDemo1 {private long cust_id;private String cust_name;private String cust_source;private String cust_industry;private String cust_level;private String cust_phone;private String cust_mobile;public long getCust_id() {return cust_id;}public void setCust_id(long cust_id) {this.cust_id = cust_id;}public String getCust_name() {return cust_name;}public void setCust_name(String cust_name) {this.cust_name = cust_name;}public String getCust_source() {return cust_source;}public void setCust_source(String cust_source) {this.cust_source = cust_source;}public String getCust_industry() {return cust_industry;}public void setCust_industry(String cust_industry) {this.cust_industry = cust_industry;}public String getCust_level() {return cust_level;}public void setCust_level(String cust_level) {this.cust_level = cust_level;}public String getCust_phone() {return cust_phone;}public void setCust_phone(String cust_phone) {this.cust_phone = cust_phone;}public String getCust_mobile() {return cust_mobile;}public void setCust_mobile(String cust_mobile) {this.cust_mobile = cust_mobile;}@Overridepublic String toString() {return "HibernateDemo1 [cust_id=" + cust_id + ", cust_industry="+ cust_industry + ", cust_level=" + cust_level+ ", cust_mobile=" + cust_mobile + ", cust_name=" + cust_name+ ", cust_phone=" + cust_phone + ", cust_source=" + cust_source+ "]";}}

 

 

工具类:

 

public class HibernateUtils {//这个包的主要重用是为了放置工具类//这个工具类是Hibernate的工具类public static final Configuration cfg;public static final SessionFactory sf;//创建一个SessionFactory对象:类似于JDBC中连接池static{//加载Hibernate核心配置文件cfg=new Configuration().configure();sf=cfg.buildSessionFactory();//此处相当于创建工厂
    }//对外设置一个接口public static Session GetSession(){//通过SessionFactory获取到Session对象,类似于JDBC中的Connectionreturn sf.openSession();}
}

转载于:https://www.cnblogs.com/byczyz/p/11427494.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java-进阶:多线程1

目录 一、概述 二、Thread 类 三、创建线程&#xff1a;继承 Thread 类 四、创建线程&#xff1a;实现 Runnable 接口 五、线程优先级 六、线程的生命周期 七、同步代码块 一、概述 1. 进程和线程 进程&#xff1a;进程指正在运行的程序。线程&#xff1a;线程是进程中的一个…

Struts2学习笔记(一)--入门常见配置

Struts2框架的学习路线 l 第一天&#xff1a;Struts2的概述、Struts2的入门、Struts2常见的配置、Struts2的Action的编写 l 第二天&#xff1a;Struts2的数据的封装、结果页面配置 l 第三天&#xff1a;Struts2的值栈和OGNL表达式 l 第四天&#xff1a;Struts2的标签库 Struts2…

Java周总结1

一、计算机高级编程语言类型&#xff1a; a.编译型 b.解释型 Hello.java Java源文件 编译 Hello.class 字节码文件 解释 01101100.... &#xff08;二进制&#xff09;机器码指令 computer…

MMKV集成与原理,先收藏了

标准文档流 标准文档流&#xff0c;指的是元素排版布局过程中&#xff0c;元素会默认自动从左往右&#xff0c;从上往下的流式排列方式。前面内容发生了变化&#xff0c;后面的内容位置也会随着发生变化。 HTML就是一种标准文档流文件 HTML中的标准文档流特点通过两种方式体现…

Java周总结3

撰写第三周课程总结及实验报告&#xff08;一&#xff09; Java实验报告 班级 计科一班 学号 20188375 姓名 汤云云 完成时间 评分等级 实验一 Java开发环境与简单Java程序 一、 实验目的 &#xff08;1&#xff09; 熟悉JDK开…

MMKV集成与原理,吊打面试官系列!

前言 校招 -1 年 这个阶段还属于成长期&#xff0c;更需要看重的是你的基础和热情。对于 JS 基础&#xff0c;计算机基础&#xff0c;网络通信&#xff0c;算法等部分的要求会相对高一些。毕竟这个阶段比较难考察你的业务项目中的沉淀&#xff0c;所以只能从基础部分入手考察。…

MMKV集成与原理,成功跳槽阿里!

前言 在初学前端的时候&#xff0c;我们总会遇到一些问题&#xff0c;我们可以在网上看到很多关于前端的这些问题&#xff1a; 你们都是怎么学web前端的&#xff1f; 零基础&#xff0c;怎么自学好前端&#xff1f; 前端需要学多久&#xff0c;都学哪些知识&#xff1f; 想成为…

第四周课程总结试验报告(二)

Java实验报告 实验二 Java简单类与对象 一、 实验目的 &#xff08;1&#xff09; 掌握类的定义&#xff0c;熟悉属性、构造函数、方法的作用&#xff0c;掌握用类作为类型声明变量和方法返回值&#xff1b; &#xff08;2&#xff09; 理解类和对象的区别&#xff0c;掌握构造…

MMKV集成与原理,薪资翻倍

毕业工作一年之后&#xff0c;有了转行的想法&#xff0c;偶然接触到程序员这方面&#xff0c;产生了浓厚且强烈的兴趣&#xff0c;开始学习前端&#xff0c;成功收割了大厂offer&#xff0c;开始了我的程序员生涯。 在自学过程中有过一些小厂的面试经历&#xff0c;也在一些小…

Spring入门与常用配置

什么是Spring Spring&#xff1a;SE/EE开发的一站式框架。 一站式框架&#xff1a;有EE开发的每一层解决方案。 WEB层 &#xff1a;SpringMVC Service层 &#xff1a;Spring的Bean管理&#xff0c;Spring声明式事务 DAO层 &#xff1a;Spring的Jdbc模板&#xff0c;Spring的ORM…

MMKV集成与原理,详细学习指南

前言 本文主要是javascript和css方面的基础面试题&#xff0c;适合面试前以及平时复习食用。 基础知识是前端一面必问的&#xff0c;如果你在基础知识这一块翻车了&#xff0c;就算你框架玩的再6&#xff0c;webpack、git、node学习的再好也无济于事&#xff0c;因为对方就不…

第五周课程总结实验报告(三)

实验三 String类的应用 一、实验目的 &#xff08;1&#xff09; 掌握类String类的使用&#xff1b; &#xff08;2&#xff09; 学会使用JDK帮助文档&#xff1b; 二、实验内容 1.已知字符串&#xff1a;"this is a test of java".按要求执行以下操作&#xff1a;&a…

MMKV集成与原理,赶紧学起来

开头 Web前端开发基础知识学习路线分享&#xff0c;前端开发入门学习三大基础&#xff1a;HTML、CSS、JavaScript。除此之外还要学习数据可视化、Vue、React、Angular相关框架&#xff0c;熟练运用框架提升开发效率&#xff0c;提升稳定性。 [外链图片转存失败,源站可能有防盗…

MMKV集成与原理,轻松拿下offer

从事前端开发工作差不多3年了&#xff0c;自己也从一个什么都不懂的小白积累了一定的理论和实践经验&#xff0c;并且自己也对这3年来的学习实践历程有一个梳理&#xff0c;以供后面来细细回忆品味。 1、为什么选择学习前端开发&#xff1f; 你可能是因为兴趣&#xff0c;完成…

React面试题总结,一文说清!

前言 JavaScript是面向 Web 的编程语言&#xff0c;获得了所有网页浏览器的支持&#xff0c;是目前使用最广泛的脚本编程语言之一&#xff0c;也是网页设计和 Web 应用必须掌握的基本工具。 JavaScript主要用途 嵌入动态文本与HTML页面对浏览器时间做出相应读写HTML元素在数…

React面试题总结,含爱奇艺,小米,腾讯,阿里

前言 校招 -1 年 这个阶段还属于成长期&#xff0c;更需要看重的是你的基础和热情。对于 JS 基础&#xff0c;计算机基础&#xff0c;网络通信&#xff0c;算法等部分的要求会相对高一些。毕竟这个阶段比较难考察你的业务项目中的沉淀&#xff0c;所以只能从基础部分入手考察。…

React面试题总结,就是这么简单

前言 昨天有幸去字节面试了&#xff0c;顺便拿到了offer&#xff0c;把还记得的东西写下来&#xff0c;供大家参考一下。 计算机网络篇 HTTP HTTP 报文结构是怎样的&#xff1f;HTTP有哪些请求方法&#xff1f;GET 和 POST 有什么区别&#xff1f;如何理解 URI&#xff1f;如…

CSS清除默认样式,成功入职腾讯

前言 又逢金三银四&#xff0c;拿到大厂的offer一直是程序员朋友的一个目标&#xff0c;我是如何拿到大厂offer的呢&#xff0c;今天给大家分享我拿到大厂offer的利器&#xff0c;前端核心知识面试宝典&#xff0c;内容囊括Html、CSS、Javascript、Vue、HTTP、浏览器面试题\数…

CSS清除默认样式,技术详细介绍

前言 JavaScript是面向 Web 的编程语言&#xff0c;获得了所有网页浏览器的支持&#xff0c;是目前使用最广泛的脚本编程语言之一&#xff0c;也是网页设计和 Web 应用必须掌握的基本工具。 JavaScript主要用途 嵌入动态文本与HTML页面对浏览器时间做出相应读写HTML元素在数…

CSS清除默认样式,看完这篇彻底明白了

前端的兴起 前端真正兴起和开始频繁出现在大家的视线里&#xff0c;大概是在十年前。彼时的 Web 开发基本是由后端主导&#xff0c;前端能做的只是校验一下数据、操作一下 DOM。&#xff08;其中数据检验是 JS 产生的根本原因&#xff1a;当时网络太慢&#xff0c;在服务端检验…