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

发布于:2025-05-29 ⋅ 阅读:(27) ⋅ 点赞:(0)

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 的区别:

对比项 JdbcTemplate MyBatis
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 {
 
    @Autowired
    private JdbcTemplate jdbcTemplate;
 
    @Override
    public List<Account> list() {
        return this.jdbcTemplate.query("select * from account", new BeanPropertyRowMapper<>(Account.class));
    }
 
    @Override
    public Account getById(Integer id) {
        return this.jdbcTemplate.queryForObject("select * from account where id = ?", new Integer[]{id},new BeanPropertyRowMapper<>(Account.class));
    }
 
    @Override
    public int add(Account account) {
        return this.jdbcTemplate.update("insert into account(name,age) values(?,?)",account.getName(),account.getAge());
    }
 
    @Override
    public int update(Account account) {
        return this.jdbcTemplate.update("update account set name = ?,age = ? where id = ?", account.getName(),account.getAge(),account.getId());
    }
 
    @Override
    public int deleteById(Integer id) {
        return this.jdbcTemplate.update("delete from account where id = ?", id);
    }
 
    @Override
    public 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);
    }
 
    @Override
    public 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);
    }
 
    @Override
    public 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 {
 
    @Autowired
    private 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测试就行


网站公告

今日签到

点亮在社区的每一天
去签到