Mybatis-Plus实现常规增删改操作

简介: Mybatis-Plus实现常规增删改操作

通过查看BaseMapper源码,我们发现该接口几乎定义了所有常规的增删改查操作:

3.1 MP实现插入操作


3.1.1 BaseMapper定义操作方法

//  插入
int insert(T entity);

注意事项:

1.如果主键对应的 实体类属性中没有设置主键的生成策略,那么MP自动为主键生成值,且回填到实体对象下;

2.如果未指定主键生成策略,即使表的主键是主键自增,也不会使用主键自增;

3.1.2 代码测试

@Test
public void testInsert() {
  User user =
    User.builder() 
    .userName("小明")
    .name("小红")
    .age(15)
    .email("123@163.com")
    .password("111111")
    .build();
  int insert = userMapper.insert(user);
  System.out.println(insert);
}



插入数据时,我们发现表中ID设置默认自增,但是实际生成的id却是很长串的数字?


3.2 MP主键字段注解-@TableId

3.2.1 注解@TableId介绍

@TableId注解作用:


  1. 映射表中主键字段与实体类属性的关系(尤其表中主键字段名称与实体类属性名称不一致时);
  2. 定义主键生成策略;


@TableId使用:

添加在实体类的主键对应的成员属性上即可;

@TableName("tb_user") // 指定表名
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {
    @TableId(value="id")//字段不一致时,通过value值指定table中主键字段名称
    private Long userId;
    private String userName;
    private String password;
    private String name;
    private Integer age;
    private String email;
}


3.2.2 MP主键生成策略介绍


主键生成策略:


是指为数据库生成主键的方式,我们前面学的数据库主键自增也是一种生成主键的策略,当然除了数据库服务端帮助我们维护主键之外,客户端也可以对主键值进行生成维护。

MP主键生成策略示例:

//指定主键自增的生成策略
@TableId(value = "user_id",type = IdType.AUTO)
private Integet userId;


3.2.3 MP常用主键生成策略

MP提供的常用主键生成策略如下:


image.png


3.2.4 雪花算法(了解)

通过翻阅源码,我们发现IdType.ASSIGN_ID底层基于雪花算法保证主键ID的唯一性:


说明:生成ID的过程让时间戳、数据库服务器标识、序列化号等参与运算,保证分布式环境下ID的唯一性,避免主键冲突;


雪花算法:说白了就是指定在那个机房(机房id)的那台机器(机器的id)在什么时间点(时间戳)下生成的,如果同一台机器存在并发生成主键值,则序列号参(并发的版本号)数运算


3.3 普通列注解-@TableField

3.3.1 注解@TableField作用

注解@TableField作用:


  • 指定表中普通字段与实体类属性之间的映射关系;
  • 忽略实体类中多余属性与表中字段的映射关系(@TableField(exist = false));


以下情况可以省略:


  • 名称一样
  • 数据库字段使用_分割,实体类属性名使用驼峰名称(自动开启驼峰映射)


3.3.2 代码示例

/**
 * 实体类的属性名和数据库的字段名自动映射:
 *  1. 名称一样
 *  2. 数据库字段使用_分割,实体类属性名使用驼峰名称
 */

@TableName("tb_user")
@Data
public class User {
    //设置id生成策略:AUTO 数据库自增
    @TableId(type = IdType.AUTO)
    private Long id;
    //@TableField("user_name")
    private String userName;

    private String password;
  
    @TableField("t_name")
    private String name;
    private Integer age;
    private String email;
    //增删改查操作时,忽略该属性
    @TableField(exist = false)
    private String address;
}


3.4.MP实现删除操作

BaseMaper定义的常用删除方法:

3.4.1 根据id删除

int count = userMapper.deleteById(8L);



3.4.2 根据id集合批量删除

 List ids = new ArrayList();
        ids.add(6);
        ids.add(7);
userMapper.deleteBatchIds(ids);


3.4.3 根据map构造条件,删除

Map<String, Object> map = new HashMap<>();

//delete from tb_user where user_name = ? and age = ?
map.put("user_name","itcast");
map.put("age","18");

userMapper.deleteByMap(map);


3.5 MP实现更新操作

根据实体对象中的id更新数据


注意事项:只更新实体类中存在的数据,如果对应的属性为null,不更新;

@Test
public void testUpdateById() {
  User user = new User();
  user.setId(2L);
  user.setPassword("1111111");
  int count = userMapper.updateById(user);
}
相关文章
|
1月前
|
关系型数据库 Java 数据库连接
MyBatis-Plus简介和入门操作
【1月更文挑战第5天】 一、MyBatis-Plus简介 二、 MyBatis-Plus操作 1、准备数据库脚本 2、准备boot工程 3、导入依赖 4、配置文件和启动类 5、功能编码 6、测试和使用
111 1
|
1月前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
102 0
|
1月前
|
SQL Java 数据库连接
MyBatis的多表操作
MyBatis的多表操作
24 0
|
14天前
|
Java 数据库连接 数据库
Spring日志完结篇,MyBatis操作数据库(入门)
Spring日志完结篇,MyBatis操作数据库(入门)
|
22天前
|
SQL Java 数据库连接
MyBatis 操作数据库
MyBatis 操作数据库
|
22天前
|
XML Java 数据库连接
利用MyBatis框架操作数据库2
利用MyBatis框架操作数据库
22 2
|
22天前
|
Java 数据库连接 测试技术
利用MyBatis框架操作数据库1
利用MyBatis框架操作数据库
23 1
|
1月前
|
SQL Java 数据库连接
MyBatis 初识简单操作
MyBatis 初识简单操作
18 0
|
1月前
|
SQL Java 数据库连接
Javaweb之Mybatis的基础操作之查询操作的详细解析
Javaweb之Mybatis的基础操作之查询操作的详细解析
34 0
|
1月前
|
SQL Java 数据库连接
Javaweb之Mybatis的基础操作之新增和更新操作的详细解析
Javaweb之Mybatis的基础操作之新增和更新操作的详细解析
29 0