首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring源码学习笔记(13)——JDBC

Spring源码学习笔记(13)——JDBC Spring提供了JdbcTemplate模板类来操作数据库,JdbcTemplate是对原生JDBC进行了全面的封装,统一处理了数据库连接获取与释放等操作...一. execute()方法 从简单更新语句入手 使用JdbcTemplateupdate()方法可以进行数据库更新操作,源码如下: public int update(String sql,...execute()实现如下: public T execute(PreparedStatementCreator psc, PreparedStatementCallback action...处理异常警告 protected void handleWarnings(Statement stmt) throws SQLException { //当设置为忽略警告时,只尝试打印日志...定义了SQLWarning类描述数据库警告,警告意思是数据发生了某种错误,但是并不会影响程序正常执行,因此只是对警告进行打印日志,并没有抛出异常。

48650

微服务项目:尚融宝(10)(后端接口:统一异常处理)

三、处理特定异常 如果我们不想显示统一“服务器内部错误”,需要个性化显示异常信息,那么需要针对特定异常做处理 1、添加依赖 在guigu-common中添加jdbc依赖 org.springframework spring-jdbc 2...return R.setResult(ResponseEnum.BAD_SQL_GRAMMAR_ERROR); } 3、测试 问题:上面的例子虽然针对特定异常显示个性化错误信息,但是你会发现,针对每个不同异常我们都需要在项目中添加对应处理方法..."); } else { return R.error().message("保存失败"); } } 4、测试 测试  结果 五、异常处理优化 目标:以优雅 Assert...我们可以在控制台日志中查看具体错误原因。前端只需要返回相对简单友好提示即可。

27630
您找到你想要的搜索结果了吗?
是的
没有找到

从源码解析 Spring JDBC 异常抽象

初入学习 JDBC 操作数据库,想必大家都写过下面的代码: 数据库为:H2 ? 如果需要处理特定 SQL 异常,比如 SQL 语句错误,这个时候我们应该怎么办?...使用 Spring 之后,我们不再需要强制捕获异常。如果 SQL 语句运行存在异常,Spring 会抛出其内置特定异常。...如上面 SQL 语句异常将会抛出 BadSqlGrammarException。除了这个异常之外,Spring 还定义很多数据库异常。 ?...Spring 默认在 org/springframework/jdbc/support/sql-error-codes.xml 归纳不同数据库厂商相关错误码。...使用 SQLErrorCodes#customTranslations ,然后在 sql-error-codes.xml 配置相关错误码转换规则。 第三种方式改动最小,比较简单

1.1K20

Spring事务源码分析专题(一)JdbcTemplate使用及源码分析

对源码分析前,我希望先介绍一下Spring中数据访问相关内容,然后层层递进到事物源码分析,主要分为两个部分 JdbcTemplate使用及源码分析 Mybatis基本使用及Spring对Mybatis...运行后数据库中确实插入了一条数据 对于JdbcTemplate简单使用,建议大家还是要有一定熟悉,虽然我现在在项目中不会直接使用JdbcTemplateAPI。...语句封装后,直接调用了execute方法 // execute方法是jdbcTemplate基本API,不管是查询、更新还是保存 // 最终都会进入到这个方法中 return...3、执行Sql 没啥好说,底层其实就是调用了jdbc一系列API 4、处理警告 也没啥好说,处理Statement中警告信息 protected void handleWarnings(Statement...,通过这篇文章是希望让大家对Spring数据访问有一定了解,相当于热身吧,后面的文章难度会加大,下篇文章我们将介绍更高级数据访问,myBatis使用以及基本原理、事务管理以及它跟Spring整合原理

38910

Spring源码解析之JDBC

引用自博客:http://jiwenke-spring.blogspot.com/ 下面我们看看Spring JDBC相关实现,在Spring中,JdbcTemplate是经常被使用类来帮助用户程序操作数据库...execute()基本方法,然而这里回调实现是 Spring 为我们完成查询过程  4    return execute(psc, new PreparedStatementCallback()...从上面我们看到 JdbcTemplate 提供了许多简单查询和更新功能,但是如果需要更高层次抽象,以及更面向对象方法来访问数据库。...在 JdbcTemplate 中,具体调用可以参考书中例子 - 是通过以下调用起作用: 1public Object execute(String sqlPreparedStatementCallback...使用例子,可以看到使用 Spring JDBC 可以帮助我们完成许多数据库操作。

21230

DDD落地,如何持久化聚合

使用 Spring Dat JDBC Mybatis 就是一个 SQL 模板引擎,而 JPA 做太多,有没有一个适中 ORM 来持久化聚合呢?...Spring Data JDBC 就是人们设计出来持久化聚合,从名字来看他不是 JDBC,而是使用 JDBC 实现了部分 JPA 规范,让你可以继续使用 Spring Data 编程习惯。...Spring Dat JDBC 一些特点: 没有 Hibernate 中 session 概念,没有对象各种状态 没有懒加载,保持对象完整性 除了 SPring Data 基本功能,保持简单,...如果你使用 Spring Boot,可以直接使用 spring-boot-starter-data-jdbc 完成配置:spring-boot-starter-data-jdbc不过需要注意是,Spring...Data JDBC 逻辑: 如果聚合根是一个新对象,Spring Data JDBC 会递归保存所有的关联对象。

2.5K20

In aggregated query without GROUP BY...this is incompatible with sql_mode=only_full_group_by

数据库查询时,出现如下错误: Caused by: com.mysql.jdbc.exceptions.jdbc4MySQLSyntaxErrorException: In aggregated query...o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved exception caused by Handler execution: org.springframework.jdbc.BadSqlGrammarException...设置不当引起,修改下sql_mode即可: 查询: select version(), @@sql_mode; 1.方式一 修改 SET sql_mode=(SELECT REPLACE(@@sql_mode...risks symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 在配置文件中添加指定sql_mode.../systemctl restart mysqld.service 此时sql_mode设置就持久化到mysql了,重启也不会出问题了。 查询文件位置:find .

97720

Spring Data JDBC参考文档

此外,概念上非常简单事情在 JPA 中变得相当困难。 Spring Data JDBC 旨在通过采用以下设计决策在概念上更简单: 如果您加载一个实体,SQL 语句就会运行。...完成此操作后,您将拥有一个完全加载实体。没有进行延迟加载或缓存。 如果您保存一个实体,它将被保存。如果您不这样做,则不会。没有脏跟踪,也没有会话。 有一个关于如何将实体映射到表简单模型。...此外,对于 Spring Data JDBC,这意味着可从聚合根访问所有实体都被视为该聚合一部分。...Spring Data JDBC 假定只有聚合具有指向存储聚合非根实体外键,并且没有其他实体指向非根实体。...默认情况下,Spring Data尝试使用生成属性访问器,并在检测到限制时回退到基于反射访问器。 内容提示:本文(Spring Data JDBC参考文档)未完待续......

1.4K30

聊聊springboot项目全局异常处理那些事儿

之前团队业务错误码定义是:业务服务前缀 + 业务模块 + 错误码,如果是识别不了异常,则使用业务前缀 + 固定模块码 + 固定错误码。...当时我们临时解决方案是通过spring.application.name来解决。因为全局异常代码块抽离出来后,最终还是要被服务引入。...,我们业务微服务项目有聚合层,某些聚合层是不需要依赖存储介质,比如mysql。...因此这些聚合层项目pom就不会引入类似mybatis相关依赖。但我们全局异常又需要类似mybatis相关依赖,这样导致如果要引用全局异常模块,有得额外加入业务方不需要jar。...同时这边有个细节点,就是全局异常可能就得细分,即把原来大一统全局异常,按业务场景分开,比如存储介质相关存储异常,web相关异常 总结 本文主要讲当将全局异常抽离成jar,可能会发生问题。

56910

Spring源码】JDBC数据源访问实现

一、阅读线索 开始我们今天Spring【模块阅读】,来看看Data AccessJDBC模块是怎么设计。...Data Access with JDBC 也就是提供了数据访问能力,我们可以使用其来进行各种数据库访问与操作。 先整体看下代码组织结构,探索下阅读线索二。...datasource:包含一个易于DataSource访问实用程序类和各种简单DataSource实现。...这其中每一个查询、更新方法就是遵循JDBC规范模板方法。Spring就是通过这些模板方法来对数据源数据进行操作。 到这我们就解决了阅读线索二。...jdbc模块核心设计就是两部分: 一是实现对数据源访问连接。 二是通过JDBC规范模板对数据源数据进行操作。 三、总结 我们再来看看阅读线索三,这方面我们从设计模式进行入手。

8221

Spring Data JDBC参考文档 三

原标题:Spring认证|Spring Data JDBC参考文档三 (内容来源:Spring中国教育管理中心) 9.6.9. 身份证生成 Spring Data JDBC 使用 ID 来标识实体。...一个重要约束是,在保存实体后,该实体不能再是新。请注意,实体是否是新实体是实体状态一部分。对于自动增量列,这会自动发生,因为 ID 由 Spring Data 使用 ID 列中值设置。...乐观锁定 Spring Data JDBC 通过@Version在聚合根上注释数字属性来支持乐观锁定 。...每当 Spring Data JDBC 使用这样版本属性保存聚合时,会发生两件事:聚合更新语句将包含一个 where 子句,检查存储在数据库中版本实际上未更改。...Spring Data JDBC 仅支持命名参数。 9.7.3. 命名查询 如果如上一节所述,注解中没有给出查询,Spring Data JDBC尝试定位一个命名查询。

1.2K20

SpringJDBC最佳实践--上

SpringJDBC最佳实践--上 引子 基于TemplateJDBC使用方式 JDBC尴尬 JdbcTemplate诞生 JdbcTemplate演化 模板方法模式与CallBack之间关系...---- ---- 引子 在一开始,会介绍一下原生JDBC使用,此时不会涉及到spring使用,但是我们还是利用yml文件来存放数据源配置信息,因此我们需要一个yaml读取工具类...JDBC知识点回顾教程 ---- 简单jdbc工具类一览: public class JdbcUtil { private final String yamlFilePath; private...有非常多重复性代码需要封装,这一点通过我们简单封装一个jdbc工具类就可以看出,因此我们需要一个足够方便,对jdbc工具类,来简化我们对jdbc操作,此时SpringJdbcTemplate...,然后再读取出来,将图片保存到另一个目录下 完整测试源码如下,测试是成功,大家可以自行拷贝尝试: public class BlobTestMain { private static final

77910

Flink 实践教程:进阶7-基础运维

视频内容 基本错误 缺少 DML 语句 一个完整 Oceanus SQL 作业(JAR 作业里使用 SQL 语句)主要包含以下几个模块:Source(DDL)、Sink(DDL)和 INSERT(DML...open JDBC writer Caused by: java.sql.SQLException: Access denied for user 'joylyu'@'10.0.0.101' (using...password: YES) 主键问题 有 update/delete 数据(回撤流数据)情况下,Sink 端必须定义主键,这种情况无主键定义或者主键定义错误也是语法检查失败常见错误。...需尝试增加作业算子并行度(CU)数和优化内存占用,避免内存泄露。...需尝试增加作业算子并行度(CU)数和优化内存占用,避免内存泄露 JVM 退出等致命错误 进程退出码通常出现在以下关键字后,可以辅助定位 JVM 或 Akka 等发生了致命错误被强制关闭等错误:exit

2.4K31

解析SQLSyntaxErrorException异常:not in GROUP BY clause

今天,我们将讨论一个常见Java异常——java.sql.SQLSyntaxErrorException,并深入探讨其中一个具体错误信息:Expression #1 of SELECT list is...SQL查询中SELECT列表中表达式不在GROUP BY子句中,并且包含了非聚合列'cnpc.T1.id',这个列在GROUP BY子句中列上没有函数依赖关系。...解决方案 你可以采取以下几种方法来解决这个问题: 在GROUP BY子句中包含所有非聚合列:根据错误信息,你可以尝试在GROUP BY子句中包含'cnpc.T1.id'列,即使它不是聚合列。...修改sql_mode:如果你不需要启用only_full_group_by模式,你可以修改数据库sql_mode设置,将其更改为允许非聚合列在SELECT列表中。...,NO_ENGINE_SUBSTITUTION'; 根据你具体需求和查询逻辑,选择适合解决方法来修复这个错误

26430
领券