前言
SpringBoot 整合 MySQL(使用 JdbcTemplate
实现) 教程。
实现
理论
JdbcTemplate
是 Spring
框架中的一个核心组件,它提供了一种简单的方式来访问关系型数据库。JdbcTemplate
封装了 JDBC API
,使得开发者可以更加方便地使用 JDBC 进行数据库操作,而无需手动管理连接、执行 SQL 语句、处理结果集等操作。使用 JdbcTemplate
可以大大简化数据库访问的代码量,提高开发效率。
JdbcTemplate
提供了一组方法,用于执行SQL语句、处理结果集、处理异常等操作。它还支持命名参数和占位符参数,可以方便地构建参数化的SQL语句。此外,JdbcTemplate
还支持事务管理,可以通过编程方式或声明式方式来管理事务。
总之,JdbcTemplate
是一个非常方便的工具,可以帮助开发者快速、简单地访问关系型数据库。
数据库
安装 MySQL 数据库后,创建一个如下数据表:
CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`name` varchar(255) COMMENT '用户名',
`password` varchar(255) COMMENT '密码',
`age` int COMMENT '年龄',
`deleted` tinyint NOT NULL DEFAULT 1 COMMENT '是否删除:1-启用,99-删除',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
并且在数据表中添加如下一行数据:
INSERT INTO `user` (`name`, `password`, `age`) VALUES ('郎家岭伯爵', '123456', '18');
SpringBoot
pom引入依赖
创建SpringBoot 项目后在 pom.xml 文件中引入 MySQL 的依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
properties配置文件
在 application.properties 配置文件中添加如下 MySQL 配置项:
spring.datasource.username=root
spring.datasource.password=
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
这里根据实际情况修改为自己数据库的设置。
User实体类
package com.langjialing.springbootmysql.pojo;
/**
* @author 郎家岭伯爵
*/
public class User {
private Integer id;
private String name;
private String password;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
Service层
Service 接口类:
package com.langjialing.springbootmysql.service;
import com.langjialing.springbootmysql.pojo.User;
import java.util.List;
/**
* @author 郎家岭伯爵
*/
public interface IUserDao {
/**
* 新增用户
* @param user user
*/
void insert(User user);
/**
* 更新用户
* @param user user
*/
void update(User user);
/**
* 根据ID删除用户
* @param id id
*/
void delete(int id);
/**
* 根据ID查找用户
* @param id id
* @return user
*/
User findById(int id);
/**
* 查找用户列表
* @return List
*/
List<User> findAll();
}
Service 接口实现类:
package com.langjialing.springbootmysql.service.impl;
import com.langjialing.springbootmysql.service.IUserDao;
import com.langjialing.springbootmysql.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
/**
* @author Administrator
*/
@Repository
public class UserDaoImpl implements IUserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void insert(User user) {
String sql = "INSERT INTO user (name, age) VALUES (?, ?)";
jdbcTemplate.update(sql, user.getName(), user.getAge());
}
@Override
public void update(User user) {
String sql = "UPDATE user SET name = ?, age = ? WHERE id = ?";
jdbcTemplate.update(sql, user.getName(), user.getAge(), user.getId());
}
@Override
public void delete(int id) {
String sql = "DELETE FROM user WHERE id = ?";
jdbcTemplate.update(sql, id);
}
@Override
public User findById(int id) {
String sql = "SELECT * FROM user WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new Object[]{id}, new UserRowMapper());
}
@Override
public List<User> findAll() {
String sql = "SELECT * FROM user";
return jdbcTemplate.query(sql, new UserRowMapper());
}
static class UserRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setName(resultSet.getString("name"));
user.setAge(resultSet.getInt("age"));
user.setPassword(resultSet.getString("password"));
return user;
}
}
}
Controller层
在 Controller 层中进行测试 CRUD:
package com.langjialing.springbootmysql.controller;
import com.langjialing.springbootmysql.service.IUserDao;
import com.langjialing.springbootmysql.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Author 郎家岭伯爵
* @Description UserController
* @Date 2023/6/3 21:03
* @Version 1.0
*/
@RestController
public class UserController {
@Autowired
private IUserDao userDao;
@PostMapping("/insertUser")
public String insertUser(@RequestBody User user){
try{
userDao.insert(user);
return "用户添加成功!";
} catch (Exception e){
return "用户添加失败!失败信息为:" + e.getMessage();
}
}
@PostMapping("/updateUser")
public String updateUser(@RequestBody User user){
userDao.update(user);
return "用户更新成功!";
}
@GetMapping("/deleteUserById")
public void deleteUserById(@RequestParam int id){
userDao.delete(id);
}
@GetMapping("/findUserById")
public User findUserById(@RequestParam int id){
return userDao.findById(id);
}
@GetMapping("/findAllUser")
public List<User> findAllUser(){
return userDao.findAll();
}
}
使用Postman测试
这里我们使用 Postman 调用接口,从而来测试我们的 CRUD。这里我们展示两个接口,其它大家可自行测试。
总结
SpringBoot 整合 MySQL(使用 JdbcTemplate
实现) 教程。