Spring Boot实践三 --数据库

一,使用JdbcTemplate访问MySQL数据库

1,确认本地已正确安装mysql

  • 按【win+r】快捷键打开运行;
  • 输入services.msc,点击【确定】;
  • 在打开的服务列表中查找mysql服务,如果没有mysql服务,说明本机没有安装mysql,按如下方式进行安装:

(1)点击mysql安装包下载链接:https://dev.mysql.com/downloads/mysql/,点击直接下载即可;

(2)解压后,在bin目录同级下创建一个文件,命名为my.ini

内容如下:

java 复制代码
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录 ---这里输入你安装的文件路径----
basedir=D:\mysql\mysql_install
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用"mysql_native_password"插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

(3) 打开cmd进入mysql的bin文件下(D:\mysql\mysql-8.0.16-winx64),执行命令:

java 复制代码
mysqld --initialize --console

注意:安装mysql 安装完成后Mysql会有一个随机初始密码,一定要保存!

如果exe安装时有设置密码,那就用那个密码。

(4)接下来执行以下命令:

java 复制代码
// 执行mysql安装
mysqld --install mysql

// 使用命令提示符启动MySQL服务
net start mysql

//进入mysql,回车后输入上面安装时保存的初始密码
mysql -uroot -p

//修改密码为1234
ALTER USER 'root'@'localhost' IDENTIFIED BY '1234';

// 查看MySQL服务状态
status

//quit退出mysql后用以下命令也可以查询:
mysql -u root -p -e"status;"

(5)配置环境变量:

2,使用JdbcTemplate访问MySQL数据库:

1,打开cmd,进入mysql的bin目录,执行以下命令创建数据库:

java 复制代码
//进入mysql的bin目录
D:
cd mysql\mysql-8.0.16-winx64\bin

//登录mysql,注意-p后面无空格
mysql -uroot -p1234

// 创建 mydatabase
 create database mydatabase;
 
 // 查看databases
 show databases;
 
 // 切换到mydatabase
 use mydatabase;
 
 // 创建table `t_user`, 有id、username和password三项
 CREATE TABLE `t_user` (`id` int NOT NULL AUTO_INCREMENT COMMENT '用户id',`username` varchar(100) DEFAULT NULL,`password` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表';
 
 //查看tables
 show tables;
 
 // 插入一项
 INSERT INTO t_user VALUES(1,"admin","123456");

//查看表内容
 SELECT * FROM t_user;

2,idea中在pom.xml中加入依赖:

java 复制代码
    <!-- 添加mysql依赖 -->
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>5.1.45</version>
         <!-- MySQL8.x时,请使用8.x的连接器 -->
     </dependency>

     <!-- 添加jdbc依赖 -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-jdbc</artifactId>
	</dependency>
     
     <!-- 添加junit依赖 -->
     <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.13.2</version>
         <scope>test</scope>
     </dependency>

3,在src/main/resources/application.properties中配置数据源信息

java 复制代码
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

配置idea连接查看数据库:

(1)View-> Tool Windows -> Database进入:

如果社区版没有Database,搜索 file-settings-plugins,安装Database Navigator也是一样的。通过View-> Tool Windows -> DB Browser进入

(2)在Database视图中点击"+"号创建Mysql:

(3)选择要连接的数据库,Test Connection测试:

(4)打开可以看到对应的表项:

4,新建实体类 User ,实现 RowMapper 接口 ,该接口重写的 mapRow 方法为了实体字段和数据表字段映射(对应)。

User类:

java 复制代码
package com.example.demospringboot;

import lombok.*;
import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;

@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
@ToString
public class User implements RowMapper<User> {

    private int id;
    private String username;
    private String password;

    @Override
    public User mapRow(ResultSet rs, int rowNum) throws SQLException {
        User user = new User();
        user.setId(rs.getInt("id"));
        user.setUsername(rs.getString("username"));
        user.setPassword(rs.getString("password"));
        return user;
    }
}

JDBCTemplate 提供3个操作数据的方法:

execute 直接执行 sql 语句

update 进行新增、修改、删除操作

query 查询操作

添加控制器 UserController :

添加用户 /user/save

查询用户 /user/get/1

查询所有用户 /user/get 或者 /user/getAllUsers

修改用户 /user/update/1

删除用户 /user/delete/1

java 复制代码
package com.example.demospringboot;

import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/user")
@Log4j2
public class UserController {

    private JdbcTemplate jdbcTemplate;

    @Autowired
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    /**
     * 添加用户
     */
    @GetMapping("/save")
    public void saveUser() {
        String sql = "INSERT INTO t_user VALUES(NULL,?,?)";
        User user = new User(1,"209110407","fengluyu");
        int row = jdbcTemplate.update(sql,user.getUsername(),user.getPassword());
        log.info("保存用户成功!保存个数: " + row);
    }

    /**
     * 获取单个用户
     * @param id 用户id
     * @return 返回用户
     */
    @GetMapping("/get/{id}")
    public User getUser(@PathVariable int id) {
        String sql = "SELECT id,username,password FROM t_user WHERE id = ?";
        List<User> userList = jdbcTemplate.query(sql, new User(), id);
        User user = null;
        if (userList.size() > 0) {
            user = userList.get(0);
        }
        return user;
    }

    /**
     * 返回所有用户
     * @return 所有用户列表
     */
    @GetMapping("/get")
    public List<User> getUsers() {
        String sql = "SELECT id,username,password FROM t_user";
        return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
    }

    /**
     * 获取所有用户
     * @return 所有用户列表
     */
    @GetMapping("/getAllUsers")
    public List<User> getAllUser() {
        String sql = "SELECT id,username,password FROM t_user";
        return jdbcTemplate.query(sql,new User());
    }

    @GetMapping("/update/{id}")
    public void updateUser(@PathVariable int id) {
        String sql = "UPDATE t_user SET password = ? WHERE id = ?";
        int row = jdbcTemplate.update(sql,"87am23",id);
        log.info("修改用户(id:" +id + ") 操作: " + row);
    }

    @GetMapping("/delete/{id}")
    public void deleteUser(@PathVariable int id) {
        String sql = "DELETE FROM t_user WHERE id = ?";
        int row = jdbcTemplate.update(sql,id);
        log.info("删除用户(id: " + id + ") 操作: " + row);
    }
}

问题记录

1,编译运行报错如下:

java 复制代码
Description: Parameter 0 of constructor in com.example.DemoSpringBoot.UserServiceImpl required a bean of type 'org.springframework.jdbc.core.JdbcTemplate' that could not be found

解决方案:推荐依赖spring-boot-starter-jdbc, 而不是spring-jdbc

java 复制代码
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
相关推荐
向阳12182 分钟前
mybatis 动态 SQL
数据库·sql·mybatis
胡图蛋.4 分钟前
什么是事务
数据库
秋意钟4 分钟前
Spring新版本
java·后端·spring
小黄人软件6 分钟前
20241220流水的日报 mysql的between可以用于字符串 sql 所有老日期的,保留最新日期
数据库·sql·mysql
张声录111 分钟前
【ETCD】【实操篇(三)】【ETCDCTL】如何向集群中写入数据
数据库·chrome·etcd
无为之士17 分钟前
Linux自动备份Mysql数据库
linux·数据库·mysql
小蜗牛慢慢爬行24 分钟前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
小汤猿人类30 分钟前
open Feign 连接池(性能提升)
数据库
Allen Bright31 分钟前
Spring Boot 整合 RabbitMQ:手动 ACK 与 QoS 配置详解
spring boot·rabbitmq·java-rabbitmq
A小白59081 小时前
Docker部署实践:构建可扩展的AI图像/视频分析平台 (脱敏版)
后端