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);
}
相关文章
|
5月前
|
XML Java 数据库连接
【MyBatis】MyBatis操作数据库(一)
【MyBatis】MyBatis操作数据库(一)
52 1
|
5月前
|
XML Java 数据库连接
如何使用 MyBatis 来进行增、删、改、查操作
如何使用 MyBatis 来进行增、删、改、查操作
212 2
|
5月前
|
SQL 存储 Java
基于MyBatis的增删改查操作
基于MyBatis的增删改查操作
42 1
|
5月前
|
缓存 Java 数据库连接
我们后端程序员不是操作MyBatis的CRUD Boy
大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天我们接着新的一篇Java进阶指南。为啥都戏称后端是CRUD Boy?难道就因为天天怼着数据库CRUD吗?要我说,是这个岗位的位置要的就是你CRUD,你不得不CRUD。哪有公司天天能给你搭建高并发、高可用、大数据框架的活呢,一条业务线总要成长吧,慢慢成熟了就要装修工来缝缝补补、美化美化,也就是CRUD的活。不能妄自菲薄CRUD Boy,我们是后端工程师。今天来指南下操作数据库之MyBatis框架。
127 3
我们后端程序员不是操作MyBatis的CRUD Boy
|
4月前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
|
4月前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
|
5月前
|
Java 数据库连接 数据库
Spring日志完结篇,MyBatis操作数据库(入门)
Spring日志完结篇,MyBatis操作数据库(入门)
|
6月前
|
XML Java 数据库连接
利用MyBatis框架操作数据库2
利用MyBatis框架操作数据库
46 2
|
6月前
|
Java 数据库连接 测试技术
利用MyBatis框架操作数据库1
利用MyBatis框架操作数据库
50 1
|
5月前
|
SQL Java 数据库连接
【MyBatis】深入解析MyBatis:高效操作数据库技术详解
【MyBatis】深入解析MyBatis:高效操作数据库技术详解
46 0
下一篇
无影云桌面