萌新小笔记:

  用过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. G - Surf Gym - 100819S -逆向背包DP

    G - Surf Gym - 100819S 思路 :有点类似 逆向背包DP , 因为这些事件发生后是对后面的时间有影响. 所以,我们 进行逆向DP,具体 见代码实现. #include<bit ...

  2. CheckedTextView文字不居中的问题

    问题:CheckedTextView设置了android:gravity="center",但是不居中 解决方法:添加属性android:textAlignment="c ...

  3. 算法第四版中 while (!StdIn.isEmpty()) 循环无法跳出问题

    在IDEA中使用Ctrl+D就可以退出console输入

  4. 无法在Application Designer中打开PeopleTools对象

    PeopleSoft开发人员经常使用PeopleSoft Application Designer来查看/修改PeopleTools对象,例如字段,记录,页面,组件等.开发人员对Application ...

  5. 记录opencv编译过程

    准备学习opencv,参考了几个网页终于完成.编辑器和opencv版本都选择最新的版本. 记录过程如下 1. 下载准备: 1)         Opencv源码, 下载地址: https://sour ...

  6. 编译部署 Mysql 5.7

    1.环境准备 RHEL7.4(最小化安装)  64bit   2G 内存 (1G 内存编译将近一个小时) 磁盘空间 15G 以上. 配置为本地yum 源 从MySQL5.7版本开始,安装MySQL需要 ...

  7. [LeetCode] Find And Replace in String 在字符串中查找和替换

    To some string S, we will perform some replacement operations that replace groups of letters with ne ...

  8. 929. Unique Email Addresses

    929. Unique Email Addresses Easy 22766FavoriteShare Every email consists of a local name and a domai ...

  9. java课程之团队开发冲刺阶段1.1

    一.今天所要完成的内容 1.实现软件添加日期的功能并生成当前所在周的功能 2.对之前的代码进行重新排版,将主函数的内容移到方法中 3.利用Android自带的左侧菜单栏实现app的整体美观

  10. 在 Android 的文字编辑控件 (TEdit) 中, 如何按下 Enter 就隐藏虚拟键盘

    在 Windows 的应用中,我们常常为了让使用者能够快速输入,在Edit元件中的onKeyUp或者 onKeyDown 事件中主动侦测使用者输入的字元是否有换行符号 (Enter),当使用者按下了E ...