Spring 梳理-数据访问-DB
- 针对接口编程
DAO是指数据访问对象(data access object),它提供了数据读取和写入到数据库中的一种方式。Spring认为,它应该以接口的方式发布功能,而应用程序的其他部分需要通过接口的形式进行访问。
- 统一异常体系
- 为了实现数据访问层与应用程序的的其他部分的解耦,Spring采用的一个方式就是提供贯穿整个DAO框剪的统一异常体系。
- JDBC中的SQLException,它表示尝试访问数据库时出现异常,但是却无法做出相对应的处理,太模糊了
- Hibernate提供了20个左右的异常,分别对应特定的数据库访问问题。太多了,需要写20个左右的catch块。而且,Hibernate异常时其特有的,试想下,如果持久层抛出特定的Hibernate的异常,那么应用程序层必须解释并处理该异常,使得Hibernate持久层与程序应用层耦合,不符合我们的"针对接口编程"的思想原则
- 因此,我需要的是数据访问异常具有描述性有与特定的持久化框架无关(减少耦合)
- Spring的平台无关持久化异常且不用写catch代码块
- Spring的异常都继承自DataAccessException,它是一个非检查型异常。至于是否有必要捕获异常,决定权在开发人员手中
- 为了使用Spring的数据访问异常,就需要使用Spring所提供的数据访问模板
- Spring提供了多个可选的模板
- 使用DAO支持类
- 数据访问模板并不是Spring数据访问框架的全部。
- Spring提供了DAO支持类,而将业务自己的DAO类作为它的子类。
当编写应用程序自己的DAO实现时,可以继承DAO支持类并获取访问方法来直接访问底层的数据访问模板。
例如,应用程序的DAO继承自JdbcDaoSupport,那么它只要盗用getConnection()方法就可以获得JdbaTemplate并使用它。如果你需要访问底层的持久化平台,则每个DAO支持类都能够访问其与数据库进行通信的类。例如,JdbaDaoSupport包含一个getConnection()方法,可以直接处理JDBC连接。
总结一句话:Spring DAO支持类提供了方便的方式来使用数据访问模板
- 配置数据源
- 大多数持久化功能都依赖于数据源,因此,在创建模板和DAO之前,我们需要在Spring中配置一个数据源以便DAO可以访问数据库。
Spring提供了在上下文中配置数据源Bean的多种方式:
通过JDBC驱动程序定义数据源
通过JNDI查找的数据源
连接池数据源
我们建议使用连接池获取连接,如果可以,也建议通过应用服务器的JNDI来获取池中的数据源
- 使用JNDI数据源.详细使用方法参考:
- 使用数据源连接池
相比于JNDI查找数据源,数据库连接池是直接配置在Spring中(也就是说系统管理员不能进行热切换)
使用数据源连接池推荐集成DBCP项目:https://commons.apache.org/proper/commons-dbcp/
DBCP包含了多个数据源类,其中最常用的是BasicDataSource,它类似于Spring直达udeDriverManagerDataSource
- 还可以使用c3p0数据连接池
- 在Spring中配置DBCP的数据源方式:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" default-init-method="turnOnLights" default-destroy-method="turnOffLights" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- Bean declarations go here --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mysql" /> <property name="username" value="root" /> <property name="password" value="mysql" /> <property name="initialSize" value="" /> <property name="maxActive" value="" /> </bean> </beans>
- 基于JDBC驱动的数据源。不建议使用
在Spring中,通过JDBC驱动配置数据源最简单。Spring提供了两种数据源对象供选择:
DriverMavagerDataSource:在每个连接请求时会返回一个新的新建连接,并没有和DBCP一样采用池化管理。
SimpleConnectionDataSource:在每个连接请求时都会返回同一个连接。尽管他不是严格的连接池,但是你可以看成是initialSize和maxActive都为1的连接池。
上述的配置与BasciDataSource配置类似,略。
- 使用JDBC模板
Spring的JDBC模板承担了资源管理和异常处理的工作,简化了JDBC的代码。Spring为JDBC提供了3个模板类:
JdbcTemplate:最基本的Spring JDBC模板,它支持最简单的JDBC数据库访问功能意见简单的缩影参数查询。 首选。
NamedParameterJdbaTemplate:使用该模板类执行查询操作时,可以将查询值以命名参数的形式绑定到SQL中,而不是使用简单的索引参数。
SimpleJdbcTemplate:该模块利用Java 5的一些特性(如:自动装箱、泛型和可变参数列表)来简化JDBC模板的使用
- 参考:https://www.cnblogs.com/jiangtao1218/p/9852874.html
- 使用Spring的JDBC DAO支持类
思考一个问题,我们在定义JdbcSpitterSDAO.java类时,DAO类需要添加一个SinpleJdbcTemplate的属性以及对于的get/set方法用来注入。如果一个应用程序只有一个DAO类,添加这个属性没什么问题,但是实际上我们会面对很多对象的DAO,这样就会产生大量重复的工作。
解决方案是为所有的DAO类创建一个通用的父类,在其中有SinpleJdbcTemplate属性,子类通过父类进行数据库访问。如图:
- 实际上,Spring框架提供了3个支持类:JdbcDaoSupport、SimpleJdbcDaoSupport和NamedParameterJdbcDaoSupport。通过使用Spring的JDBC DAO 支持类来使用JDBC模板。
Spring 梳理-数据访问-DB的更多相关文章
- Spring04-SpringEL&Spring JDBC数据访问
一. SpringEL入门 Spring动态语言(简称SpEL) 是一个支持运行时查询和操作对象图的强大的动态语言,语法类似于EL表达式,具有诸如显示方法和基本字符串模板函数等特性. 1. 准备工作 ...
- 06.深入浅出 Spring Boot - 数据访问之Druid
代码下载:https://github.com/Jackson0714/study-spring-boot.git 一.Druid是什么? 1.Druid是数据库连接池,功能.性能.扩展性方面都算不错 ...
- 07.深入浅出 Spring Boot - 数据访问之Mybatis(附代码下载)
MyBatis 在Spring Boot应用非常广,非常强大的一个半自动的ORM框架. 代码下载:https://github.com/Jackson0714/study-spring-boot.gi ...
- Spring ( 五 )Spring之数据访问与事务管理
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.Spring之数据访问 1.Spring数据访问工程环境搭建 jdbc.properties配置 ...
- Spring Boot数据访问之动态数据源切换之使用注解式AOP优化
在Spring Boot数据访问之多数据源配置及数据源动态切换 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中详述了如何配置多数据源及多数据源之间的动态切换.但是需要读数据库的地方,就 ...
- Spring Boot数据访问之多数据源配置及数据源动态切换
如果一个数据库数据量过大,考虑到分库分表和读写分离需要动态的切换到相应的数据库进行相关操作,这样就会有多个数据源.对于一个数据源的配置在Spring Boot数据访问之数据源自动配置 - 池塘里洗澡的 ...
- Spring Boot数据访问之整合Mybatis
在Mybatis整合Spring - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中谈到了Spring和Mybatis整合需要整合的点在哪些方面,需要将Mybatis中数据库连接池等相关对 ...
- Spring Boot数据访问之Druid连接池的配置
在Spring Boot数据访问之数据源自动配置 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中数据源连接池方式缺省(type)情况下默认使用HikariCP,那不缺省如何配置呢?我们 ...
- Spring Boot数据访问之数据源自动配置
Spring Boot提供自动配置的数据访问,首先体验下,Spring Boot使用2.5.5版本: 1)导入坐标: 2.5.25版本支持8.0.26mysql数据库驱动.spring-boot-st ...
随机推荐
- Unity Editor已停止工作
在更换系统之后,可能会出现打开刚安装好的Unity,显示Unity Editor已停止工作,这时候我们考虑是系统win7的问题.可以在原系统上升级,也可以重新安装,升级.文中所涉及到的软件,可在右侧加 ...
- Leetcode之回溯法专题-90. 子集 II(Subsets II)
Leetcode之回溯法专题-90. 子集 II(Subsets II) 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入 ...
- 边缘缓存模式(Cache-Aside Pattern)
边缘缓存模式(Cache-Aside Pattern),即按需将数据从数据存储加载到缓存中.此模式最大的作用就是提高性能减少不必要的查询. 1 模式 先从缓存查询数据 如果没有命中缓存则从数据存储查询 ...
- ubuntu安装elasticsearch及head插件
1.安装elasticsearch,参考http://www.cnblogs.com/hanyinglong/p/5409003.html就可以了 简单描述下: mkdir -p /usr/local ...
- 第8章 浏览器对象模型BOM 8.2 location对象
location 是最有用的 BOM对象之一,它提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能.事实上, location 对象是很特别的一个对象,因为它既是 window 对象的属性, ...
- A-The power of Fibonacci_2019牛客暑期多校训练营(第九场)
题意 求\(\sum_0^n{Fb}_i^m \mod (1e9)\) 题解 模1e9时的斐波那契数列循环节太大,考虑把模数质因数分解成\(2^9\cdot5^9\),此时循环节变成768和78125 ...
- CF - 1106 E Lunar New Year and Red Envelopes DP
题目传送门 题解: 首先要处理出每个时间点会选择哪一个线段. 对于这个问题,可以用multiset去维护信息. 当时间线开始的时候,往mutiset里面插入这个信息,当时间线结束的时候,删除这个信息. ...
- == != === equals() 区别
java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型. byte,short,char,int,long,float,double,boolean,他们之间的比较,应用双等号(==) ...
- 从壹开始学习NetCore 44 ║ 最全的 netcore 3.0 升级实战方案
缘起 哈喽大家中秋节(后)好呀!感觉已经好久没有写文章了,但是也没有偷懒哟,我的视频教程<系列一.NetCore 视频教程(Blog.Core)>也已经录制八期了,还在每周末同步更新中,欢 ...
- SpringBoot中获取微信用户信息从未如此简单!
前言 不知道你是否参加过拼多多上邀请微信好友砍价功能,这个功能实现首先需要考虑的就是获取微信用户的信息.获取用户信息就是获取公众号下微信用户的信息,今天我就来讲讲如何从公众号下获取微信用户信息. 需要 ...