mp个人经验

文章介绍了MybatisPlus作为Mybatis的扩展,如何在不修改原有代码的基础上增强功能,如无侵入性、内置通用Mapper和分页插件。展示了如何配置Druid数据源,以及使用MybatisPlus进行CRUD操作、Lambda查询和条件构造,包括And、Or关系及处理Null值的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近要用mp
MybatisPlus是在mybatis基础上对代码进行增强,其本质并未对代码进行修改。

其特性是:

  • 无侵入:只做增强不做改变,不会对现有工程产生影响
  • 强大的 CRUD 操作:内置通用 Mapper,少量配置即可实现单表CRUD 操作
  • 支持 Lambda:编写查询条件无需担心字段写错
  • 支持主键自动生成
  • 内置分页插件

1.所需依赖

com.baomidou mybatis-plus-boot-starter 3.4.1 com.alibaba druid 1.1.16 因为MybatisPlus未收录到idea的系统内置配置,无法在创建项目时勾选加入

如果需要使用Druid数据源,需要导入其坐标

2.配置文件

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
# 开启mp的日志(输出到控制台)
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3.常用功能

CRUD

新增:

void add() {
    User user = new User();
    user.setAge(12);
    user.setName("nihao");
    user.setPassword("1234");
    user.setTel("1111111111");
    userDao.insert(user);
    log.info("新增用户==>{}",user);
}

修改:

void updateById(){
    User user = new User();
    user.setId(7L);
    user.setAge(22);
    user.setName("您好");
    user.setPassword("123321");
    user.setTel("13322222222");
    userDao.updateById(user);
    log.info("根据id修改用户信息==>{}", user);
}

查单个

void findById(){
    User user = userDao.selectById(1);
    log.info("根据id寻找==>{}",user);
}

查全部

void findAll(){
    List<User> userList = userDao.selectList(null);//其中可设置querryWrapper
    log.info("查询所有用户{}",userList);
}

删除

void deleteById(){
    int deleteById = userDao.deleteById(6);
    log.info("根据id删除用户");
}

分页功能

void page(){
    //1.创建IPage分页对象。设置分页参数
    IPage<User> page = new Page<>(1, 3);
    //2.执行分页查询
    userDao.selectPage(page,null);
    //3.获取分页结果
    log.info("当前页码值:{}",page.getCurrent());
    log.info("每页显示数:{}",page.getSize());
    log.info("总页数:{}",page.getPages());
    log.info("总条数:{}",page.getTotal());
    log.info("当前页数据:{}",page.getRecords());
}

DQL编程控制

方式一:按条件查询

void find() {
    QueryWrapper<User> qw = new QueryWrapper<>();
    qw.lt("age", 10);
    List<User> users = userDao.selectList(qw);
    log.info("按照条件查找结果==>{}", users);
}

方式二:lambda格式按条件查询

void findByLambda() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
    queryWrapper.lambda().lt(User::getAge, 10);
    List<User> users = userDao.selectList(queryWrapper);
    log.info("lambda格式按条件查询==>{}", users);
}

方式三:lambda格式按条件查询(LambdaQueryWrapper)

void findByLambda2() {
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    lambdaQueryWrapper.lt(User::getAge, 10);
    List<User> users = userDao.selectList(lambdaQueryWrapper);
    log.info("lambda格式按条件查询==>{}", users);
}

组合条件

and关系

void andDemo() {
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //8-18岁之间的
    lambdaQueryWrapper.le(User::getAge, 18).ge(User::getAge, 8);
    List<User> users = userDao.selectList(lambdaQueryWrapper);
    log.info("8-18岁之间的人有:{}", users);
}
void andDemo2() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    //5-18岁之间
    queryWrapper.le("age", 18).ge("age", 5);
    List<User> users = userDao.selectList(queryWrapper);
    log.info("8-18岁之间的人有:{}", users);
}

or关系

void orDemo1() {
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    lambdaQueryWrapper.ge(User::getAge, 8).or().le(User::getAge, 18);
    List<User> users = userDao.selectList(lambdaQueryWrapper);
    log.info("大于8或者小于18岁的人有:{}", users);
}

null值处理

//if语句控制条件追加
void ifDemo() {
    Integer minAge = 10;
    Integer maxAge = null;
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    lambdaQueryWrapper.ge(null != minAge, User::getAge, minAge);
    lambdaQueryWrapper.le(null != maxAge, User::getAge, maxAge);
    List<User> users = userDao.selectList(lambdaQueryWrapper);
    for (User user : users) {
        log.info("年龄大于{}小于{}的人==>{}", minAge, maxAge, user);
    }
}
//链式
void ifDemo02() {
    Integer minAge = 10;
    Integer maxAge = null;
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    lambdaQueryWrapper.ge(null != minAge, User::getAge, minAge).lt(null != maxAge, User::getAge, maxAge);
    for (User user : userDao.selectList(lambdaQueryWrapper)) {
        log.info("年龄大于{}小于{}的人==>{}", minAge, maxAge, user);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值