MyBatisPlus学习总结

1 入门案例

2 MyBatisPlus简介

3 标准数据层开发

3.1 CRUD开发

@SpringBootTest
class MpApplicationTests {

    @Autowired
    private BookDao bookDao;

    @Test
    void testSave(){
        Book book = new Book();
        book.setName("黑马程序员");
        book.setDescription("hahah");
        book.setType("计算机");
        book.setId(6);
        bookDao.insert(book);
    }

    @Test
    void testDelete(){
        bookDao.deleteById(6);
    }

    @Test
    void testUpdate(){
        Book book = new Book();
        book.setId(1);
        book.setName("haha");
        bookDao.updateById(book);
    }

    @Test
    void testSelect() {
        System.out.println(bookDao.selectById(1));
    }

}

3.2 Lombok使用

        省去实体类的get、set、toString方法

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
@Data
public class Book implements Serializable {
    private Integer id;
    private String type;
    private String name;
    private String description;

}

3.3 分页功能

3.3.1 设置分页拦截器作为Spring管理的Bean

@Configuration
public class MpConfig  {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        //1.定义Mp拦截器
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        //2.添加具体的拦截器
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

3.3.2 编写分页查询代码

    @Test
    void testGetByPage(){
        //current当前页,size条数
        Page<Book> bookPage = new Page<>(2,2);
        bookDao.selectPage(bookPage,null);
        System.out.println("当前页码值:"+bookPage.getCurrent());
        System.out.println("每页显示数:"+bookPage.getSize());
        System.out.println("一共多少页:"+bookPage.getPages());
        System.out.println("一共多少条:"+bookPage.getTotal());
        System.out.println("数据:"+bookPage.getRecords());
    }

3.4 mp日志开启(application.properties文件中)

#开启mp日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

4 DQL编程控制

4.1 日志设置

        日志信息太多,添加.xml文件过滤:

        去除 Spring和MybatisPlus启动动画,在application.properties文件中添加:

#取消spring的图片
spring.main.banner-mode=off

#取消mybatisplus的图片
mybatis-plus.global-config.banner=false 

4.2 条件查询---组合查询条件

    @Test
    void textGetAll(){
        //方式一:按条件查询
//        QueryWrapper<Book> qw = new QueryWrapper<>();
//        qw.lt("id",3);
//        System.out.println(bookDao.selectList(qw));

        //方式二:Lambda格式按条件查询
//        QueryWrapper<Book> qw = new QueryWrapper<>();
//        qw.lambda().lt(Book::getId,3);
//        System.out.println(bookDao.selectList(qw));

        //方式三:Lambda格式按条件查询
        LambdaQueryWrapper<Book> blqw = new LambdaQueryWrapper<>();
        //(3,5]
//        blqw.le(Book::getId,5).gt(Book::getId,3);
        //(0,2)或(3,5)
        blqw.gt(Book::getId,3).or().lt(Book::getId,2);
        System.out.println(bookDao.selectList(blqw));
    }

4.3 条件查询---null处理

        在平常查询过程中,客户对某些条件并未设置,即查询条件不完整

        模拟代码:

        BookQuery bookQuery = new BookQuery();
        bookQuery.setId(1);
//        bookQuery.setId(4);

        LambdaQueryWrapper<Book> blqw = new LambdaQueryWrapper<>();
        blqw.lt(Book::getId,bookQuery.getId2());
        blqw.gt(Book::getId,bookQuery.getId());
        System.out.println(bookDao.selectList(blqw));

        产生结果:错误查询

        修改:基于条件查询

        blqw.lt(null != bookQuery.getId2(),Book::getId,bookQuery.getId2());
        blqw.gt(null != bookQuery.getId(),Book::getId,bookQuery.getId());

4.4 查询投影

4.4.1 查询部分字段

        只查询部分字段,其他字段显示为空:

        //查询投影
        LambdaQueryWrapper<Book> blqw = new LambdaQueryWrapper<>();
        blqw.select(Book::getId,Book::getName,Book::getType);
        System.out.println(bookDao.selectList(blqw));

4.4.2 统计数据

        QueryWrapper<Book> blqw = new QueryWrapper<>();
        blqw.select("count(*) as count");
        System.out.println(bookDao.selectMaps(blqw));

4.4.3 分组查询

        QueryWrapper<Book> blqw = new QueryWrapper<>();
        blqw.select("count(*) as count,type");
        blqw.groupBy("type");
        System.out.println(bookDao.selectMaps(blqw));

4.5 查询条件(查阅文档)

例子:

//        //条件查询
//        LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<>();
//        //  =
//        lqw.eq(Book::getName,"数字媒体").eq(Book::getType,"数字媒体");
//
//        Book book = bookDao.selectOne(lqw);
//        System.out.println(book);

        //范围查询
//        LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<>();
//        // 范围查询 lt le gt ge eq between
//        lqw.between(Book::getId,2,5);
//        System.out.println(bookDao.selectList(lqw));

        //模糊查询
        LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<>();
        //like ''%   likeLeft %''
        lqw.like(Book::getName,"数");
        System.out.println(bookDao.selectList(lqw));

4.6 字段映射与表名映射

4.6.1 问题一:表字段与编码属性设置不同步

4.6.2 问题二:编码中添加了数据库中未定义的属性

4.6.3 问题三:采用默认查询开放了更多的字段查看权限

4.6.4 问题四:表名开发与编码开发设计不同步

5 DML编程控制

5.2 Insert

5.2.1 id生成策略

        不同的表应用不同的策略:

5.2.2 全局配置

5.3 Delete

5.3.1 多记录操作

        deleteBatchIds()方法:

    void testDelete2(){
        ArrayList<Integer> ids = new ArrayList<>();
        ids.add(7);
        ids.add(8);
        ids.add(9);
        bookDao.deleteBatchIds(ids);
    }

        selectBatchids()方法:

    void testSelect2(){
        ArrayList<Integer> ids = new ArrayList<>();
        ids.add(1);
        ids.add(2);
        ids.add(3);
        System.out.println(bookDao.selectBatchIds(ids));
    }

5.3.2 逻辑删除

        表面上删除数据,实际还保留:

        流程:

        利用全局配置简化:

5.4 乐观锁

6 快速开发

代码生成器(略)

spring+springmvc+mybatis 完结撒花(耗时四十多天)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值