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

Spring Boot 整合 JdbcTemplate,JdbcTemplate 与 MyBatis 的区别

DAY29.1 Java核心基础

Spring Boot 整合 JdbcTemplate

JdbcTemplate是一个轻量级JDBC封装的组件

JdbcTemplate 是 Spring 自带的JDBC的封装,和Mybatis类似,需要自己封装sql语句

JdbcTemplate 帮助我们来连接数据库,SQL的执行,返回值的封装

JdbcTemplate特点

  1. 常用方法丰富
    提供了常用的 SQL 操作方法,如:
    • execute:执行任意 SQL;
    • update:执行增删改操作;
    • batchUpdate:批量更新;
    • queryqueryForObject:执行查询。
  2. 参数传递灵活
    SQL 语句和参数分开传入,参数支持:
    • 可变参数;
    • 集合(如 List);
    • 数组等方式。
  3. SQL 写在代码中
    SQL 直接写在 Java 方法中,方便查看和修改,代码更直观。
  4. 集成简单,使用方便
    • 属于 Spring 框架自带组件;
    • 无需额外配置生命周期;
    • 可直接从 Spring 容器中获取使用。

与 MyBatis 的区别:

对比项JdbcTemplateMyBatis
SQL 写法直接写在 Java 代码中一般写在 XML 文件中,或用注解
配置复杂度配置简单,无需额外集成需引入第三方依赖和单独配置
灵活性灵活快速,适合小型/中型项目更规范,适合 SQL 多、结构复杂的大型项目
学习曲线简单易用,Spring 用户快速上手学习成本略高,需理解 Mapper 和配置结构
代码

1、pom.xml 引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope>
</dependency>

2、创建实体类

@Data
public class Account {private Integer id;private String name;private Integer age;
}

3、定义 Repository 接口,定义方法

public interface AccountRepository {public List<Account> list();public Account getById(Integer id);public int add(Account account);public int update(Account account);public int deleteById(Integer id);public int[] batchAdd();public int[] batchUpdate();public int[] batchDelete();
}

4、创建实现类,实现所有方法

@Repository
public class AccountRepositoryImpl implements AccountRepository {@Autowiredprivate JdbcTemplate jdbcTemplate;@Overridepublic List<Account> list() {return this.jdbcTemplate.query("select * from account", new BeanPropertyRowMapper<>(Account.class));}@Overridepublic Account getById(Integer id) {return this.jdbcTemplate.queryForObject("select * from account where id = ?", new Integer[]{id},new BeanPropertyRowMapper<>(Account.class));}@Overridepublic int add(Account account) {return this.jdbcTemplate.update("insert into account(name,age) values(?,?)",account.getName(),account.getAge());}@Overridepublic int update(Account account) {return this.jdbcTemplate.update("update account set name = ?,age = ? where id = ?", account.getName(),account.getAge(),account.getId());}@Overridepublic int deleteById(Integer id) {return this.jdbcTemplate.update("delete from account where id = ?", id);}@Overridepublic int[] batchAdd() {List<Object[]> args = new ArrayList<Object[]>();args.add(new Object[]{"小明",22});args.add(new Object[]{"小张",33});args.add(new Object[]{"小李",23});return this.jdbcTemplate.batchUpdate("insert into account(name,age) values(?,?)",args);}@Overridepublic int[] batchUpdate() {List<Object[]> args = new ArrayList<>();args.add(new Object[]{"大张",33,5});args.add(new Object[]{"大李",33,6});args.add(new Object[]{"大冯",33,7});return this.jdbcTemplate.batchUpdate("update account set name = ?,age = ? where id = ?", args);}@Overridepublic int[] batchDelete() {List<Object[]> args = new ArrayList<>();args.add(new Object[]{5});args.add(new Object[]{6});args.add(new Object[]{7});return this.jdbcTemplate.batchUpdate("delete from account where id = ?", args);}
}

5、控制器

@RestController
public class AccountController {@Autowiredprivate AccountRepository accountRepository;@GetMapping("/list")public List<Account> list(){return this.accountRepository.list();}@GetMapping("/getById/{id}")public Account getById(@PathVariable("id") Integer id){Account account;try {account = this.accountRepository.getById(id);} catch (Exception e) {return null;}return account;}@PostMapping("/add")public int add(@RequestBody Account account){int add = this.accountRepository.add(account);return add;}@PutMapping("/update")public int update(@RequestBody Account account){int update = this.accountRepository.update(account);return update;}@DeleteMapping("/delete/{id}")public int delete(@PathVariable("id") Integer id){int i = this.accountRepository.deleteById(id);return i;}@PostMapping("/batchAdd")public int[] batchAdd(){return this.accountRepository.batchAdd();}@PutMapping("/batchUpdate")public int[] batchUpdate(){return this.accountRepository.batchUpdate();}@DeleteMapping("/batchDelete")public int[] batchDelete(){return this.accountRepository.batchDelete();}
}

测试我们用postman测试就行

http://www.xdnf.cn/news/9476.html

相关文章:

  • Spring AI 集成多个大语言模型
  • Android --- ObjectAnimator 和 TranslateAnimation有什么区别
  • 鸿蒙如何引入crypto-js
  • Vue3对接高德地图POI搜索
  • 容器化革命:告别传统Dockerfile,拥抱现代构建最佳实践
  • UDP数据报
  • 三十一、面向对象底层逻辑-SpringMVC九大组件之RequestToViewNameTranslator接口设计哲学
  • 随机游动算法解决kSAT问题
  • Prompt:开源库license的分类名称、说明、适应范围
  • 1.1 掌握HTML常用标签
  • 华为云Flexus+DeepSeek征文|华为云Flexus云服务器X实例上部署Dify:打造高效的开源大语言模型应用开发平台
  • 各类效果名称收集
  • JAVA网络编程——socket套接字的介绍下(详细)
  • day12 leetcode-hot100-19(矩阵2)
  • 2025年渗透测试面试题总结-匿名[校招]安全服务工程师(题目+回答)
  • RK3566 Android12 HG24C02MM/TR EEPROM适配
  • 手写字魔法消除3:深度学习PmrNet神经网络实现图片修复(含训练代码、数据集和GUI交互界面)
  • 关于Web安全:7. WebShell 管理与持久化后门
  • 回归算法模型之线性回归
  • 2025/5/28 考试 和答疑。
  • 【Golang入门】第一章:环境搭建与Hello World
  • 一站式掌握视频编辑器开发:OpenCV + Qt + FFmpeg 实战课程全览
  • 大模型应用开发之微调与对齐
  • Vision Pro发布!开发者如何快速上手空间UI设计?
  • 【iOS】源码阅读(五)——类类的结构分析
  • 第十章 管理Linux的联网
  • rsync使用守护进程启动服务
  • ffmpeg命令(二):分解与复用命令
  • 政策支持下的PLM国产化浪潮:国产PLM的最新应用、前沿技术、反超路径
  • JVM与JMM深度解析:从Java 8到Java 21的演进