Hibernate入门学习笔记
1、Hibernate是什么?
2、hibernate怎么配置?
3、SessionFactory是干什么的?有哪些方法经常用?
4、hibernate的现成的增删改查方法怎么使用?都有哪些方法?哪些会经常使用?
5、Hql是什么?有什么用?怎么用?
6、Hibernate怎么自定义查询?会用到什么类或接口?
7、Hibernate可以自选数据源?默认的数据源是什么?
有了它,程序员将不用再写面向关系的sql语句,直接操作javaBean对象就可以实现数据库的增删改查等操作。
SessionFactory(org.hibernate.SessionFactory):
该对象是JavaBean对象与数据库表之间的关系在内存中的镜像。一般一个数据库对应一个SessionFactory。该对象是线程安全的,它是session工厂。使用它可以获得Session对象,并且它可以给事务之间可以重用的数据提供二级缓存。
sesison(org.hibernate.Session):
该对象表示应用程序和JavaBean对象交互操作的一个单线程对象。它是Transaction的工厂,使用它可以获得Transaction,从而去进行事务操作。
- 事务Transaction(org.hibernate.Tranction):
该对象代表对数据库最小单位的操作。它通过抽象将应用程序和底层具体的JDBC、JTA事务隔离开。某种情况下,一个session可以包括多个Transaction对象。使用该对象一般进行事务的开启和关闭操作。
一、增:实现对象持久化靠的是session对象的save(obj)方法。
二、查:
a.知道identifier,如主键,则使用load()或get()方法
区别:load装载某个对象,如果在数据库中该记录不存在,则会抛出一个异常。如果程序员不确定装载的对象是否存在,可以使用get方法。
- b.不知道identifier,但知道其他属性,则可以使用查询方式即HQL语句查询。
HQL是强大且易于使用的面向对象的查询语言,使用该语言可以通过操作javabean来操作数据库。HQL查询要通过org.hibernate.Query的实例来实现。
三、改:
修改持久对象:
最直接的更新一个对对象的方法是在session处于打开状态是load()它,然后直接修改即可。实例:
- 修改托管(Detached)对象
:在Web应用中,经常是先通过一个session获取一个持久化对象,然后该session被销毁,英文名字并把此时处于Detached状态的对象发送到界面层去操作。最后在一个新的session中保存所做的修改。对于这种情况,Hibernate提供了两个方法保存数据。session.update()和session.merge()。merge()方法可以随时保存对象的改动而不考虑session的状态,而update()方法则需要考虑session的状态。
- saveOrUpdate()方法:
saveOrUpdate()方法即可自动分配新持久化标识(identifier)保存瞬时态对象,又可以更新/重新关联托管(detached)实例。
- 四、删
删除一个对象就是把该对象由持久态转变为瞬时态,用Session.delete()方法进行删除。
一、使用Configuration类
Configuration类的作用是加载配置信息、添加映射类、指定配置资源文件等。实例:
二、使用SessionFactory接口
当所有映射文件被Configuration解析并加载到内存过后,应用程序必须获得一个用于构造session实例的工厂。这个工厂将别应用程序的所有session共享。SessionFactory的获取:
三、使用Session接口
一旦SessionFactory创建好,就可以用来缓存所有的数据库连接,并且可以给程序员提供一个连接去操作数据库。
然后就可以使用session对象进行操作了。
四、使用transaction接口
Transaction接口可以通过session对象获取,它主要用来对操作数据库的事务进行管理。一个事务是一个完整的操作单元,要么全部提交,要么全部回滚到提交之前的状态。在编程中一般调用commit()和rollback()方法。
五、使用Query接口
Query接口用来执行HQL语句,对数据库进行查询。这个接口提供了参数绑定、英文地址格式结果集处理以及运行实际查询的方法。
1、Query的使用方法:程序员可以通过当前的session获取一个Query对象:
一个查询通常在调用list()时才被执行,查询返回的对象处于持久态。如果程序员知道查询只会返回一个对象,可使用list()的快捷方式uniqueResult()。
2、迭代方式获取结果集(Iterating results)
使用iterate()方法,可以对查询结果进行遍历。这样就可以在这个过程中进行一些判断,根据判断的结果决定对这个对象的操作。而这种方式在普通查询中是不能实现的。
3、绑定参数
可以看出,在HQL语句中,先用”:username”代表待定的参数,然后用query.setParameter()方法把变量userName的值赋给它。也可以采用这种方式:
4、分页操作
在web应用中,经常需要将查询的结果分页显示出来,这就要求一次只能取出所有结果的一个子集,可以通过Query的setFirstResult()和setMaxResults()方法去实现。如
Hibernate和MyBatis的底层数据源都是c3p0连接池,当为Hibernate设置MaxPoolSize属性时,实际上就是在为连接池设置属性。
Hibernate入门学习笔记的更多相关文章
- Hadoop入门学习笔记---part4
紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...
- Hadoop入门学习笔记---part3
2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...
- PyQt4入门学习笔记(三)
# PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...
- PyQt4入门学习笔记(一)
PyQt4入门学习笔记(一) 一直没有找到什么好的pyqt4的教程,偶然在google上搜到一篇不错的入门文档,翻译过来,留以后再复习. 原始链接如下: http://zetcode.com/gui/ ...
- Hadoop入门学习笔记---part2
在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...
- Hadoop入门学习笔记---part1
随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...
- Scala入门学习笔记三--数组使用
前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...
- OpenCV入门学习笔记
OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...
- stylus入门学习笔记
title: stylus入门学习笔记 date: 2018-09-06 17:35:28 tags: [stylus] description: 学习到 vue, 有人推荐使用 stylus 这个 ...
随机推荐
- 【ABAP系列】SAP ABAP选择屏幕(SELECTION SCREEN)事件解析
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP选择屏幕(SEL ...
- Lucene的步骤
// 1. 采集数据 BookDao bookDao = new BookDaoImpl(); List<Book> bookList = bookDao.queryBookList(); ...
- Where we love is home, home that our feet may leave, but not our hearts.
parcel.n. 包裹 endurance.n.耐力 rot.v.腐烂 ornament.n.装饰 pinch.v.捏 nationality.n.国家 sunshine.n.阳光 stagger. ...
- CSP2019 —— 今年欢笑复明年,不知退役在眼前
关于2019CSP-J/-S的一些体会 又是一年退役季,想起在群里看到大佬的一句诗,感慨万千. 今年欢笑复明年,不知退役在眼前 于是便心生文意,随便写点东西来给自己康康. 先说说这次的成绩吧.大家应该 ...
- Mac入门--通过homebrew下载过慢问题
使用国内的镜像替换homebrew镜像,对镜像进行加速源 原先我们执行brew命令安装的时候,跟3个仓库地址有关 1 brew.git 2 homebrew-core.git 3 homebrew-b ...
- [BZOJ2716] [Violet 3]天使玩偶(CDQ分治)
[BZOJ2716] [Violet 3]天使玩偶(CDQ分治) 题面 Ayu 在七年前曾经收到过一个天使玩偶,当时她把它当作时间囊埋在了地下.而七年后 的今天,Ayu 却忘了她把天使玩偶埋在了哪里, ...
- python学习笔记(10):面向对象
一.类和实例 1.类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 2.对象:通过类定义的数据结构实例.对象包括两个数据成员( ...
- webpack打包过程及开发过程
1.传统: 1)分模块去定义js.js中要导出将来要被打包的方法module.exports 2)定义main.js入口文件(主文件).在此文件中,导入引用的js文件 var {add} = requ ...
- web开发中SESSION的本质
有一点我们必须承认,大多数web应用程序都离不开session的使用.这篇文章将会结合php以及http协议来分析如何建立一个安全的会话管理机制.我们先简单的了解一些http的知识,从而理解该协议的无 ...
- Conference - open source drives IOT from device to edge
Open source drives IOT from device to edge 以下都是针对IOT领域的项目: ACRN A Big Little Hypervisor for IoT Deve ...