DAY29.1 Java核心基础
Spring Boot 整合 JdbcTemplate
JdbcTemplate是一个轻量级JDBC封装的组件
JdbcTemplate 是 Spring 自带的JDBC的封装,和Mybatis类似,需要自己封装sql语句
JdbcTemplate 帮助我们来连接数据库,SQL的执行,返回值的封装
JdbcTemplate特点
- 常用方法丰富
提供了常用的 SQL 操作方法,如:execute
:执行任意 SQL;update
:执行增删改操作;batchUpdate
:批量更新;query
、queryForObject
:执行查询。
- 参数传递灵活
SQL 语句和参数分开传入,参数支持:- 可变参数;
- 集合(如
List
); - 数组等方式。
- SQL 写在代码中
SQL 直接写在 Java 方法中,方便查看和修改,代码更直观。 - 集成简单,使用方便
- 属于 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测试就行