文章目录

  • MyBatisPlus实现增删改查
  • 1. 插入数据insert
  • 2. 更新数据update
  • 2.1 根据Id更新操作
  • 3. 查询数据select
  • 3.1 根据id查询记录
  • 3.2 通过多个id批量查询
  • 3.3 简单的条件查询
  • 3.4 分页查询
  • 1. 创建配置类
  • 2. 测试selectPage分页
  • 3.测试selectMapsPage分页
  • 3.5 其它查询
  • 4. 删除数据delete
  • 4.1 根据id删除记录
  • 4.2 批量删除
  • 4.3 简单的条件查询删除
  • 4.4 配置逻辑删除

MyBatisPlus实现增删改查

1. 插入数据insert

主键生成策略我们使用默认的ID_WORKER或ID_WORKER_STR策略userMapper

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

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testInsert(){
        User user = new User();

        user.setName("HeMiao2");
        user.setAge(28);
        user.setEmail("55317332@qq.com");
        
        int result = userMapper.insert(user);

        // 影响的行数
        System.out.println(result); 

        // id自动回填
        System.out.println(user); 
    }
}

注意:数据库插入id值默认为:全局唯一id

spring mybatis增删改查_spring mybatis增删改查

2. 更新数据update

2.1 根据Id更新操作

注意:update时生成的sql自动是动态sql:UPDATE user SET age=? WHERE id=?

@Test
    public void testUpdateById(){
        User user = new User();
        user.setId(1L);
        user.setAge(48);

        int result = userMapper.updateById(user);

        System.out.println(result);

    }

3. 查询数据select

3.1 根据id查询记录
/**
     * 根据id查询记录
     */
    @Test
    public void testSelectById(){
        User user = userMapper.selectById(1L);
        System.out.println("user = " + user);
    }
3.2 通过多个id批量查询

完成了动态sql的foreach的功能

/**
     * 通过多个id批量查询
     */
    @Test
    public void  testSelectBatchIds(){
        List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
        users.forEach(System.out::println);
    }
3.3 简单的条件查询

通过map封装查询条件

注意:

  • map中的key对应的是数据库中的列名。例如数据库user_id,实体类是userId,这时map的key需要填写user_id
/**
     * 通过map封装查询条件
     */
    @Test
    public void testSelectByMap(){
        Map<String,Object> map = new HashMap<>();
        // map.put("name","Helen");
        map.put("age",28);
        List<User> users = userMapper.selectByMap(map);
        // forEach遍历
        users.forEach(System.out::println);
    }
3.4 分页查询

MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能

spring mybatis增删改查_spring mybatis增删改查_02

1. 创建配置类

此时可以删除主类中的 @MapperScan扫描注解,把它移到配置类MyBatisPlusConfig中。

/**
 * @Date 2020/4/10 22:53
 * @Version 10.21
 * @Author DuanChaojie
 */
@Configuration
@EnableTransactionManagement
@MapperScan("cn.justweb.mybatisplus.mapper")
public class MyBatisPlusConfig {

    /**
     * 乐观锁插件
     * @return
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor(){
        return new OptimisticLockerInterceptor();
    }

    /**
     * 分页插件
     * @return
     */
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        return new PaginationInterceptor();
    }
}
2. 测试selectPage分页

测试:最终通过page对象获取相关数据

控制台sql语句打印:SELECT id,name,age,email,create_time,update_time FROM user LIMIT 0,5

@Test
    public void testSelectPage(){
        Page<User> page = new Page<>(1, 5);
        userMapper.selectPage(page,null);
        System.out.println("分页查找的内容:");
        page.getRecords().forEach(System.out::println);

        // 当前页
        System.out.println("page.getCurrent() = " + page.getCurrent());
        // 总页数
        System.out.println("page.getPages() = " + page.getPages());
        // 每页个数
        System.out.println("page.getSize() = " + page.getSize());
        // 总记录数
        System.out.println("page.getTotal() = " + page.getTotal());
        //
        System.out.println("page.hasPrevious() = " + page.hasPrevious());

    }
3.测试selectMapsPage分页
  • 结果集是Map
@Test
public void testSelectMapsPage() {

    Page<User> page = new Page<>(1, 5);

    IPage<Map<String, Object>> mapIPage = userMapper.selectMapsPage(page, null);

    //注意:此行必须使用 mapIPage 获取记录列表,否则会有数据类型转换错误
    mapIPage.getRecords().forEach(System.out::println);
    
    System.out.println(page.getCurrent());
    System.out.println(page.getPages());
    System.out.println(page.getSize());
    System.out.println(page.getTotal());
    System.out.println(page.hasNext());
    System.out.println(page.hasPrevious());
}
3.5 其它查询

如果想进行复杂条件查询,那么需要使用条件构造器 Wapper,涉及到如下方法

  1. delete
  2. selectOne
  3. selectCount
  4. selectList
  5. selectMaps
  6. selectObjs
  7. update

4. 删除数据delete

4.1 根据id删除记录
/**
     * 根据id删除记录
     */
    @Test
    public void testDeleteById(){
        int result = userMapper.deleteById(1L);
        System.out.println("result = " + result);
    }
4.2 批量删除
/**
     * 根据ids批量删除
     */
    @Test
    public void testDeleteBatchIds(){
        int result = userMapper.deleteBatchIds(Arrays.asList(2L, 3L));
        System.out.println("result = " + result);
    }
4.3 简单的条件查询删除
/**
     * 简单的条件查询删除
     */
    @Test
    public void testDeleteByMap(){
        Map<String,Object> map = new HashMap<>();
        map.put("name","Helen");
        map.put("age",18);
        int result = userMapper.deleteByMap(map);
        System.out.println("result = " + result);

    }
4.4 配置逻辑删除

后面会再讲