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

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

前言

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

实现

理论

JdbcTemplateSpring 框架中的一个核心组件,它提供了一种简单的方式来访问关系型数据库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。这里我们展示两个接口,其它大家可自行测试。

insert测试

findAllUser测试

总结

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