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入门学习笔记的更多相关文章

  1. Hadoop入门学习笔记---part4

    紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...

  2. Hadoop入门学习笔记---part3

    2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...

  3. PyQt4入门学习笔记(三)

    # PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...

  4. PyQt4入门学习笔记(一)

    PyQt4入门学习笔记(一) 一直没有找到什么好的pyqt4的教程,偶然在google上搜到一篇不错的入门文档,翻译过来,留以后再复习. 原始链接如下: http://zetcode.com/gui/ ...

  5. Hadoop入门学习笔记---part2

    在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...

  6. Hadoop入门学习笔记---part1

    随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...

  7. Scala入门学习笔记三--数组使用

    前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...

  8. OpenCV入门学习笔记

    OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...

  9. stylus入门学习笔记

    title: stylus入门学习笔记 date: 2018-09-06 17:35:28 tags: [stylus] description: 学习到 vue, 有人推荐使用 stylus 这个 ...

随机推荐

  1. Whatever happens tomorrow, we've had today

    bathe: v. 用水清洗 resemblance:n. 相似.相像 cavity:n. 洞,孔,腔 stubborn: adj. 顽强的,固执的 stillness: n. 静止,沉静 tenth ...

  2. TensorFlow学习笔记12-word2vec模型

    为什么学习word2word2vec模型? 该模型用来学习文字的向量表示.图像和音频可以直接处理原始像素点和音频中功率谱密度的强度值, 把它们直接编码成向量数据集.但在"自然语言处理&quo ...

  3. 实现atoi

    1. 去掉首位空格 2. 判断首位是否有正负号 3. 判断各位是否是0~9,有其他字符直接返回当前结果   public class Solution { public int atoi(String ...

  4. SpringBoot使用RestTemplate 摘要认证

    SpringBoot使用RestTempate SpringBoot使用RestTemplate摘要认证 SpringBoot使用RestTemplate基础认证 SpringBoot使用RestTe ...

  5. django shell的基本使用

    作者:python技术人 博客:https://www.cnblogs.com/lpdeboke/ 在日常工作再发中,经常需要测试一些对象.函数.类...等是否正确,但是如果整体运行项目特别麻烦,并且 ...

  6. python基础循环语句练习

    1.使用while循环输入 1 2 3 4 5 6     8 9 10 n = 1 while n < 11: if n == 7: pass else: print(n) n = n + 1 ...

  7. 解决MySQL报错:Access denied for user ‘root’@‘localhost’(using password: YES)

    Windows 10(mysql5.1) 修改配置文件 找到MySQL安装目录下配置文件my.ini(在我的win10环境下,其路径为C:\ProgramData\MySQL\MySQL Server ...

  8. [2019杭电多校第五场][hdu6630]permutation 2

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6630 题意为求出1-n,n个数的全排列中有多少种方案满足第一位为x,第n位为y,且相邻数字绝对值之差不 ...

  9. 如何在nuxt中添加proxyTable代理

    背景 在本地开发vue项目的时候,当你习惯了proxyTable解决本地跨域的问题,切换到nuxt的时候,你会发现,添加了proxyTable设置并没有什么作用,那是因为你是用的vue脚手架生成的vu ...

  10. 【focus-lei 】微服务

    随笔分类 - 微服务 .net core使用NLog+Elasticsearch记录日志 摘要:在微服务或分布式系统中,如果将日志作为文件输出,查看系统日志将非常不便:如果将日志保存到数据库中,又不能 ...