「SpringBoot-DAO」 MyBatisPlus

Posted by Dawn-K's Blog on July 2, 2020

MyBatisPlus

[toc] MyBatisPlus是为了单表查询时能够更方便的增删改查, 省去了.xml文件的书写, 提供了大量的内置方法. 官网

配置

MyBatisPlus

在idea中下载MyBatisPlus插件, 并重启idea

配置 pom.xml

1
2
3
4
5
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.3.2</version>
</dependency>

配置 application.yml

# mybatis-plus配置
mybatis-plus:
  configuration:
    cache-enabled: false
    map-underscore-to-camel-case: true
  configuration-properties:
    dbType: mysql
  global-config:
    banner: false
    #    下划线自动转换 ,比如 `role_name` 可以在java中写roleName
    #  这里有可能出现idea的警告,但是无伤大雅
    db-column-underline: true
    db-config:
      id-type: id_worker
      logic-delete-value: 1
      logic-not-delete-value: 0
    refresh-mapper: true
  mapper-locations: classpath*:/mapper/*.xml
  type-aliases-package: com.neuedu.entity

增删改查具体操作

数据库

首先新建一个数据库表his_role 里面两个字段

名称 类型 可空? 主键? 递增?
id BigInt 不可空 主键 递增
role_name varchar(100) 可空

实际上这里还遇到一个小bug, 就是如果id不设置成递增, 那么就会不让保存, 设置了递增, 但是默认值设为1也会在单元测试卡住, 所以这里就是设置递增, 但是不设置默认值. 另外, 修改数据库类型时, 最好先把数据库内容删掉, 否则会报错.

实体类(POJO)

1
2
3
4
5
6
7
8
9
10
11
// 实体类,用于存放数据库的字段
// src/main/java/com.neuedu/entity/Role.java
@TableName("his_role") // 表格名字
@Data                  // 自动生成get/set
public class Role {
    //    指定自增的Id,value主要是为了和数据库的对应,id最好改成bigInt(在数据库中),否则容易放不下
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    // @TableField("role_name") // 可以强制指定该成员对应的列
    private String roleName;
}

包扫描(MapperScan)

1
2
3
4
5
6
7
8
@SpringBootApplication
@MapperScan(value="com.neuedu.mapper") // 包扫描,也是后续函数生效的关键
public class HisMain {
    public static void main(String[] args) {
        // jdbc: select * from users
        SpringApplication.run(HisMain.class, args);
    }
}

接口类(Mapper)

1
2
3
4
5
// 接口类,注意继承关系,为下文单元测试
// src/main/java/com.neuedu/mapper/RoleMapper.java
@Mapper
public interface RoleMapper extends BaseMapper<Role> {
}

单元测试

在类名上 ctrl+shift+T 创建单元测试 在新建的单元测试类上面加入注解@SpringBootTest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 单元测试,用于检测上面的是否正确
// src/test/java/com.neuedu.mapper/RoleMapperTest.java
@SpringBootTest  // 单元测试
@Slf4j           // 日志
class RoleMapperTest {
    @Autowired
    private RoleMapper roleMapper;

    @Test
    public void selectAll() {
        log.info(roleMapper.toString());
    }

    @Test
    public void insert() {
        Role role = new Role();
        role.setRoleName("管理员");
        roleMapper.insert(role);
    }
}