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 这个 ...
随机推荐
- 【MM系列】SAP MM模块-组织结构第二篇
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-组织结构第二篇 ...
- 【ABAP系列】SAP ABAP ALV设置背景图片
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP abap ALV设置背景图片 ...
- 应用安全 - 代码审计 -Java
Java %c0%ae 安全模式绕过漏洞 原理 在Java端"%c0%ae"解析为"\uC0AE",最后转义为ASCCII低字符-".".通 ...
- lesson1-图的概念和图论模型
说明: 图论专题开设的目的主要是作为本学期复习巩固和分享自己对于图论的理解,主要参考的是老师的PPT.应老师要求,不能共享文件,抱歉! 参考书目:[1] J.A. Bondy, U.S.R. Mur ...
- [Web 前端] 007 css 常见的七种选择器
1. 标签选择器 影响范围大 建议尽量应用在层级选择器中 举例 <!-- body 体中的 div --> <div>box...</div> /* style 中 ...
- Jenkins安装配置 远程发布SpringBoot项目
环境要求: Java : 1.8.0_161. Maven :http://maven.apache.org/download.cgi 3.6.1 下载完解压,配置环境变量:vim /etc/prof ...
- Atman开发实习生的笔试题
坐标:山东 编程题(限时30分钟)如何判断一个字符串是否为合法的IP地址.要求:1. 不能使用正则表达式和自带的库函数.2. 列出全部测试用例,并给出原因.3. 把代码的后缀名改成txt后上传,不用压 ...
- 工作中常见的hive语句总结
hive的启动: 1.启动hadoop2.开启 metastore 在开启 hiveserver2服务nohup hive --service metastore >> log.out 2 ...
- wxpython菜单栏、子菜单栏、弹出菜单栏、状态栏小程序学习源代码分享
#coding=utf-8 import wx class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1, ...
- 【问题解决方案】GitHub上克隆项目到本地
说明: 克隆线上项目到本地,可以直接clone克隆,不必再自己建文件夹啊,初始化啊. 命令: git clone + 想要克隆的项目的地址 END