一,使用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>