0%

IDEA+Spring Boot+Mybatis+MySQL整合

准备工作

  • IntelliJ IDEA旗舰版2019.3.2
  • MySQL 8.0.19

    创建一个表

    在数据库demo中创建一个user表,包含字段id,name,gender

想偷懒的话在MySQL命令行粘贴下面的内容:

1
2
3
4
5
6
7
CREATE DATABASE IF NOT EXISTS demo CHARACTER SET utf8;
USE demo;
CREATE TABLE user(id INT,name VARCHAR(20),gender VARCHAR(1));
INSERT INTO user(id,NAME,gender) VALUES(01,'张三','男');
INSERT INTO user(id,NAME,gender) VALUES(02,'李四','女');
INSERT INTO user(id,NAME,gender) VALUES(03,'王五','男');
SELECT id,name FROM user;

返回如下信息

1
2
3
4
5
6
7
8
+------+------+
| id | name |
+------+------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
+------+------+
3 rows in set (0.00 sec)

搭建Spring Boot框架

参照上一篇文章

pom.xml中添加如下依赖,注意自己的MySQL版本

1
2
3
4
5
6
7
8
9
10
11
12
<!-- 添加 MyBatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- 添加 MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>

resources\application.properties中添加下列语句连接数据库
1
2
3
4
5
spring.datasource.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis.type-aliases-package=com.example.demo.mapper

  • spring.datasource.url 数据库连接字符串,3306是MySQL的端口,demo是表所在的库,后面的参数直接复制就好了,之前有个时区参数忘记加上去总是报错
  • spring.datasource.username 数据库用户名
  • spring.datasource.password 数据库密码
  • spring.datasource.driver-class-name 驱动类型(注意MySQL 8.0的值是com.mysql.cj.jdbc.Driver和之前不同)
  • mybatis.type-aliases-package 配置mapper包名,这个到看后面就知道了

源文件编写

简单一些,我们分为三部分:实体类、Mapper接口、Controller类,Controller类直接调用Mapper接口进行数据持久化处理

实体类

新建一个entity包,新建一个User类

1
2
3
4
5
6
7
8
package com.example.demo.entity;

public class User {
private int id;
private String name;
private String gender;
//全都是private那咋处理嘛,不要着急,往下看
}

右键-Generate…-Getter and Setter

Alt+Insert+Getter and Setter

全都选上点击OK,IDEA就是这么舒服

Mapper接口

我们新建一个mapper包
在这个包新建一个UserMapper接口,利用注解实现SQL指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.example.demo.mapper;

import com.example.demo.entity.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository
public interface UserMapper {
@Select("SELECT * FROM user")
@Results({
@Result(property = "name", column = "name")
})
List<User> getAll();
@Select("select * from user where id=#{id}")
User getById(int id);

@Insert({"insert into user(id,name,gender) values(#{id},#{name},#{gender})"})
void install(User user);

@Update({"update user set name=#{name},gender=#{gender} where id=#{id}"})
void Update(User user);

@Delete("delete from user where id=#{id}")
void delete(int id);
}

@Select 查询注解

@Result 结果集标识,用来对应数据库列名的,如果实体类属性和数据库属性名保持一致,可以忽略此参数

@Insert 插入注解

@Update 修改注解

@Delete 删除注解

完成这步之后我们在主程序入口添加一个

1
@MapperScan("com.example.demo.mapper")

这样就不用每个Mapper都注解一次了,记得改成自己的mapper目录

Controller类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.example.demo.web;

import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController {
@Autowired
private UserMapper userMapper;

@GetMapping("/getAll")
public List<User> getAll(){
return userMapper.getAll();
}
@GetMapping("/install")
public List<User> install(User user){
userMapper.install(user);
return userMapper.getAll();
}
@GetMapping("/delete")
public List<User> delete(int id){
userMapper.delete(id);
return userMapper.getAll();
}
@GetMapping("/update")
public List<User> update(User user){
userMapper.Update(user);
return userMapper.getAll();
}
@GetMapping("/get")
public User get(int id){
return userMapper.getById(id);
}
}

测试

查询所有数据

1
http://localhost:8080/getAll

在这里插入图片描述

为了美观其实可以写个toString方法变成换行输出,这里纯粹偷懒

增加数据

1
http://localhost:8080/install?id=4&name=孙六&gender=男

在这里插入图片描述

删除数据

1
http://localhost:8080/delete?id=4

在这里插入图片描述

修改数据

1
http://localhost:8080/update?id=3&name=王六&gender=女

在这里插入图片描述

后续可以完善模糊查找之类的

-----------看到底线啦 感谢您的阅读-------------