spring jdbc操作

《Spring JDBC 操作数据库》 《Spring JDBC 操作数据库》官方文档链接:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html1、Spring Framework JDBC 简介Spring Framework JDBC抽象提供的增值可能通过下表中列出的操作顺序显示出来。 该表显示了Spring将要处理哪些操 阅读详情

1、使用JdbcTemplate的execute()方法执行SQL语句


 

Java代码
jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");


2、如果是UPDATE或INSERT,可以用update()方法。


 

Java代码
jdbcTemplate.update("INSERT INTO USER VALUES('"
           + user.getId() + "', '"
           + user.getName() + "', '"
           + user.getSex() + "', '"
           + user.getAge() + "')");

3、带参数的更新
Java代码
jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id});

Java代码
jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)", new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()});

4、使用JdbcTemplate进行查询时,使用queryForXXX()等方法
Java代码
int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");


Java代码
String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?", new Object[] {id}, java.lang.String.class);


Java代码
List rows = jdbcTemplate.queryForList("SELECT * FROM USER");


Java代码
List rows = jdbcTemplate.queryForList("SELECT * FROM USER");
Iterator it = rows.iterator();
while(it.hasNext()) {
    Map userMap = (Map) it.next();
    System.out.print(userMap.get("user_id") + "\t");
    System.out.print(userMap.get("name") + "\t");
    System.out.print(userMap.get("sex") + "\t");
    System.out.println(userMap.get("age") + "\t");
}



   JdbcTemplate将我们使用的JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等等。spring大量使用Template Method模式来封装固定流程的动作,XXXTemplate等类别都是基于这种方式的实现。
    除了大量使用Template Method来封装一些底层的操作细节,spring也大量使用callback方式类回调相关类别的方法以提供JDBC相关类别的功能,使传统的JDBC的使用者也能清楚了解spring所提供的相关封装类别方法的使用。

JDBC的PreparedStatement


 

Java代码
final String id = user.getId();
final String name = user.getName();
final String sex = user.getSex() + "";
final int age = user.getAge();

jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",
                     new PreparedStatementSetter() {
                         public void setValues(PreparedStatement ps) throws SQLException {
                             ps.setString(1, id);
                             ps.setString(2, name);          
                             ps.setString(3, sex);
                             ps.setInt(4, age);
                         }
                     });



Java代码
final User user = new User();
jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",
                    new Object[] {id},
                    new RowCallbackHandler() {
                        public void processRow(ResultSet rs) throws SQLException {
                            user.setId(rs.getString("user_id"));
                            user.setName(rs.getString("name"));
                            user.setSex(rs.getString("sex").charAt(0));
                            user.setAge(rs.getInt("age"));
                        }
                    });





Java代码
class UserRowMapper implements RowMapper {
    public Object mapRow(ResultSet rs, int index) throws SQLException {
        User user = new User();

        user.setId(rs.getString("user_id"));
        user.setName(rs.getString("name"));
        user.setSex(rs.getString("sex").charAt(0));
        user.setAge(rs.getInt("age"));

        return user;
    }
}

public List findAllByRowMapperResultReader() {
    String sql = "SELECT * FROM USER";
    return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper()));
}



在getUser(id)里面使用UserRowMapper


 

Java代码
public User getUser(final String id) throws DataAccessException {
    String sql = "SELECT * FROM USER WHERE user_id=?";
    final Object[] params = new Object[] { id };
    List list = jdbcTemplate.query(sql, params, new RowMapperResultReader(new UserRowMapper()));

    return (User) list.get(0);
}



网上收集
org.springframework.jdbc.core.PreparedStatementCreator 返回预编译SQL   不能于Object[]一起用


 

Java代码
 public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
  return con.prepareStatement(sql);
 }


1.增删改
org.springframework.jdbc.core.JdbcTemplate   类(必须指定数据源dataSource)


 

Java代码
 template.update("insert into web_person values(?,?,?)",Object[]);


  或


 

Java代码
 template.update("insert into web_person values(?,?,?)",new PreparedStatementSetter(){ 匿名内部类 只能访问外部最终局部变量

  public void setValues(PreparedStatement ps) throws SQLException {
   ps.setInt(index++,3);
 });


org.springframework.jdbc.core.PreparedStatementSetter 接口 处理预编译SQL


 

Java代码
 public void setValues(PreparedStatement ps) throws SQLException {
  ps.setInt(index++,3);
 }


2.查询JdbcTemplate.query(String,[Object[]/PreparedStatementSetter],RowMapper/RowCallbackHandler)
org.springframework.jdbc.core.RowMapper   记录映射接口  处理结果集


 

Java代码  
 public Object mapRow(ResultSet rs, int arg1) throws SQLException {   int表当前行数
   person.setId(rs.getInt("id"));
 }
 List template.query("select * from web_person where id=?",Object[],RowMapper);


org.springframework.jdbc.core.RowCallbackHandler  记录回调管理器接口 处理结果集


 

Java代码  
 template.query("select * from web_person where id=?",Object[],new RowCallbackHandler(){
  public void processRow(ResultSet rs) throws SQLException {
   person.setId(rs.getInt("id"));
 });


使用Spring JDBC框架连接并操作数据库 在前一篇博文JAVA通过JDBC连接并操作MySQL数据库中,我们知道如何通过JDBC连接并操作数据库,但是请看程序,整个程序连接数据库和关闭数据库占了很大一部分代码量,而且每次我们执行一下数据库操作都得来这么一大段重复代码,这是很烦人的。而在Spring框架中同样提供了JDBC框架,以供我们操作数据库。spring中的JDBC框架则可以为我们省去连接和关闭数据库的代码,我们只要关注我们想对数据库 阅读详情

相关推荐

Spring中如何操作JDBC

本篇文章介绍一下在Spring中如何使用JDBC,事实上,在Spring中使用JDBC和传统的JDBC或者一些JDBC框架,如:DBUtils的使用没有什么区别,所以Spring中使用JDBC是非常简单的。 获取数据库连接 在这之前,我们首先通过Spring获得对数据库的连接,创建一个Java项目,导入Spring、c3p0、数据库驱动的jar包即可,然后创建一个数据表做测试: create t...

。。。 2462

spring2.5 jdbcTemplate学习笔记

、使用JdbcTemplate的execute()方法执行SQL语句Java代码 jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");  jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name

yangguoqi的专栏 1019

基于555定时器的呼吸灯电路

呼吸灯是指LED灯在芯片的控制下完成由亮到暗的逐渐变化,感觉就像人在呼吸,其广泛使用在手机上,起到一个通知提醒的作用。呼吸灯在许多灯光装饰上也有大量使用,如音响、汽车广告牌等,在生活中较为常见。...

qq1074237849的博客 9493

spring 2.5 方便的 SimpleJdbc类,简单的对象关系映射

原文出处:http://blog.chenlb.com/2008/10/agile-simplejdbc-in-spring-2_5.html 在spring 2.5以前,使用jdbc时,比较麻烦的把查询要为每一种结果写RowMapper。JdbcTemplate 虽然有一些queryForObject,但限制在单行的结果。 有了SimpleJdbcTemplate就比较方便了,sprin...

weixin_30678349的博客 133

UE4入门实例17(Unreal制作卡通Post Process材质球)

效果展示 #1 创建Post Porcess材质球 #2 编写Shader功能 #3 设置场景区域内风格化渲染 #1 创建Post Porcess材质球 #2 编写Shader功能 创建基础效果 移除现有通道渲染 设置视图渲染范围 #3 设置场景区域内风格化渲染 #4 加群下载Shader源码:284105567 ...

Unity3d 攻城师一枚 1345

VulnHub系列之BadStore_123渗透测试

BADSTORE: 1.2.3 早期网商系统漏洞鉴赏(2004)

Flynn的博客 1630

Seventh season twenty-second episode,Chandler and Monica went to find his father,a beautiful “woman“

[Scene: Monica and Chandler's, Phoebe, Monica, and Rachel are sitting around the kitchen table as Ross enters.] Ross: Hey! Monica: Hey! Ross: Hey uh Mon, I saw the Porsche parked out front, can I get the keys? Thought I'd take that bad boy out for a little

xiyangxia666hui的博客 56万+

将机器人urdf模型转换为Mujoco环境下的mjcf模型

在使用gym环境进行人形模型站立训练的过程中,我想要将之前ros环境下的机器人urdf模型导入到mujoco环境下,这时候就需要将urdf模型转换为mujoco专用的mjcf模型。-AzureLoong.urdf是机器人模型(我这里使用青龙的模型);--custom_robot.xml是转换完成之后的机器人模型的名字和格式;包要求 Python 版本必须是 3.11 或更高),保证自己的其他训练环境和依赖不被干扰。首先将meshes文件迁移到需要输出的目录下,然后再运行转换命令。最后就可以成功输出了。

weixin_44334573的博客 3754

SpringBoot高级篇JdbcTemplate之数据查询上篇

前面一篇介绍如何使用JdbcTemplate实现插入数据,接下来进入实际业务中,最常见的查询篇。由于查询的姿势实在太多,对内容进行了拆分,本篇主要介绍几个基本的使用姿势 queryForMap queryForList queryForObject I. 环境准备 环境依然借助前面一篇的配置,链接如: 190407-SpringBoot高级篇JdbcTemplate之数据插入使用姿势详解 或...

weixin_33920401的博客 924

YOLOv11改进 - C3k2融合 | C3k2融合CBSA 收缩 - 广播自注意力:轻量级设计实现高效特征压缩,优化处理效率 | NeurIPS 2025

本文介绍收缩 - 广播自注意力(CBSA)((Contract-and-Broadcast Self-Attention))机制,并将其集成到YOLOv11中。传统注意力机制存在黑盒难理解、计算复杂度高的问题,CBSA通过算法展开推导出本质上可解释且高效的注意力机制。它先从输入数据中选出少量代表性tokens,接着对代表进行收缩计算,再将结果广播给所有原始数据。该机制计算量线性增长,具有明确数学解释,还能统一多种注意力机制。我们将CBSA代码集成到YOLOv11的C3k2模块中。实验证明,改进后的YOLOv

魔改工程师的博客 852

深入理解 SAP HANA 上的查询处理机制:从 CDS 分层建模到执行计划落地

本文探讨了S/4HANA系统中CDS视图性能问题的本质及其优化策略。文章指出,性能问题往往源于数据模型、查询编译和执行计划的综合影响,尤其在多层CDS视图叠加时表现更为明显。通过分析SAP HANA查询处理链路的四个关键阶段(SQL Plan Cache、SQL Front End、SQL Optimizer和Execution Plan),揭示了CDS视图性能波动的根本原因。文章强调,优化CDS性能需要关注数据规模、谓词选择性和执行计划稳定性,建议使用参数化查询、合理分层视图结构,并利用PlanViz等工

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4818

SpringBoot学习笔记--狂神02

SpringBoot--狂神02

小龙要努力 226

论文阅读:2024 ACM CCS “Do Anything Now”: Characterizing and Evaluating In-The-Wild Jailbreak Prompts on

大语言模型(LLMs)的滥用问题引起了公众和大语言模型供应商的高度关注。有一种特殊的对抗性提示,叫做越狱提示,它已成为绕过防护措施、让大语言模型生成有害内容的主要攻击手段。在这篇论文中,作者使用新框架JailbreakHub,对2022年12月至2023年12月期间的1405个越狱提示进行了全面分析。作者识别出131个越狱提示社区,发现了越狱提示的独特特征以及主要攻击策略,比如提示注入和权限提升。

CSPhD-winston的博客 1411

spring-jdbc操作

导包 aopalliance-1.0.jar aspectjrt-1.8.10.jar aspectjweaver-1.8.10.jar c3p0-0.9.5.2.jar commons-logging-1.1.1.jar mchange-commons-java-0.2.11.jar mysql-connector-java-5.1.30.jar spring-aop-4.3.10.RELEA...

weixin_33754065的博客 168

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Spring JDBC高级操作全解析

摘要: 本文介绍了Spring Framework中简化JDBC操作的两类高级用法。 SimpleJdbc工具类:通过SimpleJdbcInsert和SimpleJdbcCall自动推断表结构,支持链式配置,提供无SQL插入、主键回显、存储过程调用等功能,支持Map或SqlParameterSource传参。 面向对象封装:将JDBC操作建模为Java对象,如通过BeanPropertySqlParameterSource直接映射JavaBean到数据库字段。针对元数据支持不足的数据库(如PostgreS

m0_37607945的博客 986

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Spring JDBC批量操作高效指南

本文介绍了Spring Framework中JDBC批量操作的三种实现方式,旨在提高数据库操作效率。核心要点:1)使用BatchPreparedStatementSetter实现精确控制;2)通过对象列表简化操作,支持命名参数和占位符;3)针对大数据集采用分批提交策略(每批100条)。性能优化建议包括设置合理批大小、启用数据库批量支持、使用连接池和事务管理。三种方式各有优劣:传统方式灵活但繁琐,对象列表简洁但内存消耗大,分批提交适合海量数据处理。

m0_37607945的博客 977

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

springboot 引入jdbc驱动_SpringBoot整合Spring JDBC操作数据

一、jdbc简介JDBC(Java DataBase Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,术语:什么是持久层:在后面的章节我会经常用到持久层这个词,持久层就是指对数据进行持久化操作的代码,比如将...

weixin_39969976的博客 1485

采用spring进行JDBC操作

1、配置spring JDBC spring提供了进行jdbc操作的替代方法;实现了JDBC相关操作封装,使用起来更加灵活、方便。 spring提供了spring jdbc 进行jdbc操作,maven配置为: org.springframework spring-jdbc 5.0.2.RELEASE 2、使用spring jdbctemplate DM

duoduomother的专栏 295

Spring JDBC Framework详解——批量JDBC操作、ORM映射

一、Spring JDBC 概述     Spring 提供了一个强有力的模板类JdbcTemplate简化JDBC操作,DataSource,JdbcTemplate都可以以Bean的方式定义在想xml配置文件,JdbcTemplate创建只需注入一个DataSource,应用程序Dao层只需要继承JdbcDaoSupport, 或者注入JdbcTemplate,便可以获取JdbcTemplate,JdbcTemplate是一个线程安全的类,多个Dao可以注入一个JdbcTemplate;

About VincentCao,About Future... 8391

Spring JDBC 批量操作 数据

通过JDBC 操作数据库 有三种方式 第一种 是 使用 JDBC的JDBC Template ,一种是NamedParameterJdbcTemplate ,一种是 使用 Simple JDBC Insert。 具体的例子 可以 参考下面的 几种 示例。 因为我的 类 是 使用 的 Map 进行传参,而且又不想 使用 占位符 , 所以变使用了Simple JDBC Insert 参考文档...

weixin_30727835的博客 186

使用 Spring JDBC 进行数据库操作:深入解析 JdbcTemplate

Spring JDBC 是 Spring 框架中的一个模块,旨在简化数据库访问操作。它通过封装底层的 JDBC API,减少了繁琐的代码,提高了开发效率。传统的 JDBC 编程要求开发人员手动处理数据库连接、SQL 执行、错误处理以及资源释放等。而 Spring JDBC 通过提供类以及其他辅助工具,屏蔽了这些底层细节,使得数据库操作更加简单、直观且易于维护。是 Spring 框架中用于简化 JDBC 操作的核心类,它对传统的 JDBC API 做了封装,提供了丰富的方法,方便开发人员进行数据库操作。

Future_yzx的博客 1178

Spring 对JDBC操作的支持

在用JDBC进行数据库的操作的时候会在每个DAO中写有很多重复和类似的代码(建立连接,关闭连接等等),Spring的JDBC框架对这些重复的操作做了提取,形成了模板,使用Spring的JDBC框架的开发者通过提供SQL语句和在必要的时候提供callback类(用于提供更新操作的值和从返回结果集中提取返回结果),开发者就不用再去写那些重复的建立连接,关闭连接的代码了,这样不但减少了代码量,同时也避免

交换一个思想,能得到俩思想 4343

Spring JDBC:简化数据库操作的利器

Spring JDBC是Spring框架提供的一种简化数据库操作的机制。它为JDBC(Java Database Connectivity)提供了一个更高层次的抽象,使得开发者可以更加便捷地进行数据库访问,减少了JDBC中繁琐的资源管理和异常处理工作。JDBC是Java与数据库交互的标准方式,但原生的JDBC API存在一些缺点,比如需要大量的模板代码、异常处理复杂等。Spring JDBC通过JdbcTemplate类封装了这些繁琐的操作,使得开发者能够更加专注于业务逻辑,而不是低级的数据库细节。

Future_yzx的博客 1072

Spring JDBC实现CURD操作

把这当成一个记事本,跟着一个文档在学JDBC。顺便说下,距离考研还有50多天,我要把我接下来三个月的好运都送给我家笨先生,GIVE ME FIVE! 简单介绍几个概念 1、Spring:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明 管理的(Spring根据这些配置 内部通过反射去动态的组装对象) Spring是一个容器,凡是在容器里的对象才会有Spring...

Amy_mm的博客 443

java jdbc 批量查询_Spring JDBC批量操作

以下示例将演示如何使用spring jdbc进行批量更新。我们将在单次批次操作中更新student表中的记录。student表的结果如下 -CREATE TABLE student(id INT NOT NULL AUTO_INCREMENT,name VARCHAR(20) NOT NULL,age INT NOT NULL,PRIMARY KEY (id));SQL语法:String S...

weixin_33514864的博客 2088
上一篇: Netty概述
下一篇: Spring 3.x jar 包详解 与 依赖关系
我是一只懒虫
博客等级 码龄17年 147粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值