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>
相关推荐
师太,答应老衲吧38 分钟前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
码农小旋风1 小时前
详解K8S--声明式API
后端
Peter_chq1 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
Yaml42 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~2 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616882 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
Channing Lewis2 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
睡觉谁叫~~~3 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust
毕业设计制作和分享3 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil273 小时前
Redis - String 字符串
数据库·redis·缓存