spring4.0读书笔记4---Spring持久层--JDBC

2024-02-05 05:18

本文主要是介绍spring4.0读书笔记4---Spring持久层--JDBC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


之前的数据访问我们需要:初始化数据访问框架,打开链接,处理各种会出现的异常,关闭异常。在操作中很容易损坏数据

数据访问的核心:数据源,连接池,JDBC的关系
数据源和数据核心都死抽象的概念

数据源和连接池是由容器提供的(例如:tomcat) ;连接池分配,管理,销毁连接(Connection),数据源保存你连接的数据库,创建连接(Connectioon )【使用了一种设计模式:工厂模式】
数据源和连接池可以看为是一体,是处理数据访问的核心;JDBC可以理解为,对这些的实现—
JDBC是Java提供的一系列的接口,规范,第三方(数据库)提供实现类(jar 包)(叫做驱动,驱动将高级语言翻译为对数据库的操作)
JDBC实现数据源连接池,翻译高级语言---->对数据库的操作
之后的一些数据访问的方式都是对数据访问核心的不同实现,以及在不同框架下的实现(本质都是一样的)只能说是更多的封装,解耦,来实现核心
spring 自带了一组数据访问框架,集成了多种数据访问技术,无论是原生的jdbc 还是其他的数据源,spring自动帮你清除枯燥的访问逻辑,处理访问底层的的数据访问,使代码更关注于业务逻辑

spring中的数据访问思想

为了避免持久化处理逻辑分散到多个组件中,所以最好将处理持久化的逻辑集中在一个或者两个组件中;这种组件被称为数据处理对象(data accsee object DAO )或者Repository

  1. 为了实现更好的低耦合,采用接口暴露
    服务对象本身是不会处理数据访问的,而是将数据访问委托给Repository ;服务对象是通过Repository 接口来访问Repository 的实现【服务对象并没有直接与数据访问实现绑定在一起,实现低耦合】

  2. 统一的异常体系
    在JDBC数据访问出现的所有异常都使用SQLException ,但是,不会告诉你哪里出现错误【基本等于无用】,要通过他具体的属性才能知道哪里出现了错误,但为什么还是要强制捕获,一位他是数据访问的通用异常。JDBC中没有与错误对象的异常
    在spring中 每一种数据访问出现的问题,几乎都有一个对应的异常;这些异常继承于:DataAccessException 这是一个非检查的异常,没有强制性的要求写catch 语句,将是否捕获异常的权力交给了开发人员

  3. 数据访问模块化

模块化:事件完成的过程是不变的,步骤也是不变的,变得是每一个步骤的具体实现

数据访问过程中,不变的是:需要获取数据存储的连接,并且自处理完成之后释放连接;变化的 是: 获取这个连接之后,我们要怎么样查询数据或者是更新数据
spring中将固定和变化的连部分分为两个类:

  1. 模板(template ) :处理不变的部分。准备资源,开始事务,提交/事务回滚,关闭资源和处理异常
  2. 回调:sql 语句,绑定参数,整理结果
    我们需要关注的是数据访问逻辑

概念的总结
在这里插入图片描述


先介绍spring中的JDBC

配置数据源

  1. 通过JDBC 驱动定义的数据源是不带池功能的数据源,也就是说DataSource 中只有一个连接,在性能上有极大的局限性
  2. 嵌入式数据源(Embedded database)
    也称为嵌入式数据库,是一个轻量级的数据库,是作为运行程序的一部分运行,而不是应用连接的独立数据库服务器【JDBC就是这种方式】嵌入式数据库在每次重启的时候,都会初始化数据库和填充数据

嵌入式数据库和数据库服务器的区别:

  1. 最大的不同就是运行地址空检不同。数据库服务器,独立的运行一个守护进程,但是嵌入式数据库 行程序在同一个进程
  2. 嵌入式数据库不需要数据库驱动程序,直接将数据库的库文件链接到程序中,应用程序通过API访问
    详解:https://blog.csdn.net/Stitch__/article/details/88870021
springboot 中配置H2 嵌入式数据库
3. 使用JDBC命名空间<jdbc:embedded-database    id ="dataSource" type ="H2"><jdbc:script location = xxx/schema.sql>   <jdbc:script location = xxx/test-data.sql></jdbc:embedded-database>使用<jdbc:script >  来搭建嵌入式数据库;可以不配置,也可以做多个配置
schema.sql  :包含创建数据库中表的SQL 【springboot 中也可以配置schema.sql 文件初始化数据库】
test-data.sql : 将测试数据填充到数据库中  

jdbc 命名空间除了搭建嵌入式数据库之外<jdbc:embedded-datasource> 元素还暴露了一个数据源,这里id 被设置为 datasource 【连系到向容器中添加组件时就会产生或者自定义一个id 作为组件在容器中的名字】这就是暴露的数据源;所以如果在程序中需要使用javax.sql.DataSource 就可以直接注入datasource bean

使用java 配置嵌入式数据库:
@Bean
public DataSource dataSource()){return new EmbeddedDataBaseBuilder().setType(EmbeddedDatabaseBuilderType.H2).setScript("classpath:schema.sql").setScript("classpath:test-data.sql").build();}使用Profile 选择数据源:在不同的环境下数据源可能不一样
1. Java 代码配置:在每一个@Bean 上加上注解:@Profile("环境名称")会在运行时选择数据源,取决于哪一个profile被激活
2. 使用XML文件配置Profile选择:<beans profile = "环境名称"><jdbc : embedded-datasource></jdbc : embedded-datasource></beans>

在Spring中使用JDBC

jdbc 是建立在SQL上的。jdbc 允许你使用数据库的所有特征,这是其他框架不鼓励甚至是禁止的。
使用JDBC所提供的直接操作数据库的API


你在一段代码中要完成的事:获取连接,创建语句,绑定参数,清理资源,处理异常,并且SQLException 这个异常不会给你任何解决这个异常的信息;也就是说你写了差不多20行的代码可能只是为了插入一条数据;每一次对数据库的操作,其实有80% 的代码都是样板代码,并且要求一次正确【关闭资源的代码错误,资源也无法关闭】
使用JDBC模板
spring自带的jdbc 框架承担了资源管理和异常处理的工作,所以只需要编写从数据库中读写数据的代码.spring 将样板代码抽取到了模板类中
jdbcTemplate
让jdbcTemplate 正常工作,只需要为他设置DataSource

@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource){return new JdbcTemplate(dataSource);   dataSource 可以是javax.sql.DataSource 的任何实现
}使用:将jdbcTemplate 装配到Repository 中,并使用他来访问数据库
在实现访问的类上@Regpository 表示这个类会在扫描组件的时候自动创建;例如用户相关的数据操作
类的构造函数:
@Ingect
public jdbcSpitterRepository(JdbcOperation jdbcOperation){  @Inject 会自动获取一个JdbcOperation 对象this.jdbcOperation=jdbcOperation;
}
JdbcOperation 是一个接口,定义了jdbcTemplate 所实现的操作。
通过JdbcOperation,达到 jdbcSpitterRepository与 JdbcTemplate 的低耦合或者直接声明为Bean
@Bean
...
return new xxxx(jdbcTemplate);

jdbcTemplate 模板中的相关方法:

  1. 更新数据:updata(sql,参数) ; jdbcoperations(sql,username,password.....)
  2. 查询数据:queryForObject(sql,Object,参数);从ResultSet 中获取数据封装到指定的对象中
    sql:查询语句
    Object :查询到的数据封装在那个对象中
    查询的参数
查询:
public Spitter findOne(long id){return jdbcOperation(sql,new SpitterRowMapper(),id)
}
pucliv static finall class SpitterRowMapper(){ 
之所以能将数据源封装到一个对象中,是因为在这里的设置,其实还是一个检索封装public Spitter mapRow(ResultSet set ,int rowNum){return new Spitter(set.getLong("id"),set.getstring("username").......当创建SpitterRowMapping 的时候,就从ResultSet中获取数据封装成Spitter的对象
)
}
  1. 查询所有的数据:
    List<Map<String,Object>> list = jdbcTemplate.queryForList("select * from department")

名命参数模板NumberParameterJdbcTemplate
在sql 语句需要参数的时候,传入的参数和语句中所需的参数的顺序必须要保持一致,为了更方便不用考虑参数顺序的问题,可以使用NumberParameterJdbcTemplate模板声明和常规的JdbcTemplate 的方法一致

@Bean
public NumberParameterJdbcTemplate jdbcTemplate(DataSource dataSource){return new JdbcTemplate(dataSource);   }
使用:
sql 语句:以插入语句为例
String sql = "INSERT INTO SPITTER"+"(id,username,gender,hobby)"+"(:ID,USERNAME,HOBBY)";
Map<String,Object> paraMap=new HashMap<String,Objcet>();参数绑定:
paraMap.put("ID",spitter.getid());
paraMap.put("USERNAME",spitter.getusername());
paraMap.put("HOBBY",spitter.gethobby());语句执行:
jdbcOperator.updata(sql,paraMap);名命参数是通过Map 进行绑定的

这篇关于spring4.0读书笔记4---Spring持久层--JDBC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/679838

相关文章

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

Java中Integer128陷阱

《Java中Integer128陷阱》本文主要介绍了Java中Integer与int的区别及装箱拆箱机制,重点指出-128至127范围内的Integer值会复用缓存对象,导致==比较结果为true,下... 目录一、Integer和int的联系1.1 Integer和int的区别1.2 Integer和in

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap