MybatisPlus的使用

一.  关于注解的使用,官方地址:

注解 | MyBatis-PlusMyBatis-Plus 官方文档https://baomidou.com/pages/223848/#tablename

 

1.关于@TableName的使用

 假设我们不加@TableName("tbl_employee")的话,那么数据库中的表名和类名相同的话,那么是ok的,如果不同,为我们就必须加上@TableName这个注解。

2.关于@TableId的使用

这是一个主键注解,用在实体类主键字段上

如果我们不加@TableId注解的话,mp 会自动识别pojo类中名为id的属性,如果名字叫id就会当做是主键,

全局生成策略有几种,我们最常用的就是自增长的类型的

除了在每个实体类上的id属性字段上加上@TableId

还有一种方式:

就是将id属性字段上加上@TableId去掉

之后再核心配置文件中加入以下:

3.@TableField注解的使用

当实体类属性名和数据库中标的字段名不一致的情况下,使用该注解可以设置对应的映射关系。

@TableName("sys_user")
public class User {
    @TableId
    private Long id;
    @TableField("nickname")
    private String name;
    private Integer age;
    private String email;
}

 如果有一个字段不是表中的字段

可以使用:

@TableField(exist = false)
private String genderName;

 二.  关于MP的分页使用

1.在配置类中加入分页插件,不加分页插件的话,分页无法使用

 // 最新版
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

2.在Service中使用

    @Test
    public void queryPage(){
        IPage<Desc> page = new Page<Desc>(1,5);
        IPage<Desc> descIPage = descService.page(page);
        System.out.println("一共多少页?"+descIPage.getPages());
        System.out.println("当前第几页?"+descIPage.getCurrent());
        System.out.println("一共多少条数据?"+descIPage.getTotal());
        System.out.println("一页多少条数据?"+descIPage.getSize());
        System.out.println(descIPage.getRecords());
    }

ps:

自定义的 mapper#method 使用分页

IPage<UserVo> selectPageVo(IPage<?> page, Integer state);
// or (class MyPage extends Ipage<UserVo>{ private Integer state; })
MyPage selectPageVo(MyPage page);
// or
List<UserVo> selectPageVo(IPage<UserVo> page, Integer state);

<select id="selectPageVo" resultType="xxx.xxx.xxx.UserVo">
    SELECT id,name FROM user WHERE state=#{state}
</select>

如果返回类型是 IPage 则入参的 IPage 不能为null,因为 返回的IPage == 入参的IPage; 如果想临时不分页,可以在初始化IPage时size参数传 <0 的值;
如果返回类型是 List 则入参的 IPage 可以为 null(为 null 则不分页),但需要你手动 入参的IPage.setRecords(返回的 List);
如果 xml 需要从 page 里取值,需要 page.属性 获取

三.  关于MP中的条件构造器Wrapper的使用

在学习MP的过程中,之前我们进行数据库操作的时候最多是用map进行对等条件的筛选

那么怎么进行更复杂的筛选呢?比如条件筛选模糊匹配等等?那么就是用条件构造器

    @Test
    public void queryWrapper(){
        QueryWrapper<Desc> wrapper = new QueryWrapper<>();
        QueryWrapper<Desc> eq = wrapper.select("id", "name_desc").eq("name_desc", "小兔");
        List<Desc> list = descService.list(eq);
        System.out.println(list);
    }

注意:此处的map-underscore-to-camel-case: true这个属性需要设置成true

不设置成true也可以

写成如下:

 @Test
    public void queryWrapper(){
        QueryWrapper<Desc> wrapper = new QueryWrapper<>();
        QueryWrapper<Desc> eq = wrapper.select("id", "name_desc as nameDesc").eq("name_desc", "小兔");
        List<Desc> list = descService.list(eq);
        System.out.println(list);
    }

between

@Test
public void queryWrapperBetween(){
    QueryWrapper<Desc> wrapper = new QueryWrapper<>();
    QueryWrapper<Desc> eq = wrapper.between("id",2L,10L);
    List<Desc> list = descService.list(eq);
    System.out.println(list);
}

updateWrapper

 @Test
    public void updateWrapper01(){
        UpdateWrapper<Desc> wrapper = new UpdateWrapper<>();
        wrapper.set("name_desc","小兔子")/*.eq("id","2")*/
                /*.in("id","3","4","5");*/
                .between("id",9L,15L);
        boolean update = descService.update(wrapper);
        System.out.println(update);
    }

lambda方式

LambdaQueryWrapper

// 以上都是硬编码方式,不想用硬编码的方式,那就使用lambda表达式的方式

    @Test
    public void queryWrapperLambada(){
        QueryWrapper<Desc> wrapper = new QueryWrapper<>();
        LambdaQueryWrapper<Desc> eq = wrapper.lambda().select(Desc::getId,Desc::getNameDesc).eq(Desc::getId, 2L);
        Desc one = descService.getOne(eq);
        System.out.println(one);
    }

LambdaUpdateWrapper

@Test
public void updateWrapperLambada(){
    UpdateWrapper<Desc> wrapper = new UpdateWrapper<>();
    wrapper.lambda().set(Desc::getNameDesc,"小兔子乖乖")
            .between(Desc::getId,12L,15L);
    boolean update = descService.update(wrapper);
    System.out.println(update);
}

未完待续...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值