最全的Mybatis-Plus笔记

Mybatis-Plus

创建并初始化数据库

创建数据库

  • mp

创建 User

  • DROP TABLE IF EXISTS user;
    
    CREATE TABLE user
    (
    	id BIGINT(20) NOT NULL COMMENT '主键ID',
    	name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    	age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    	PRIMARY KEY (id)
    );
    
  • DELETE FROM user;
    
    INSERT INTO user (id, name, age, email) VALUES
    (1, 'Jone', 18, 'test1@baomidou.com'),
    (2, 'Jack', 20, 'test2@baomidou.com'),
    (3, 'Tom', 28, 'test3@baomidou.com'),
    (4, 'Sandy', 21, 'test4@baomidou.com'),
    (5, 'Billie', 24, 'test5@baomidou.com');
    

初始化工程

添加依赖

mybatis-plus-boot-starter、MySQL、lombok


### idea中安装lombok插件

## 配置数据库

## 编写代码

### 主类

- ```java
@SpringBootApplication
@MapperScan("com.atguigu.mybatisplus.mapper")
public class MybatisPlusApplication {
 ......
}

实体

  • @Data
    public class User {
        private Long id;
        private String name;
        private Integer age;
        private String email;
    }
    

mapper

  • public interface UserMapper extends BaseMapper<User> {
        
    }
    

测试

  •    @Test
        public void testSelectList() {
            System.out.println(("----- selectAll method test ------"));
            //UserMapper 中的 selectList() 方法的参数为 MP 内置的条件封装器 Wrapper
            //所以不填写就是无任何条件
            List<User> users = userMapper.selectList(null);
            users.forEach(System.out::println);
        }
    

CRUD

插入操作

  •    @Test
        public void testInsert(){
    
            User user = new User();
            user.setName("Helen");
            user.setAge(18);
            user.setEmail("55317332@qq.com");
    
            int result = userMapper.insert(user);
            System.out.println(result); //影响的行数
            System.out.println(user); //id自动回填
        }
    

主键自增策略

  • @TableId(type = IdType.AUTO)
    private Long id;
    

更新操作

  •     @Test
        public void testUpdateById(){
    
            User user = new User();
            user.setId(1L);
            user.setAge(28);
    
            int result = userMapper.updateById(user);
            System.out.println(result);
    
        }
    

查询操作

  • //单个id查询
    User user = userMapper.selectById(1L);
    
    //多个id批量查询
    List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
    
    //条件查询
     HashMap<String, Object> map = new HashMap<>();
        map.put("name", "Helen");
        map.put("age", 18);
        List<User> users = userMapper.selectByMap(map);
    

分页查询

  • 创建配置类
  • /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
    
  • 测试selectPage分页
  • @Test
    public void testSelectPage() {
    
        Page<User> page = new Page<>(1,5);
        userMapper.selectPage(page, null);
    
        page.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());
    }
    

删除操作

  • //根据id进行删除
    @Test
    public void testDeleteById(){
    
        int result = userMapper.deleteById(8L);
        System.out.println(result);
    }
    
    //批量删除
        @Test
        public void testDeleteBatchIds() {
    
            int result = userMapper.deleteBatchIds(Arrays.asList(8, 9, 10));
            System.out.println(result);
        }
        
    //条件查询删除
    @Test
    public void testDeleteByMap() {
    
        HashMap<String, Object> map = new HashMap<>();
        map.put("name", "Helen");
        map.put("age", 18);
    
        int result = userMapper.deleteByMap(map);
        System.out.println(result);
    }
    

逻辑删除

  • //数据库中添加字段
    ALTER TABLE `user` ADD COLUMN `deleted` boolean
        
    //实体类添加delete字段
    @TableLogic
    @TableField(fill = FieldFill.INSERT)
    private Integer deleted;
    
    //添加配置
    @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }
    
    
    //测试逻辑删除
    @Test
    public void testLogicDelete() {
    
        int result = userMapper.deleteById(1L);
        System.out.println(result);
    }
    

自动填充

  • 实体类上加注解
  • @Data
    public class User {
        ......
            
        @TableField(fill = FieldFill.INSERT)
        private Date createTime;
    
        //@TableField(fill = FieldFill.UPDATE)
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Date updateTime;
    }
    
  • 配置类
  • //实体类加注解
    @Data
    public class User {
        ......
            
        @TableField(fill = FieldFill.INSERT)
        private Date createTime;
    
        //@TableField(fill = FieldFill.UPDATE)
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Date updateTime;
    }
    
    //配置类
    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(MyMetaObjectHandler.class);
    
        @Override
        public void insertFill(MetaObject metaObject) {
            LOGGER.info("start insert fill ....");
            this.setFieldValByName("createTime", new Date(), metaObject);
            this.setFieldValByName("updateTime", new Date(), metaObject);
        }
    
        @Override
        public void updateFill(MetaObject metaObject) {
            LOGGER.info("start update fill ....");
            this.setFieldValByName("updateTime", new Date(), metaObject);
        }
    }
    

wapper

AbstractWrapper

  • //ge、gt、le、lt、isNull、isNotNull
    
    @Test
    public void testDelete() {
    
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper
            .isNull("name")
            .ge("age", 12)
            .isNotNull("email");
        int result = userMapper.delete(queryWrapper);
        System.out.println("delete return count = " + result);
    }
    
  • //eq、ne  
    //seletOne返回的是一条实体记录,当出现多条时会报错
    
    @Test
    public void testSelectOne() {
    
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("name", "Tom");
    
        User user = userMapper.selectOne(queryWrapper);
        System.out.println(user);
    }
    
  • //between、notBetween   包含大小边界
    
    @Test
    public void testSelectCount() {
    
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.between("age", 20, 30);
    
        Integer count = userMapper.selectCount(queryWrapper);
        System.out.println(count);
    }
    
  • //allEq
    
    @Test
    public void testSelectList() {
    
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        Map<String, Object> map = new HashMap<>();
        map.put("id", 2);
        map.put("name", "Jack");
        map.put("age", 20);
    
        queryWrapper.allEq(map);
        List<User> users = userMapper.selectList(queryWrapper);
    
        users.forEach(System.out::println);
    }
    
  • //like、notLike、likeLeft、likeRight
    //selectMaps返回Map集合列表
    
    @Test
    public void testSelectMaps() {
    
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper
            .notLike("name", "e")
            .likeRight("email", "t");
    
        List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);//返回值是Map列表
        maps.forEach(System.out::println);
    }
    
  • //in、notIn、inSql、notinSql、exists、notExists
    //可以实现子查询
    
    @Test
    public void testSelectObjs() {
    
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        //queryWrapper.in("id", 1, 2, 3);
        queryWrapper.inSql("id", "select id from user where id < 3");
    
        List<Object> objects = userMapper.selectObjs(queryWrapper);//返回值是Object列表
        objects.forEach(System.out::println);
    }
    
  • //or、and
    //这里使用的是 UpdateWrapper
    
    @Test
    public void testUpdate1() {
    
        //修改值
        User user = new User();
        user.setAge(99);
        user.setName("Andy");
    
        //修改条件
        UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
        userUpdateWrapper
            .like("name", "h")
            .or()
            .between("age", 20, 30);
    
        int result = userMapper.update(user, userUpdateWrapper);
    
        System.out.println(result);
    }
    
  • //嵌套or、嵌套and
    //这里使用了lambda表达式,or中的表达式最后翻译成sql时会被加上圆括号
    
    @Test
    public void testUpdate2() {
    
    
        //修改值
        User user = new User();
        user.setAge(99);
        user.setName("Andy");
    
        //修改条件
        UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
        userUpdateWrapper
            .like("name", "h")
            .or(i -> i.eq("name", "李白").ne("age", 20));
    
        int result = userMapper.update(user, userUpdateWrapper);
    
        System.out.println(result);
    }
    
  • //orderBy、orderByDesc、orderByAsc
    
    @Test
    public void testSelectListOrderBy() {
    
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.orderByDesc("id");
    
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }
    
  • //last
    //直接拼接到 sql 的最后
    //只能调用一次,多次调用以最后一次为准 有sql注入的风险,请谨慎使用
    
    @Test
    public void testSelectListLast() {
    
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.last("limit 1");
    
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }
    
  • //指定要查询的列
    
    @Test
    public void testSelectListColumn() {
    
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("id", "name", "age");
    
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }
    
  • //set、setSql
    //最终的sql会合并 user.setAge(),以及 userUpdateWrapper.set()  和 setSql() 中 的字段
    
    @Test
    public void testUpdateSet() {
    
        //修改值
        User user = new User();
        user.setAge(99);
    
        //修改条件
        UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
        userUpdateWrapper
            .like("name", "h")
            .set("name", "老李头")//除了可以查询还可以使用set设置修改的字段
            .setSql(" email = '123@qq.com'");//可以有子查询
    
        int result = userMapper.update(user, userUpdateWrapper);
    }
    

ql会合并 user.setAge(),以及 userUpdateWrapper.set() 和 setSql() 中 的字段

@Test
public void testUpdateSet() {

  //修改值
  User user = new User();
  user.setAge(99);

  //修改条件
  UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
  userUpdateWrapper
      .like("name", "h")
      .set("name", "老李头")//除了可以查询还可以使用set设置修改的字段
      .setSql(" email = '123@qq.com'");//可以有子查询

  int result = userMapper.update(user, userUpdateWrapper);

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值