Spring Boot连接Mysql - 使用JdbcTemplate

前言

小型项目可以直接用JdbcTemplate。

大型项目可以考虑集成Mybatis。

还有一个JPA的方式 https://www.psvmc.cn/article/2024-01-16-spring-jpa.html。

JdbcTemplate

JdbcTemplate 是 Spring 框架中用于简化 JDBC 操作的一个类,它属于 Spring 的 org.springframework.jdbc.core 包。它的主要作用是简化数据库访问代码,减少直接使用 JDBC 时需要编写的样板代码。以下是 JdbcTemplate 的一些关键特点和功能:

主要特点

  1. 简化代码JdbcTemplate 封装了常见的 JDBC 操作,如创建连接、执行 SQL 语句、处理结果集等,减少了繁琐的代码编写。
  2. 异常处理JdbcTemplate 将 JDBC 异常转换为 Spring 的数据访问异常,使得异常处理更加一致和简洁。
  3. 资源管理:自动处理数据库连接的打开和关闭,避免资源泄漏。
  4. 支持多种操作:包括查询、更新、删除和批量操作等。

添加依赖

1
2
3
4
5
6
7
8
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

配置

application.properties配置文件中增加数据库参数,信息内容如下:

1
2
3
4
5
6
7
8
9
10
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/zbi_source?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.idle-timeout=500000
spring.datasource.hikari.max-lifetime=540000
spring.datasource.hikari.connection-timeout=60000
spring.datasource.hikari.connection-test-query=SELECT 1

Service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package cn.psvmc.zapicall.service;

import cn.psvmc.zapicall.bean.UserModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.Set;
@Service
public class UserServiceJt {
@Autowired
private JdbcTemplate jdbcTemplate;
public List<Map<String, Object>> getUserList(){
String sql = "select * from t_user";
List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
for (Map<String, Object> map : list) {
Set<String> keySet = map.keySet();
for (String key : keySet) {
System.out.println(key+":"+map.get(key));
}
}
return list;
}

public List<UserModel> getUserList2(){
String sql = "select * from t_user";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(UserModel.class));
}

public UserModel getUserModel(){
String sql = "select * from t_user where id=6";
return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(UserModel.class));
}
}

添加

1
2
3
4
public void addUser(UserModel user) {
String sql = "INSERT INTO t_user (name, age) VALUES (?, ?)";
jdbcTemplate.update(sql, user.getName(), user.getAge());
}

Controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import cn.psvmc.zapicall.bean.UserModel;
import cn.psvmc.zapicall.service.UserService;
import cn.psvmc.zapicall.service.UserServiceJt;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserServiceJt serviceJt;

@RequestMapping("/user_list")
public List<Map<String, Object>> getUserList() {
return serviceJt.getUserList();
}

@RequestMapping("/user_list2")
public List<UserModel> getUserList2() {
return serviceJt.getUserList2();
}

@RequestMapping("/user_by_id")
public UserModel getUser() {
return serviceJt.getUserModel();
}
}

访问

启动项目,通过浏览器访问:

http://localhost:8080/user/user_list

http://localhost:8080/user/user_list2

http://localhost:8080/user/user_by_id