hibernate框架dataSource,session,sessionFactory,HibernateTemplate,HibernateDaoSupport类详细介绍
萌新小笔记:
用过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,比如事务管理器等等
- golang 中sync.WaitGroup以及select简单实用
- Mycat分库分表的简单实践
- Go语言数组
- mac系统下搭建go语言环境
- Golang语言社区--【基础知识】入门
- Go语言的小细节--map
- RBD至FileStore之所见(原理篇)
- FileStore压缩存储(优化篇)
- 深入学习Golang—channel
- 当Python字符串遇上MySQL
- Spring Boot 2.0正式发布,升还是不升呢?
- Spring Cloud构建微服务架构:分布式服务跟踪(入门)
- Spring Cloud构建微服务架构:分布式服务跟踪(跟踪原理)
- Spring Cloud Gateway真的有那么差吗?
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Android流式布局FlowLayout详解
- Linux 专题
- Go语言实现UDP通信
- Android多渠道打包的方法步骤
- Android编程实现压缩图片并加载显示的方法
- Android串口通信封装之OkUSB的示例代码
- Android 中Activity 之间传递参数
- Android开发简单实现摇动动画的方法
- Android 中menu同时显示图标和文字的实现
- android基于SwipeRefreshLayout实现类QQ的侧滑删除
- PopupWindow自定义位置显示的实现代码
- Bootstrap 下拉菜单.dropdown的具体使用方法
- Android访问assets本地json文件的方法
- Android延时操作的三种方法
- 5步教你快速写一个android Router路由框架