SpringBoot(一):整合MySQL(使用JdbcTemplate实现)

郎家岭伯爵 2023年05月31日 619次浏览

前言

SpringBoot 整合 MySQL(使用 JdbcTemplate 实现) 教程。

实现

理论

JdbcTemplateSpring 框架中的一个核心组件,它提供了一种简单的方式来访问关系型数据库JdbcTemplate 封装了 JDBC API,使得开发者可以更加方便地使用 JDBC 进行数据库操作,而无需手动管理连接、执行 SQL 语句、处理结果集等操作。使用 JdbcTemplate 可以大大简化数据库访问的代码量,提高开发效率。

JdbcTemplate 提供了一组方法,用于执行SQL语句、处理结果集、处理异常等操作。它还支持命名参数和占位符参数,可以方便地构建参数化的SQL语句。此外,JdbcTemplate 还支持事务管理,可以通过编程方式或声明式方式来管理事务。

总之,JdbcTemplate 是一个非常方便的工具,可以帮助开发者快速、简单地访问关系型数据库。

数据库

安装 MySQL 数据库后,创建一个如下数据表:

  1. CREATE TABLE `user` (
  2. `id` int NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  3. `name` varchar(255) COMMENT '用户名',
  4. `password` varchar(255) COMMENT '密码',
  5. `age` int COMMENT '年龄',
  6. `deleted` tinyint NOT NULL DEFAULT 1 COMMENT '是否删除:1-启用,99-删除',
  7. `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  8. `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  9. PRIMARY KEY (`id`)
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

并且在数据表中添加如下一行数据:

  1. INSERT INTO `user` (`name`, `password`, `age`) VALUES ('郎家岭伯爵', '123456', '18');

SpringBoot

pom引入依赖

创建SpringBoot 项目后在 pom.xml 文件中引入 MySQL 的依赖:

  1. <dependency>
  2. <groupId>mysql</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. <version>8.0.11</version>
  5. <scope>runtime</scope>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-jdbc</artifactId>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-web</artifactId>
  14. </dependency>

properties配置文件

在 application.properties 配置文件中添加如下 MySQL 配置项:

  1. spring.datasource.username=root
  2. spring.datasource.password=
  3. spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false

这里根据实际情况修改为自己数据库的设置。

User实体类

  1. package com.langjialing.springbootmysql.pojo;

  2. /**
  3. * @author 郎家岭伯爵
  4. */
  5. public class User {
  6. private Integer id;
  7. private String name;
  8. private String password;
  9. private Integer age;

  10. public Integer getId() {
  11. return id;
  12. }

  13. public void setId(Integer id) {
  14. this.id = id;
  15. }

  16. public String getName() {
  17. return name;
  18. }

  19. public void setName(String name) {
  20. this.name = name;
  21. }

  22. public String getPassword() {
  23. return password;
  24. }

  25. public void setPassword(String password) {
  26. this.password = password;
  27. }

  28. public Integer getAge() {
  29. return age;
  30. }

  31. public void setAge(Integer age) {
  32. this.age = age;
  33. }
  34. }

Service层

Service 接口类:

  1. package com.langjialing.springbootmysql.service;

  2. import com.langjialing.springbootmysql.pojo.User;

  3. import java.util.List;

  4. /**
  5. * @author 郎家岭伯爵
  6. */
  7. public interface IUserDao {
  8. /**
  9. * 新增用户
  10. * @param user user
  11. */
  12. void insert(User user);

  13. /**
  14. * 更新用户
  15. * @param user user
  16. */
  17. void update(User user);

  18. /**
  19. * 根据ID删除用户
  20. * @param id id
  21. */
  22. void delete(int id);

  23. /**
  24. * 根据ID查找用户
  25. * @param id id
  26. * @return user
  27. */
  28. User findById(int id);

  29. /**
  30. * 查找用户列表
  31. * @return List
  32. */
  33. List<User> findAll();
  34. }

Service 接口实现类:

  1. package com.langjialing.springbootmysql.service.impl;

  2. import com.langjialing.springbootmysql.service.IUserDao;
  3. import com.langjialing.springbootmysql.pojo.User;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.jdbc.core.JdbcTemplate;
  6. import org.springframework.jdbc.core.RowMapper;
  7. import org.springframework.stereotype.Repository;

  8. import java.sql.ResultSet;
  9. import java.sql.SQLException;
  10. import java.util.List;


  11. /**
  12. * @author Administrator
  13. */
  14. @Repository
  15. public class UserDaoImpl implements IUserDao {

  16. @Autowired
  17. private JdbcTemplate jdbcTemplate;

  18. @Override
  19. public void insert(User user) {
  20. String sql = "INSERT INTO user (name, age) VALUES (?, ?)";
  21. jdbcTemplate.update(sql, user.getName(), user.getAge());
  22. }

  23. @Override
  24. public void update(User user) {
  25. String sql = "UPDATE user SET name = ?, age = ? WHERE id = ?";
  26. jdbcTemplate.update(sql, user.getName(), user.getAge(), user.getId());
  27. }

  28. @Override
  29. public void delete(int id) {
  30. String sql = "DELETE FROM user WHERE id = ?";
  31. jdbcTemplate.update(sql, id);
  32. }

  33. @Override
  34. public User findById(int id) {
  35. String sql = "SELECT * FROM user WHERE id = ?";
  36. return jdbcTemplate.queryForObject(sql, new Object[]{id}, new UserRowMapper());
  37. }

  38. @Override
  39. public List<User> findAll() {
  40. String sql = "SELECT * FROM user";
  41. return jdbcTemplate.query(sql, new UserRowMapper());
  42. }

  43. static class UserRowMapper implements RowMapper<User> {
  44. @Override
  45. public User mapRow(ResultSet resultSet, int i) throws SQLException {
  46. User user = new User();
  47. user.setId(resultSet.getInt("id"));
  48. user.setName(resultSet.getString("name"));
  49. user.setAge(resultSet.getInt("age"));
  50. user.setPassword(resultSet.getString("password"));
  51. return user;
  52. }
  53. }
  54. }

Controller层

在 Controller 层中进行测试 CRUD:

  1. package com.langjialing.springbootmysql.controller;

  2. import com.langjialing.springbootmysql.service.IUserDao;
  3. import com.langjialing.springbootmysql.pojo.User;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.web.bind.annotation.*;

  6. import java.util.List;

  7. /**
  8. * @Author 郎家岭伯爵
  9. * @Description UserController
  10. * @Date 2023/6/3 21:03
  11. * @Version 1.0
  12. */
  13. @RestController
  14. public class UserController {

  15. @Autowired
  16. private IUserDao userDao;

  17. @PostMapping("/insertUser")
  18. public String insertUser(@RequestBody User user){
  19. try{
  20. userDao.insert(user);
  21. return "用户添加成功!";
  22. } catch (Exception e){
  23. return "用户添加失败!失败信息为:" + e.getMessage();
  24. }
  25. }

  26. @PostMapping("/updateUser")
  27. public String updateUser(@RequestBody User user){
  28. userDao.update(user);
  29. return "用户更新成功!";
  30. }

  31. @GetMapping("/deleteUserById")
  32. public void deleteUserById(@RequestParam int id){
  33. userDao.delete(id);
  34. }

  35. @GetMapping("/findUserById")
  36. public User findUserById(@RequestParam int id){
  37. return userDao.findById(id);
  38. }

  39. @GetMapping("/findAllUser")
  40. public List<User> findAllUser(){
  41. return userDao.findAll();
  42. }
  43. }

使用Postman测试

这里我们使用 Postman 调用接口,从而来测试我们的 CRUD。这里我们展示两个接口,其它大家可自行测试。

insert测试

insert测试

findAllUser测试

findAllUser测试

总结

SpringBoot 整合 MySQL(使用 JdbcTemplate 实现) 教程。