3、通用CRUD

通过前面的学习,我们了解到通过继承BaseMapper就可以获取到各种各样的单表操作,接下来我们将详细讲解这些 操作。

image-20221027103547226.png

3.1、插入操作

3.1.1、方法定义

/**
* 插入一条记录
*
* @param entity 实体对象
*/
int insert(T entity);

3.1.2、测试用例

package cn.itcast.mp;

import cn.itcast.mp.mapper.UserMapper;
import cn.itcast.mp.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testInsert(){
        User user = new User();
        user.setAge(20);
        user.setEmail("[email protected]");
        user.setName("曹操");
        user.setUserName("caocao");
        user.setPassword("123456");
        int result = this.userMapper.insert(user); //返回的result是受影响的行数,并不是自增后的id
        System.out.println("result = " + result);
        System.out.println(user.getId()); //自增后的id会回填到对象中
    }
}

3.1.3、测试

2022-10-27 11:10:19.222  INFO 1387 --- [           main] cn.itcast.mp.UserMapperTest              : Started UserMapperTest in 3.961 seconds (JVM running for 5.2)
2022-10-27 11:10:19.597 DEBUG 1387 --- [           main] cn.itcast.mp.mapper.UserMapper.insert    : ==>  Preparing: INSERT INTO tb_user ( id, user_name, password, name, age, email ) VALUES ( ?, ?, ?, ?, ?, ? ) 
2022-10-27 11:10:19.620 DEBUG 1387 --- [           main] cn.itcast.mp.mapper.UserMapper.insert    : ==> Parameters: 1585468910826754050(Long), caocao(String), 123456(String), 曹操(String), 20(Integer), [email protected](String)
2022-10-27 11:10:19.626 DEBUG 1387 --- [           main] cn.itcast.mp.mapper.UserMapper.insert    : <==    Updates: 1
result = 1
1585468910826754050
2022-10-27 11:10:19.654  INFO 1387 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2022-10-27 11:10:19.690  INFO 1387 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

image-20221027112345047.png

可以看到,数据已经写入到了数据库,但是,id的值不正确,我们期望的是数据库自增长,实际是MP生成了id的值 写入到了数据库。 如何设置id的生成策略呢?

MP支持的id策略:

package com.baomidou.mybatisplus.annotation;
import lombok.Getter;
/**
* 生成ID类型枚举类
*
* @author hubin
* @since 2015-11-10
*/
@Getter
public enum IdType {
/**
* 数据库ID自增
*/
AUTO(0),
/**
* 该类型为未设置主键类型
*/
NONE(1),
/**
* 用户输入ID
* <p>该类型可以通过自己注册自动填充插件进行填充</p>
*/
INPUT(2),
/* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
/**
* 全局唯一ID (idWorker)
*/
ID_WORKER(3),
/**
* 全局唯一ID (UUID)
*/
UUID(4),
/**
* 字符串全局唯一ID (idWorker 的字符串表示)
*/
ID_WORKER_STR(5);
private final int key;
IdType(int key) {
this.key = key;
}
}

修改当前自增长的id

执行插入操作

image-20221027114545829.png

image-20221027121339725.png

image-20221027121309606.png