萌新小笔记:

  用过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. SQL Server 分区表上建立ColumnStore Index 如何添加新分区方法与步骤

    在生产环境中会遇到这样的场景,一个表随着时间的推移,越来越大,这个时候我们开始动手为这个表建立分区来改进查询性能. 但是表过大上百个G的时候,在数据仓库中,为了改进查询性能,我们可以添加在分区表的基础 ...

  2. 3dmax 3dmax计算机要求 3dmax下载

    渲染首先是要X64兼容台式电脑,笔记本不行,笔记本就是学生拿来玩还行,渲染大图笔记本真的是发热. 配置一般的电脑和笔记本千万不要尝试安装3dmax2019了,很卡的,3dmax2019只有64位,没有 ...

  3. hcna(华为)_Telnet篇

    Telnet提供了一个交互式操作界面,允许终端远程登录到任何可以充当 Telnet服务器的设备.Telnet用户可以像通过Console口本地登录一样对 设备进行操作.远端Telnet服务器和终端之间 ...

  4. MQTT之Mosquitto

    https://mosquitto.org/ Eclipse Mosquitto是一个开源(EPL / EDL许可)消息代理,它实现了MQTT协议版本3.1和3.1.1.Mosquitto重量轻,适用 ...

  5. 编程菜鸟的日记-Linux无处不在

    原文来自:http://www.linuxfederation.com/linux-everywhere Linux无处不在 “Linux无处不在.从空间站到微波炉到有Linux.”你可能听说很多以及 ...

  6. HTML入门11

    在网页中添加矢量图形, 使用矢量图形在很多情况下,效果较好,拥有较小的文件尺寸,高度缩放,下面具体讲解如何在网页中添加矢量图形 位图和矢量图 位图文件包含了每个像素的位置和色彩信息,流行的位图格式包括 ...

  7. imagecreatefrombmp、imagebmp php处理bmp文件

    /*格式组成典型的BMP图像文件由四部分组成: 1:位图头文件数据结构,它包含BMP图像文件的类型.显示内容等信息: 2:位图信息数据结构,它包含有BMP图像的宽.高.压缩方法,以及定义颜色等信息: ...

  8. 【原创】XAF Winfrom 支持4K分辨率

    Program.cs 添加以下代码 [STAThread] static void Main() { //支持4K显示 DevExpress.XtraEditors.WindowsFormsSetti ...

  9. mysql数据库的基本操作:索引、视图,导入和导出,备份和恢复

    1.索引: 索引是一种与表有关的结构,它的作用相当于书的目录,可以根据目录中的页码快速找到所需的内容. 当表中有大量记录时,若要对表进行查询,没有索引的情况是全表搜索:将所有记录一一取出,和查询条件进 ...

  10. js-day06-jQuery事件和DOM操作-练习题

    jQuery事件绑定 js中绑定事件,三种方式: 方式1: 直接在元素上,增加onXxx事件属性. <button onclick="alert(1);">点我< ...