萌新小笔记:

  用过hibernate的小伙伴肯定经常看到这几个东西吧!但是初学者常常会把这几个搞不清楚:dataSource,session,sessionFactory(dataSource),hibernateTemplate(sessionFactory),hibernateDaoSupport(sessionFactory)

  我会每一种是什么说一下并且演示一下用法:

  dataSource:一般都称呼为数据源或者连接池,就是配置连接数据库的几个东西,驱动、url、用户名、密码,配置了这些东西就能连接数据库,而且还是自动帮你去连接(不用我们像学jdbc时候手动去加载驱动,然后获取连接.....写这种代码太机械化了),而且还能保证其中几个连接是已经连接好数据库了的,不需要我们用的时候再去慢慢连,那样黄花菜都凉了。想象成一个池子,里面有很多的鱼,这些鱼负责去给你向数据库连接发送sql等类型的语句,这些鱼不需要你去销毁,连接完数据库之后又会回到池子里游啊游

   一般就是下图这样的(部分截图)

  session:简单来说就是叫做会话(大白话说就是Java程序和数据库的一次交互,跟数据库打了一次交道),貌似这个session是线程不安全的,所以每次用这个session都需要获取session,开启事务,xxx,关闭事务,关闭session....不要和http协议的那个session弄混了。这个session还起到了缓存的作用,emmmm,貌似hibernate的以及缓存就在这里吧!这个东西初学时候用的太多了,用法就略过。

  sessionFactory(可以直接用于Dao层,但是必须和当前session配合使用):顾名思义,叫做session工厂,专门生产session的工厂(一个项目是会用一个数据库,一个sessionFactory就可以了),这个的作用是起到缓冲的作用,缓冲一些hibernate自动生成的sql,还有可能重复用到的一些数据(这个我也不知道hibernate怎么知道这个数据我就要重复利用....emmm...); 而且,很明显,要把数据源放到sessionFactory里面,不然数据库都连不到,缓冲个鬼啊!

  一般配置如下(部分截图):

     HibernateTemplate(可以用于Dao层):用sessionFactory也挺麻烦。每次都要获取session、虽然hibernate就给你自动做了一些工作,比如事务操作给你放到service层去控制了,你在Dao层就专心跟数据库打交道就行(crud方法);用hibernateTemplate相当于进一步对session的方法进行封装和优化,并且让你更简单的使用,所以hibernateTemplate要用到sessionFactory

  配置文件配置hibernateTemplate,在Dao中,直接@Autowired就能拿到了。

  

   HibernateDaoSupport类(用于Dao层):这个类其实就是一个工具类,这个本质上和上面一种方案一样,是对HibernateTemplate的一次封装;可能Hibernate觉得让你自己去配置文件里配置,然后通过注解去获得也太麻烦了(xml中不用配置hibernateTemplate),直接给你一个类,你只要继承我,然后给我一个sessionFactory,我就能给你HibernateTemplate这个模板,你尽管用,由此,可以看得出hibernate简直就是让你越来越少的接触底层代码,你越轻松越简便越好。

  通常配置如下:

  

  

  补充一个事务管理器的配置:spring用自己的jdbcTemplate(本质上就是对jdbc简单的封装,发送的是原始sql语句)时候配置的事务管理器:

  

  用hibernate时候配置的事务管理器:注入的是sessionFactory

  

  在所有的事务管理器配置完了之后,不要忘记加一句,<tx:annotation-driven transaction-manager="事务管理器的id" /> 【可以让你用注解去使用事务】,这样你就能直接在service层类或者方法用@Transactional注解去进行事务管理了。

  使用hibernate框架时Dao层写法真的有很多种,但是总的来说就是这几个东西,有没有发现,都是各种注入sessionFactory ,而dataSource却很少用到。

  

总结一下:

  你只要用hibernate框架,dataSource你只用一次,就是注入到sessionFactory里面,其他的都是注入sessionFactory。 sessionFactory【datasource】,hibernateTemplate【sessionFactory】,hibernateDaoSupport【sessionFactory】,hibernate事务管理器【sessionFactory】

    假如你不用hibernate,就用spring自带的jdbcTemplate, 你只会用到dataSource,比如事务管理器等等

hibernate易混淆点的更多相关文章

  1. css常见的易混淆属性和值的区别(一)

    css的属性很多,每一个属性的值也很多,组合起来便有成千上万种.不同属性之间的相互组合也可以产生不同的样式,css真是一种优美的样式设计语言.下面对工作中常见的易混淆的属性和值进行总结: 1. lin ...

  2. C#中一些易混淆概念总结

    C#中一些易混淆概念 这几天一直在复习C#基础知识,过程中也发现了自己以前理解不清楚和混淆的概念.现在给大家分享出来我的笔记: 一,.NET平台的重要组成部分都是有哪些 1)FCL (所谓的.NET框 ...

  3. C#中易混淆的知识点

    C#中易混淆的知识点 一.引言 今天在论坛中看到一位朋友提出这样的一个问题,问题大致(问题的链接为:http://social.msdn.microsoft.com/Forums/zh-CN/52e6 ...

  4. a链接易混淆与form表单简易验证用法详解

    链接可以说遍布互联网,比如你想提供一个可以跳转到百度首页的链接给网友,那么代码如下: <a href="http://www.baidu.com">百度一下,你就知道& ...

  5. lua中易混淆函数

    lua中易混淆的函数 ipairs和pairs: ipairs只能顺序遍历table,遇到key不是数字就会退出 pairs可以遍历table中所有元素 ----------------------- ...

  6. JavaScript中易混淆的DOM属性及方法对比

    JavaScript中易混淆的DOM属性及方法对比 ParentNode.children VS Node.prototype.childNodes ParentNode.children:该属性继承 ...

  7. [Swift-2019力扣杯春季初赛]1. 易混淆数

    给定一个数字 N,当它满足以下条件的时候返回 true: 把原数字旋转180°以后得到新的数字. 如 0, 1, 6, 8, 9 旋转 180° 以后,得到了新的数字 0, 1, 9, 8, 6 . ...

  8. PHP易混淆函数的区别及用法汇总

    本文实例分析了PHP易混淆函数的区别及用法.分享给大家供大家参考.具体分析如下: 1.echo和print的区别PHP中echo和print的功能基本相同(输出),但是两者之间还是有细微差别的.ech ...

  9. 【C#小知识】C#中一些易混淆概念总结(七)---------解析抽象类,抽象方法

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

随机推荐

  1. Little Sub and Isomorphism Sequences ZOJ - 4089

    ZOJ - 4089 思路:可以反正 最长重构序列必然符合  此模式 x  +  {   }  与  {   }  +  x 那么 题意转化为了  找两个距离最长的相同的数.eeee 先离散化 然后 ...

  2. [微信跳转链接]之WAP浏览器跳转微信指定页面,微信跳转链接

    今天在一个小说的链接上看到最后,点击一个[继续阅读按钮]居然唤起微信APP,在微信内打开一个二维码,长按识别后可关注微信公众号, 后来分析出:weixin://dl/business/?ticket= ...

  3. python学习:利用循环语句完善输入设置

    利用循环语句完善输入设置 使用for循环: 代码1:_user = "alex"_password = "abc123" for i in range(3): ...

  4. 快排实现仿order by多字段排序

    class OrderBy(object): def __init__(self, sequence, *condition, **extra_condition): ""&quo ...

  5. JdbcTemplate实体映射

    JdbcTemplate实体映射 如果你需要使用JdbcTemplate将查询的数据映射成Java POJO,那么这篇文章适合你. 一个例子入门 下面是一个将表中一行记录映射成Map的例子,也是Jdb ...

  6. 机器学习(九)隐马尔可夫模型HMM

    1.隐马尔可夫HMM模型 一个隐马尔可夫模型可以表示为\[\lambda=\{A,B,\pi\}\]具体就不说了,比较基本. 2.HMM模型的三个基本问题 1.概率计算问题:给定\(\lambda\) ...

  7. node02

    1.使用已有的知识实现一个简单的登录和注册的界面 请求有请求接口有请求页面的,我们需要加以区分 以下是客户端代码 <!DOCTYPE html> <html lang="e ...

  8. VS2017Release+x64失败,LNK1104,无法打开文件"msvcprt.lib"

    采用VS2017+Qt5.10联合开发环境建立开发,将Qt的库包含到VS中使用VS2017的Debug+x64模式调试程序,通过并出现对应的EXE应用程序! 但是转换到Release+x64模式出现问 ...

  9. yum出现Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile解决方法

    yum出现Could not retrieve mirrorlist解决方法 Loaded plugins: fastestmirror, securityLoading mirror speeds ...

  10. Google 浏览器好用插件推荐

    Adblock Plus, 免费广告拦截器 Adobe Acrobat  将当前网页转换为 Adobe PDF 文件 Axure RP Extension for Chrome  不仅能绘制出详细的产 ...