第十三节:学习Springboot整合mybatis——完整篇(自学Spring boot 3.x的第三天)
大家好,今天记录下学习springboot的第三天。@网创有方
这节详细记录了如何使用springboot整合mybatis方法,并成功实现将请求信息插入本地的mysql数据库。
由于只是为了方便本地验证,实际项目是需要部署到服务器上去的,所以就采用了xampp这类工具快速搭建mysql及phpmyadmin管理工具了。
本篇要实现的效果:
在springboot项目中,使用post方法中的RequestBody方式向本地服务器进行请求,插入学生信息到本地数据库,传入参数为json类型。
关于传参方式类型,可以参见我上篇学习记录。
也可以使用其他的传入方法,比如post和get表单方式,效果是一样的。下图是get表单方式
第一步:配置mybatis启动器和mysql连接器依赖(pom.xml)中
版本可以去maven repository网站去查看
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>9.0.0</version>
</dependency>
这里注意:最新版本的连接池已从mysql-connector-java迁移到mysql-connector-j
配置好了以后,点击maven的刷新图标或者clean再install下也可以。
第二步:搭建基于本地的mysql数据库环境(实际项目应该搭建在服务器环境下)
下载xampp,在安装时候记得选择开启apache和mysql。如果其中的apache和mysql,以及phpmyadmin出现无法开启的情况,记得修改下各自的端口。如果修改端口也无法启动,查看下面板的提示消息,百度查询各自的解决办法。
第三步:创建数据库及表,以及字段
数据库的话,直接打开phpmyadmin创建就可以,表及字段的话使用sql语句即可。
本文使用的数据库名称为test123,表名为student。字段信息包含age,name,时间戳三项。使用的sql语句如下所示:
CREATE TABLE student (
id INT AUTO_INCREMENT PRIMARY KEY, -- 主键字段
age INT NOT NULL, -- 年龄字段,不允许为空
name VARCHAR(50) NOT NULL, -- 姓名字段,假设最大长度为50,不允许为空
created_at DATETIME DEFAULT CURRENT_TIMESTAMP -- DATETIME类型的时间戳字段,默认为当前时间
);
第四步:在配置文件中添加数据源和连接池(在application.yml)
server:
port: 80
spring:
datasource:
url: jdbc:mysql://localhost:3306/test123?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
# 连接池
hikari:
minimum-idle: 10
maximum-pool-size: 20
idle-timeout: 300000
max-lifetime: 1800000
connection-timeout: 30000
pool-name: SpringHikariCP
mybatis:
mapper-locations: classpath:mapper/**/*.xml
configuration:
#配置mysql打印日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#配置xml文件扫描路径
注意:上面的url需要填写正确,数据库名和密码都需要正确。由于我的本地mysql初始化是默认账号是root,密码为空,所以上述代码中也保持为空。
项目结构:
第五步:编写mapper接口(interface)文件
在数据库环境和数据库表及字段创建好的情况下,就可以正式编写mybatis代码了。
主要是2个,一个是mapper下的接口。另外一个是对应的xml,主要是用来保存sql语句。
package cn.wcyf.wcai.mapper;
import cn.wcyf.wcai.pojo.Student;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface StudentMapper {
void save(Student student);
}
注意:mapper接口类需要加上@Mapper注解
附录:(Student.java 如下)
@Component("student")
public class Student {
private String name;//姓名
private int age;//年龄
private Date create_time;//时间戳
public Date getCreate_time() {
return create_time;
}
public void setCreate_time(Date create_time) {
this.create_time = create_time;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
第六步:编写mapper xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.wcyf.wcai.mapper.StudentMapper">
<insert id="save">
INSERT INTO student (age, name,create_time)
VALUES (#{age}, #{name},#{create_time})
</insert>
</mapper>
注意:这里的namespace命名空间需要保持和接口所在的类名一致,否则会报错。这里的id和接口中的方法名也要保持一致
第七步:在controller中调用mapper接口方法进行数据库增删改查,这里是增
@RequestMapping("/student")
@RestController
public class StudentController {
@Resource
private StudentMapper studentMapper;
@PostMapping("/insert1")
public ResponseObject<Student> save( Student student){
return ResponseObject.createSuccessfulResp("请求成功",student);
}
@PostMapping(value = "/save/json")
public Student save1(@RequestBody Student student){
return student;
}
@GetMapping("/get")
public Student get(Student student){
return student;
}
@GetMapping("/get1/{age}")
public Student get1(@PathVariable Integer age){
Student student = new Student();
student.setAge(age);
return student;
}
@GetMapping("/getParam")
public Student getParam(@RequestParam Integer age,@RequestParam String name){
Student student = new Student();
student.setName(name);
student.setAge(age);
student.setCreate_time(new Date());
studentMapper.save(student);
return student;
}
}
第八步:使用postman等调试工具进行调试
构建好要发送的json数据,然后点击发送。
实际执行后的插入结果如下: