• MyBatis-Plus中的CURD(含部分注解)


    测试类

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class TestMyBatisSpringBoot {
        @Autowired
        private UserMapper userMapper;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    插入操作

    • 测试类
    • 也可以使用有参构造
        @Test
        public void testInsert(){
            User user = new User();
            user.setAge(30);
            user.setMail("@qq.com");
            user.setUserName("ssc");
            user.setName("曹操");
            user.setPassword("123456");
            int count = this.userMapper.insert(user);
            System.out.println(count);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    注解

    TableId 主键id的属性

    @TableId(type = IdType.AUTO)
    private Long id
    
    • 1
    • 2
    • IdType的五种类型默认是NONE
    public enum IdType {
        AUTO(0),
        NONE(1),
        INPUT(2),
        ID_WORKER(3),
        UUID(4),
        ID_WORKER_STR(5);
    
        private final int key;
    
        private IdType(int key) {
            this.key = key;
        }
    
        public int getKey() {
            return this.key;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    TableField

    指定数据库字段名

    • 指定数据库中的字段名,mail在数据库中没有对应的字段,可以用TableField(value = "email")指定
    @TableField(value = "email")
    private String mail;
    
    • 1
    • 2

    表中不存在的字段

    @TableField(exist = false)
    private String address;
    
    • 1
    • 2

    不查询某个字段

    @TableField(select = false)
    private String password;
    
    • 1
    • 2

    更新操作

    根据id更新

        @Test
        public void testUpdateById(){
            User user = new User();
            user.setId(1L);
            user.setAge(19);
            int i = this.userMapper.updateById(user);
            System.out.println("受影响条数:"+ i);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    根据条件更新

    • 使用实体类 QueryWrapper
    @Test
    public void testUpdateByCondition(){
        User user = new User();
        user.setAge(20);
        user.setPassword("888888");
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("user_name","zhangsan"); // 匹配user_name = "zhangsan" 的条件
        int i = this.userMapper.update(user, wrapper);
        System.out.println("受影响条数:"+ i);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 不用实体类 UpdateWrapper
        @Test
        public void testUpdateByCondition1(){
            UpdateWrapper<User> wrapper = new UpdateWrapper<>();
            wrapper.set("age", 21).set("password","999999") // 更新的字段
                    .eq("user_name","zhangsan"); // 更新的条件
            int i = this.userMapper.update(null, wrapper);
            System.out.println("受影响条数:"+ i);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    删除操作

    根据id删除

        @Test
        public void testDeleteById(){
            int i = this.userMapper.deleteById(8);
            System.out.println("受影响条数:"+ i);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    根据columnMap条件,删除

        @Test
        public void testDeleteByMap(){
            Map<String ,Object> map = new HashMap<>();
            map.put("user_name","ssc");
            map.put("password","123456");
            int i = this.userMapper.deleteByMap(map);
            System.out.println("受影响条数:"+ i);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    根据entity条件,删除

    • 用法一
    @Test
    public void testDeleteByWrapper(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("user_name","ssc").eq("password","123456");
        int i = this.userMapper.delete(wrapper);
        System.out.println("受影响条数:"+ i);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 用法二
        @Test
        public void testDeleteByWrapper(){
            User user = new User();
            user.setUserName("ssc1");
            user.setPassword("123456");
            QueryWrapper<User> wrapper = new QueryWrapper<>(user); // wraper根据user来包装自己的的参数
            int i = this.userMapper.delete(wrapper);
            System.out.println("受影响条数:"+ i);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    根据id,批量删除

        @Test
        public void testDeleteBatchId(){
            int i = this.userMapper.deleteBatchIds(Arrays.asList(8L,9L));
            System.out.println("受影响条数:"+ i);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    DELETE FROM tb_user WHERE id IN ( ? , ? )
    
    • 1

    查询操作

    id查询

        @Test
        public void testSelectById(){
            User user = this.userMapper.selectById(1);
            System.out.println(user);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    查询全部

    @Test
    public void testFindAll(){
        List<User> users = this.userMapper.selectList(null);
        users.forEach(user -> System.out.println(user));
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    id批量查询

    @Test
    public void testSelectBatchId(){
        List<User> users = this.userMapper.selectBatchIds(Arrays.asList(1L, 2L));
        users.forEach(user -> System.out.println(user));
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    entity查询一条记录

    • 查询数据超过一条时会抛出异常

    • 用法一
        @Test
        public void testSelectByWrapper(){
            User user = new User();
            user.setUserName("zhangsan");
            user.setPassword("999999");
            QueryWrapper<User> wrapper = new QueryWrapper<>(user); // wraper根据user来包装自己的的参数
            User user1 = this.userMapper.selectOne(wrapper);
            System.out.println(user1);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 用法二
        @Test
        public void testSelectByWrapper(){
            QueryWrapper<User> wrapper = new QueryWrapper<>(); // wraper根据user来包装自己的的参数
            wrapper.eq("user_name","zhangsan").eq("password","999999");
            User user1 = this.userMapper.selectOne(wrapper);
            System.out.println(user1);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE user_name = ? AND password = ? 
    
    • 1

    根据wrapper条件,查询总记录条数

        @Test
        public void testSelectCount(){
            QueryWrapper<User> wrapper = new QueryWrapper<>(); // wraper根据user来包装自己的的参数
            wrapper.eq("password","123456").gt("age",20);
            Integer integer = this.userMapper.selectCount(wrapper);
            System.out.println(integer);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    SELECT COUNT( 1 ) FROM tb_user WHERE password = ? AND age > ? 
    
    • 1

    entity查询多条列表

        @Test
        public void testSelectAll(){
            QueryWrapper<User> wrapper = new QueryWrapper<>();
            // 查询条件
            wrapper.like("email",".cn");
            List<User> users = this.userMapper.selectList(wrapper);
            users.forEach(user -> System.out.println(user));
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE email LIKE ? 
    
    • 1

    entity查询全部记录(并翻页)

    • 配置插件
      在这里插入图片描述
    • 测试类
        @Test
        public void testSelectPage(){
            Page<User> page = new Page<>(1,2); // 第一页 查询一条数据
            QueryWrapper<User> wrapper = new QueryWrapper<>();
            // 查询条件
            wrapper.like("email",".cn");
            IPage<User> userIPage = this.userMapper.selectPage(page, wrapper);
            System.out.println(userIPage.getTotal());
            System.out.println(userIPage.getPages());
            System.out.println(userIPage.getCurrent());
            List<User> records = userIPage.getRecords();
            records.forEach(item -> System.out.println(item));
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    LeetCode(cai鸟之路)139. 单词拆分
    计算机毕业设计Java程序设计类课程的课堂教学效果评价系统(源码+系统+mysql数据库+lw文档)
    基于标签量信息的联邦学习节点选择算法
    探索多线程编程:线程的本质、状态和属性
    axios.defaults.baseURL的三种配置方法
    java通用分页
    LeetCode 周赛上分之旅 #44 同余前缀和问题与经典倍增 LCA 算法
    MySQL慢查询:慢SQL定位、日志分析与优化方案
    模糊PID之matlab模糊控制器配置
    基于AT89C51单片机的数字电压表PROTEUS仿真设计
  • 原文地址:https://blog.csdn.net/qq_44808710/article/details/125515527