SpringBoot使用JdbcTemplate访问操作数据库基本用法
简介
JdbcTemplate 是 Spring 框架提供的一种基于 JDBC 的访问数据库的工具,使用它可以简化 JDBC 的开发流程和操作,减少大量模板式代码的编写。结合 SpringBoot 使用 JdbcTemplate 可以更加方便地访问和操作数据库。
Maven 依赖
在 SpringBoot 项目的 pom.xml 文件中添加 JdbcTemplate 的 Maven 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
数据源配置
使用 JdbcTemplate 进行数据库操作前,需要先配置数据源。在 application.properties 中配置:
# 数据库配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://${mysql.host}:${mysql.port}/${mysql.database}?serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=${mysql.username}
spring.datasource.password=${mysql.password}
JdbcTemplate 使用
- 创建 JdbcTemplate 对象
创建 JdbcTemplate 对象需要先注入数据源。可以通过构造函数或者工厂方法的方式获取 JdbcTemplate 对象:
```java
@Autowired
private DataSource dataSource;
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(dataSource);
}
```
- 查询操作
```java
public List
public Map
String sql = "SELECT * FROM user WHERE id = ?";
return jdbcTemplate().queryForMap(sql, id);
}
```
-
queryForList(String sql)
:执行查询操作,返回 List<Map<String, Object>> 对象。其中,每个 Map 对象表示查询结果集中的一行数据,Map 中的 key 为列名,value 为对应的数据。 -
queryForMap(String sql, Object... args)
:执行查询操作,返回 Map<String, Object> 对象。其中,key 为查询结果集中的列名,value 为对应的数据。 -
更新操作
```java
public void addUser(User user) {
String sql = "INSERT INTO user (username, password, age) VALUES (?, ?, ?)";
jdbcTemplate().update(sql, user.getUsername(), user.getPassword(), user.getAge());
}
public void updateUser(User user) {
String sql = "UPDATE user SET username = ?, password = ?, age = ? WHERE id = ?";
jdbcTemplate().update(sql, user.getUsername(), user.getPassword(), user.getAge(), user.getId());
}
public void deleteUserById(int id) {
String sql = "DELETE FROM user WHERE id = ?";
jdbcTemplate().update(sql, id);
}
```
update(String sql, Object... args)
:执行更新操作。
示例
以下是用户管理的示例:
User 实体类
public class User {
private int id;
private String username;
private String password;
private int age;
// 省略 getter 和 setter 方法
}
UserDao 接口
public interface UserDao {
List<Map<String, Object>> queryAllUsers();
Map<String, Object> queryUserById(int id);
void addUser(User user);
void updateUser(User user);
void deleteUserById(int id);
}
UserDaoImpl 实现类
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private DataSource dataSource;
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(dataSource);
}
@Override
public List<Map<String, Object>> queryAllUsers() {
String sql = "SELECT * FROM user";
return jdbcTemplate().queryForList(sql);
}
@Override
public Map<String, Object> queryUserById(int id) {
String sql = "SELECT * FROM user WHERE id = ?";
return jdbcTemplate().queryForMap(sql, id);
}
@Override
public void addUser(User user) {
String sql = "INSERT INTO user (username, password, age) VALUES (?, ?, ?)";
jdbcTemplate().update(sql, user.getUsername(), user.getPassword(), user.getAge());
}
@Override
public void updateUser(User user) {
String sql = "UPDATE user SET username = ?, password = ?, age = ? WHERE id = ?";
jdbcTemplate().update(sql, user.getUsername(), user.getPassword(), user.getAge(), user.getId());
}
@Override
public void deleteUserById(int id) {
String sql = "DELETE FROM user WHERE id = ?";
jdbcTemplate().update(sql, id);
}
}
UserController 控制器
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserDao userDao;
@GetMapping
public List<Map<String, Object>> queryAllUsers() {
return userDao.queryAllUsers();
}
@GetMapping("/{id}")
public Map<String, Object> queryUserById(@PathVariable("id") int id) {
return userDao.queryUserById(id);
}
@PostMapping
public void addUser(@RequestBody User user) {
userDao.addUser(user);
}
@PutMapping
public void updateUser(@RequestBody User user) {
userDao.updateUser(user);
}
@DeleteMapping("/{id}")
public void deleteUserById(@PathVariable("id") int id) {
userDao.deleteUserById(id);
}
}
小结
SpringBoot 结合 JdbcTemplate 使用,可以简化 JDBC 的开发流程和操作,提高开发效率和代码可读性。可以通过创建 JdbcTemplate 对象和调用对应的方法实现数据库的访问和操作。其中,查询操作的返回值为 List<Map<String, Object>> 或 Map<String, Object>,更新操作直接调用 update 方法即可。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot使用JdbcTemplate访问操作数据库基本用法 - Python技术站