当前位置: 首页 > web >正文

【Spring JDBC】PreparedStatementCreatorFactory使用流程

Spring JDBC

类名作用
PreparedStatementCreator表示一个准备好的 SQL 语句,它知道怎么设置参数
PreparedStatementCreatorFactory用来生成 PreparedStatementCreator 的工厂
  • PreparedStatementCreatorFactory的好处

    • 形成模版,每次插入只用填充数据就行,有可复用性
  • 使用流程

    • 构造方法PreparedStatementCreatorFactory(String sql, int… types)

      • 其中sql是带有问号占位符的数据库语句
      • types 是每个 ? 的 JDBC 类型,如 Types.VARCHARTypes.TIMESTAMP,用来告诉数据库如何处理这些参数。
    • 如果你想获取插入后自动生成的主键

      • pscf.setReturnGeneratedKeys(true);  // 让它返回主键
        pscf.setGeneratedKeysColumnNames("id");  // 指定主键列名(可选)
        
    • 使用工厂创建 PreparedStatementCreator

      • PreparedStatementCreator psc = pscf.newPreparedStatementCreator(Arrays.asList(order.getDeliveryName(),order.getDeliveryStreet(),...Timestamp.valueOf(order.getPlacedAt())
        ));
        
      • //上面的创建一个准备执行 SQL 的对象,实际操作
        preparedStatement.setString(1, order.getDeliveryName());//数字1表示给第一个问号传递值
        preparedStatement.setString(2, order.getDeliveryStreet());//数字2表示给第二个问号传递值
        ...
        
    • 执行并获取主键(可选)

      • KeyHolder keyHolder = new GeneratedKeyHolder();
        jdbcTemplate.update(psc, keyHolder);//这句才是执行插入操作,之前的都是准备阶段,keyHolder的传入是为了获取现在主键到哪了//让 JdbcTemplate 在 执行完插入语句后,自动把主键的值“放到这个 keyHolder 里”,
        //我们后面再从 keyHolder 里取出这个值(用 getKey())。// 获取主键值
        long orderId = keyHolder.getKey().longValue();
        
  • 为什么要写明参数类型

    • 防止SQL注入时,类型转换发生错误
http://www.xdnf.cn/news/229.html

相关文章:

  • 生态篇|多总线融合与网关设计
  • 59. 螺旋矩阵 II
  • 【字节跳动AI论文】海姆达尔:生成验证的测试时间扩展
  • 基于Redis的4种延时队列实现方式
  • This article is for Unreal Authorized Indicator Application
  • Zookeeper 概述
  • 自学新标日第十九课复习版本
  • 游戏引擎学习第232天
  • 解锁古籍中的气候密码,探索GPT/BERT在历史灾害研究中的前沿应用;气候史 文本挖掘 防灾减灾;台风案例、干旱案例、暴雨案例
  • linux服务器命令行获取nvidia显卡SN的方法
  • 第六章:6.6输入以下的杨辉三角形,要求输出10行
  • Linux学习——守护进程编程
  • 【Hot100】41. 缺失的第一个正数
  • vulfocus-empirecms 文件上传 (CVE-2018-18086)漏洞复现详细教程
  • 如何用Python轻松解析XML文件?
  • 【ELF2学习板】交叉编译FFTW
  • UNION和UNION ALL的主要区别
  • Freertos----互斥量
  • 【k8s系列4】工具介绍
  • 17-算法打卡-哈希表-快乐数-leetcode(202)-第十七天
  • Motion Tracks:少样本模仿学习中人-机器人之间迁移的统一表征
  • PyCharm Flask 使用 Tailwind CSS v3 配置
  • 基于若依的ruoyi-vue-plus的nbmade-boot在线表单的设计(七)后端方面的设计
  • 软考高项ITTO(输入——>工具——>输出)——【项目整合管理】
  • 番外篇 | SEAM-YOLO:引入SEAM系列注意力机制,提升遮挡小目标的检测性能
  • spring cloud gateway前面是否必须要有个nginx
  • FreeSWITCH中SIP网关(Gateway)操作
  • 操作系统-PV
  • C++23 新特性:行拼接前去除空白符 (P2223R2)
  • 嵌入式开发--STM32G4系列硬件CRC支持MODBUS和CRC32