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>
相关推荐
Bdygsl30 分钟前
MySQL(6)—— 视图
数据库·mysql
oradh32 分钟前
数据库入门概述
数据库·oracle·数据库基础·数据库入门
BullSmall39 分钟前
一套定制化高级 payload 合集
数据库·安全性测试
哆啦A梦15881 小时前
统一返回包装类 Result和异常处理
java·前端·后端·springboot
zbdx不知名菜鸡1 小时前
postgre sql 数据库查询优化
数据库·postgresql
9稳1 小时前
基于PLC的生产线自动升降机设计
开发语言·网络·数据库·嵌入式硬件·plc
zb200641201 小时前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
四七伵2 小时前
Spring Boot项目中varchar字段为什么不用NULL?告别空指针从建表开始
数据库·后端
Mr.45672 小时前
JDK17+Druid+SpringBoot3+ShardingSphere5 多表分库分表完整实践(MySQL+PostgreSQL)
java·数据库·spring boot·mysql·postgresql
tsyjjOvO2 小时前
Spring Boot 入门
java·spring boot·后端