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 这个 ...
随机推荐
- jQuery源码分析系列——来自Aaron
jQuery源码分析系列——来自Aaron 转载地址:http://www.cnblogs.com/aaronjs/p/3279314.html 版本截止到2013.8.24 jQuery官方发布最新 ...
- python基础-10 程序目录结构 学生选课系统面向对象练习
一 程序目录结构 1 bin文件夹 二进制文件.代码程序 2 conf 配置文件 3 帮助文档 4 头文件库文件等 二 学生选课系统部分代码 未完待续 1 包内的__init__.py文件 在包 ...
- 全球编程语言薪资排行榜,Java竟然垫底!!!
近日,Stack Overflow 发布了 2019 年度开发者调查报告,这次调查有来自全球的几乎将近 90000 名开发者参与,是对世界各地开发人员进行的规模最大,最全面的调查. 这次调查报告中总结 ...
- linux 阿里云 centos7 环境下安装easymock(一)
一.说一说Easy-mock的使用场景和优点:1.Easy Mock 是一个可视化,并且能快速生成 模拟数据 的持久化服务,2.基于 Swagger 创建项目,以节省手动创建接口的时间,这点也是我搭建 ...
- [2019杭电多校第十场][hdu6701]Make Rounddog Happy
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6701 题目大意为求满足 $max(a_{l},a_{l+1}\cdot \cdot \cdot a_{ ...
- DelayQueue详解
一.DelayQueue是什么 DelayQueue是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走.这种队列是有序的,即队头对 ...
- 修复线上bug
1,git branch new_branch 2,git push origin new_branch 以上是线上地址操作,以下是本地仓库操作 3,git fetch 4,git checkout ...
- 构建CRD工程 - 程序员学点xx 43 k8s
目录 Kubernetes -3- 这是yann的第98篇分享 本日状态: 帮同事排了一天bug. Kubernetes -3- 这是yann的第98篇分享 第 1 部分 承前 昨天用视屏的方式演 ...
- usleep和sleep
usleep 和 sleep 都是用于将进程挂起, 所不同的是前者在微秒级别, 后者在秒级别.
- mysqldump导入导出
如果导入数据:使用mysqldump命令 导出数据和表的结构: 1.导出表数据和表结构 mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql(这个名字随便叫) #/usr/l ...