MybatisPlus的CRUD操作

简介: MybatisPlus的CRUD操作

前面有MyBatis-Plus的快速入门的文章,接下来就基于原有代码进行CRUD操作

Insert 插入

编写插入代码:

@Test
    void testInsert(){
        User user = new User();
        user.setAge(12);
        user.setName("Jone");
        user.setEmail("286573@qq.com");
        // 这里我们没有设置id,
        int result = userMapper.insert(user);
        // 打印出受影响的行数
        System.out.println(result);
    }

运行结果:

这里我们发现,我们在添加的时候没有设置Id,但是会给我们自动生成一个全局唯一的Id,这种主键生成的策略即

默认ID_WORKER全局唯一id

又叫做雪花算法

snowflake是Twitter开源的分布式ID生成算法,结果是一个Long型的ID,其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生4096个ID),最后还有一个符号位,永远是0,可以保证几乎全球唯一!

主键自增策略

1、实体类字段上 @TableId(type = IdType.AUTO)

2、数据库Id字段一定要设置自增才可以

继续运行进行测试:

发现id的确为自动增长

源码解释

public enum IdType{
    AUTO(0), // 数据库Id自增
    NONE(1), // 未设置主键
    INPUT(2), // 手动输入
    ID_WORKER(3), // 默认的全局唯一Id
    UUID(4), //全局唯一Id uuid
    ID_WORKER_STR(5); // ID_WORKER 的字符串表示法
}

Update操作

// 修改Id为1的信息
User user = new User();
user.setAge(2);
user.setId(1L);
user.setName("Jone_new");
user.setEmail("286573@qq.com");
int result = userMapper.updateById(user);
System.out.println(result);

结果:

==>  Preparing: UPDATE user SET name=?, age=?, email=? WHERE id=?
==> Parameters: Jone_new(String), 2(Integer), 286573@qq.com(String), 1(Long)
<==    Updates: 1
  • 注意:在修改的过程中,如果有不需要改动的值,则不进行赋值即可,跟我们所学习的动态sql一个道理。

Select操作

// 根据Id查询
User user = userMapper.selectById(1L);
System.out.println(user);
// 查询多个id
List<User> users1 = userMapper.selectBatchIds(Arrays.asList(1L, 2L, 3L));
users1.forEach(System.out::println);
// 查询所有
List<User> users = userMapper.selectList(null);

条件查询方法:

HashMap<String,Object> map = new HashMap<>();
map.put("name","Tom");
// 当然,我们这里也可以添加多个条件
List<User> users2 = userMapper.selectByMap(map);

运行结果:

==> Preparing: SELECT id,name,age,email FROM user WHERE name = ?
==> Parameters: Tom(String)
<== Columns: id, name, age, email
<== Row: 3, Tom, 28, test3@baomidou.com
<== Total: 1

分页查询

1、新建一个配置类

@Configuration
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return mybatisPlusInterceptor;
    }
}

2、直接使用Page对象即可

测试代码:

void testPage(){
   // 参数1: 当前页
   // 参数2: 每页显示多少
   Page<User> page = new Page<>(3, 2);
   userMapper.selectPage(page, null);
   page.getRecords().forEach(System.out::println);
}

结果:

==> Preparing: SELECT id,name,age,email FROM user LIMIT ?,?
==> Parameters: 4(Long), 2(Long)
<== Columns: id, name, age, email
<== Row: 5, Billie, 24, test5@baomidou.com
<== Row: 1505528963727278084, Jone, 12, 286573@qq.com
<== Total: 2

Delete 操作

1、根据id删除

// 根据Id删除
userMapper.deleteById(1L);
// 批量删除
userMapper.deleteBatchIds(Arrays.asList(1L,2L));
// 条件删除
HashMap<String,Object> map = new HashMap<>();
map.put("name","Tom");
userMapper.deleteByMap(map);
  • 逻辑删除

物理删除:从数据库中真实删除 del = 0;

逻辑删除:就是我们并不是真正的删除,只是改变它某个字段的值。del = 1

测试:

1、数据库中添加一个字段

2、实体类添加属性

@TableLogic
private Integer del;

3、配置逻辑删除

mybatis-plus:
  global-config:
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0

测试:

userMapper.deleteById(1L);

结果:

==>  Preparing: UPDATE user SET delete=1 WHERE id=? AND delete=0
==> Parameters: 1(Long)

走的其实是修改过程。

  • 注意:当我们查询的时候,自动过滤掉del = 1的数据,也就是查询不到

测试:

List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);

结果:

User(id=2, del=0, name=Jack, age=20, email=test2@baomidou.com)
User(id=3, del=0, name=Tom, age=28, email=test3@baomidou.com)
User(id=4, del=0, name=Sandy, age=21, email=test4@baomidou.com)
User(id=5, del=0, name=Billie, age=24, email=test5@baomidou.com)
User(id=1505528963727278084, del=0, name=Jone, age=12, email=286573@qq.com)


目录
相关文章
|
6月前
|
SQL Java 数据库连接
|
6月前
MyBatisPlus-标准数据层CRUD功能制作
MyBatisPlus-标准数据层CRUD功能制作
68 0
|
6月前
|
SQL Java 数据库连接
JAVAEE框架技术之7-myBatis ORM框架入门基础CRUD
JAVAEE框架技术之7-myBatis ORM框架入门基础CRUD
158 0
JAVAEE框架技术之7-myBatis ORM框架入门基础CRUD
|
6月前
|
XML Java 数据库连接
MyBatis深入探索:原生API与注解方式实现CRUD操作
MyBatis深入探索:原生API与注解方式实现CRUD操作
121 0
|
6月前
|
Java 关系型数据库 数据库连接
【MyBatisPlus 】MyBatisPlus CRUD 工程使用
【1月更文挑战第19天】【MyBatisPlus 】MyBatisPlus CRUD 工程使用
|
21天前
|
SQL Java 数据库连接
MyBatis-Plus:简化 CRUD 操作的艺术
MyBatis-Plus 是一个基于 MyBatis 的增强工具,它旨在简化 MyBatis 的使用,提高开发效率。
46 1
MyBatis-Plus:简化 CRUD 操作的艺术
|
1月前
|
SQL Java 数据库连接
Mybatis方式完成CRUD操作
Mybatis方式完成CRUD操作
39 0
|
5月前
|
缓存 Java 数据库连接
我们后端程序员不是操作MyBatis的CRUD Boy
大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天我们接着新的一篇Java进阶指南。为啥都戏称后端是CRUD Boy?难道就因为天天怼着数据库CRUD吗?要我说,是这个岗位的位置要的就是你CRUD,你不得不CRUD。哪有公司天天能给你搭建高并发、高可用、大数据框架的活呢,一条业务线总要成长吧,慢慢成熟了就要装修工来缝缝补补、美化美化,也就是CRUD的活。不能妄自菲薄CRUD Boy,我们是后端工程师。今天来指南下操作数据库之MyBatis框架。
124 3
我们后端程序员不是操作MyBatis的CRUD Boy
MybatisPlus-标准CRUD制作,新增boolean save(T t),删除 ~ delete(int id),修改 ~ update(T t),根据id查询,T getById....
MybatisPlus-标准CRUD制作,新增boolean save(T t),删除 ~ delete(int id),修改 ~ update(T t),根据id查询,T getById....
|
5月前
|
SQL XML Java
【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)
【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)
45 1