SpringBoot操作数据库

6.MybatisPlus快速上手.pptx


ORM介绍



MyBatis-Plus介绍


MyBatis图标是红色的,MyBatis-Plus的图标是蓝色的


添加依赖:

pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!--  MyBatisPlus依赖  -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<!-- mysql驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- 数据连接池 druid。使用连接池,可以一次性申请多个连接 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.20</version>
</dependency>




做一些全局配置:

src/main/resources/application.properties:

1
2
3
4
5
6
7
8
9
# 连接池配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false
spring.datasource.username=root
spring.datasource.password=12345678
# 指定日志格式
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
server.port=8088

新建一个mapper目录,数据库相关的操作都放到下面

添加@MapperScan注解,映射数据库。告诉sb扫描什么包

src/main/java/com/example/mpdemo/MpdemoApplication.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.example.mpdemo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.mpdemo.mapper")
public class MpdemoApplication {

public static void main(String[] args) {
SpringApplication.run(MpdemoApplication.class, args);
}

}

MyBatis-Plus CRUD操作


新建一张t_user表:

1
2
3
4
5
6
7
8
9
10
11
-- auto-generated definition
create table t_user
(
id int auto_increment
primary key,
username varchar(255) null,
birthday varchar(255) null,
password varchar(255) null,
constraint user_id_uindex
unique (id)
);

并写入几条数据


创建一个User类,

src/main/java/com/example/mpdemo/entity/User.java:

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.example.mpdemo.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.util.List;

@TableName("t_user")
public class User {
@TableId(type = IdType.AUTO)
private int id;
private String username;
private String password;
private String birthday;

// 描述用户的所有订单
@TableField(exist = false)
private List<Order> orders;

// alt + insert

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getBirthday() {
return birthday;
}

public void setBirthday(String birthday) {
this.birthday = birthday;
}

public List<Order> getOrders() {
return orders;
}

public void setOrders(List<Order> orders) {
this.orders = orders;
}

@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", birthday='" + birthday + '\'' +
", orders=" + orders +
'}';
}
}

src/main/java/com/example/mpdemo/mapper/UserMapper.java:

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
40
41
package com.example.mpdemo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.mpdemo.entity.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

// 该文件的命名,一般以数据库操作的表+Mapper结尾

//用于操作用户表,MyBaits会根据Mapper注解,动态实现UserMapper接口(实现类),动态代理技术
//Spring会自动创建UserMapper接口实现类对应的实例
@Mapper
public interface UserMapper extends BaseMapper<User> {

// 查询所有用户
@Select("select * from user")
public List<User> findShuang();



// 查询用户,根据用户id查询信息 select * from user where id =
@Select("select * from t_user where id = #{id}")
User selectById(int id);


// 查询用户及其所有的订单
@Select("select * from t_user")
@Results(
{
@Result(column = "id",property = "id"),
@Result(column = "username",property = "username"),
@Result(column = "password",property = "password"),
@Result(column = "birthday",property = "birthday"),
@Result(column = "id",property = "orders",javaType = List.class,
many=@Many(select = "com.example.mpdemo.mapper.OrderMapper.selectByUid")
)
}
)
List<User> selectAllUserAndOrders();
}

src/main/java/com/example/mpdemo/controller/UserContoller.java:

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package com.example.mpdemo.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.mpdemo.entity.User;
import com.example.mpdemo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@CrossOrigin
public class UserContoller {

@Autowired
UserMapper userMapper;


@GetMapping("/user")
public List<User> findShuang(){
return userMapper.findShuang();
}


@GetMapping("/user/findAll")
public List<User> find(){
return userMapper.selectAllUserAndOrders();
}

// 条件查询
@GetMapping("/user/find")
public List<User> findByCond(){
QueryWrapper<User> queryWrapper = new QueryWrapper();
queryWrapper.eq("username","杨玉环");
return userMapper.selectList(queryWrapper);
}

// 分页查询
@GetMapping("/user/findByPage")
public IPage findByPage(){
//设置起始值及每页条数
Page<User> page = new Page<>(0,2);
IPage iPage = userMapper.selectPage(page,null);
return iPage;
}

// 插入数据
@PostMapping("/user")
public String save(User user){
int r= userMapper.insert(user);
if(r > 0){
return "插入成功";
}else{
return "插入失败";
}
}
}



MyBatis-Plus文档

mybatis-plus

mybatis-plus-doc


多表查询及分页查询


7.多表查询及分页查询.pptx


多表查询:

再新建一张 t_order表:

1
2
3
4
5
6
7
8
9
10
11
-- auto-generated definition
create table t_order
(
id int auto_increment
primary key,
order_time varchar(255) null,
total varchar(255) null,
uid int null,
constraint t_order_id_uindex
unique (id)
);

@Result是给每一个字段赋值,前面是表里面的字段,后面是类里面的字段


条件查询:


QueryWrapper

AbstractWrapper


分页:


定义一个配置类,只需要告诉数据库类型

定义了一个分页拦截器

src/main/java/com/example/mpdemo/config/MyBatisPlusConfig.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.example.mpdemo.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor paginationInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
interceptor.addInnerInterceptor(paginationInterceptor);
return interceptor;

}
}