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

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.lryc.cn/news/2395485.html

相关文章:

  • sass基础语法
  • 【EF Core】 EF Core 批量操作的进化之路——从传统变更跟踪到无跟踪更新
  • [Go] Option选项设计模式 — — 编程方式基础入门
  • Vue 项目命名规范指南
  • 【笔记】开源通用人工智能代理 Suna 部署全流程准备清单(Windows 系统)
  • 海康工业相机SDK二次开发(VS+QT+海康SDK+C++)
  • 前端面试准备-5
  • Spring Boot 启动流程深度解析:从源码到实践
  • 深度学习|pytorch基本运算-乘除法和幂运算
  • 嵌入式通用集成电路卡市场潜力报告:物联网浪潮下的机遇与挑战剖析
  • 4.2.4 Spark SQL 数据写入模式
  • 论文笔记: Urban Region Embedding via Multi-View Contrastive Prediction
  • Android 缓存应用冻结器(Cached Apps Freezer)
  • 初学者如何微调大模型?从0到1详解
  • 西瓜书第十一章——降维与度量学习
  • Portainer安装指南:多节点监控的docker管理面板-家庭云计算专家
  • NanoGPT的BenchMarking.py
  • 测试用例及黑盒测试方法
  • CentOS 7 环境下部署 LAMP
  • vscode实用配置
  • React 项目中封装 Excel 导入导出组件:技术分享与实践
  • 【PhysUnits】15.1 引入P1后的加一特质(add1.rs)
  • 【2025CCF中国开源大会】RISC-V 开源生态的挑战与机遇分论坛重磅来袭!共探开源芯片未来
  • python完成批量复制Excel文件并根据另一个Excel文件中的名称重命名
  • Vue-2-前端框架Vue基础入门之二
  • CPT208 Human-Centric Computing 人机交互 Pt.7 交互和交互界面
  • ubuntu20.04.5-arm64版安装robotjs
  • [网页五子棋][匹配模块]前后端交互接口(消息推送机制)、客户端开发(匹配页面、匹配功能)
  • 【数据分析】Matplotlib+Pandas+Seaborn绘图
  • NLP学习路线图(十五):TF-IDF(词频-逆文档频率)