MyBatis-Plus使用

16 篇文章 0 订阅

在这里插入图片描述

T04BF

👋专栏: 算法|JAVA|MySQL|C语言

🫵 今天你敲代码了吗


1. 引入MyBatis-Plus依赖、MySQL依赖以及配置数据库信息

对于SpringBoot2:

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.5.7</version>
</dependency>

对于SpringBoot3:

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
  <version>3.5.5</version>
</dependency>

MySQL的依赖:

<dependency>
  <groupId>com.mysql</groupId>
  <artifactId>mysql-connector-j</artifactId>
  <scope>runtime</scope>
</dependency>

配置文件配置:

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
    username: root
    password: '051215'
    driver-class-name: com.mysql.cj.jdbc.Driver

2.创建实体类、创建Mapper接口

实体类的属性与自己数据库表信息对应即可

package org.jwcb.demo.entity;

import lombok.Data;

import java.util.Date;


@Data
public class UserInfo {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private Integer gender;
    private String phone;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;
}

MyBatis-Plus提供了一个基础的Mapper接口BaseMapper,已经实现了基础的单表的CRUD
image.png
此时我们只需要自定义一个Mapper接口,实现这个BaseMapper即可实现简单的CRUD

@Mapper
public interface UserInfoMapper extends BaseMapper<UserInfo> {
}

3.简单使用

简单的CRUD操作:

@SpringBootTest
class UserInfoMapperTest {
    @Autowired
    private UserInfoMapper userInfoMapper;

    @Test
    void insert() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername("zhangsan");
        userInfo.setPassword("zhangsan");
        userInfo.setAge(18);
        userInfo.setGender(1);
        userInfo.setPhone("15812312312");
        userInfoMapper.insert(userInfo);
    }

    @Test
    void deleteById() {
        UserInfo userInfo = new UserInfo();
        userInfo.setId(-177197054);
        userInfoMapper.deleteById(userInfo.getId());
    }

    @Test
    void deleteByMap() {
        Map<String, Object> map = new HashMap<>();
        map.put("id", 980475906);
        map.put("username", "lisi");
        userInfoMapper.deleteByMap(map);
    }

    @Test
    void deleteBatchIds() {
        userInfoMapper.deleteBatchIds(List.of(917561347,980475906,980475906));
    }

    @Test
    void updateById() {
        UserInfo userInfo = new UserInfo();
        userInfo.setId(980475907);
        userInfo.setPhone("15912332122");
        userInfoMapper.updateById(userInfo);
    }


    @Test
    void selectById() {
        UserInfo userInfo = userInfoMapper.selectById(980475908);
        System.out.println(userInfo);
    }


    @Test
    void selectByBatchIds() {
        List<UserInfo> userInfos = userInfoMapper.selectBatchIds(List.of(980475909,980475907,980475908));
        System.out.println(userInfos);
    }

}

4. 复杂操作

条件构造器

MyBatis-Plus提供了一套强大的条件构造器(Wrapper),用于构造复杂的数据库查询条件.
以下是主要的Wrapper类及其功能:

  • AbstractWrapper:是一个抽象基类,提供了所有Wrapper类共有的方法和属性
  • QueryWrapper:用于构造查询条件,在AbstractWrapper的基础上拓展了select方法,允许查询指定字段
  • UpdateWrapper:用于构造更新条件,可以在更新数据时指定条件
  • LambdaQueryWrapper:基于Lambda表达式的查询条件构造器,通过Lambda表达式来引用实体类的属性,从而避免了硬编码字段名
  • LambdaUpdateWrapper:基于Lambda表达式的更新条件构造器,通过Lambda表达式来引用实体类的属性,从而避免了硬编码字段名

QueryWrapper

QueryWrapper不只是适用于查询条件,修改,删除,查询都可以使用QueryWrapper来构建查询条件

@Test
void selectByQueryWrapper() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("username", "sunqi").eq("phone", "15912332122");
    List<UserInfo> userInfos = userInfoMapper.selectList(queryWrapper);
    System.out.println(userInfos);
}

image.png

@Test
void updateByQueryWrapper() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
    queryWrapper.lt("age",30);
    UserInfo userInfo = new UserInfo();
    userInfo.setDeleteFlag(1);
    userInfoMapper.update(userInfo,queryWrapper);
}

image.png

  • lt: less than
  • le:less than or equal to
  • ge:greater than or equal to
  • gt:greater than
  • eq:equal
  • ne:not equal

UpdateWrapper

可以实现在不创建实体对象的情况下,直接设置更新字段和条件

@Test
void updateByUpdateWrapper() {
    UpdateWrapper<UserInfo> updateWrapper = new UpdateWrapper<>();
    updateWrapper.set("delete_flag",0).gt("age",20);
    userInfoMapper.update(updateWrapper);
}

image.png

LambdaQueryWrapper

QuerywrapperUpdateWrapper存在一个问题,就是字段名是写死的
MyBatis-Plus提供了一种基于Lambda表达式的条件构造器,通过Lambda表达式来引用实体的属性,避免了硬编码字段名

    @Test
    void selectByLambdaQueryWrapper() {
        QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().select(
                UserInfo::getId,UserInfo::getUsername, UserInfo::getAge, UserInfo::getPhone,
        UserInfo::getDeleteFlag,UserInfo::getCreateTime,UserInfo::getUpdateTime)
                .eq(UserInfo::getId, 980475908);
        System.out.println((userInfoMapper.selectList(queryWrapper)));
    }

image.png

自定义SQL

有时候,MyBatis-Plus提供的操作不能满足我们的实际需求,MyBatis-Plus也提供了自定义SQL的功能
可以利用Wrapper构造查询条件,再结合Mapper编写

@Mapper
public interface UserInfoMapper extends BaseMapper<UserInfo> {
    @Select("select id,username,age from user_info " +
            "${ew.customSqlSegment}")
    List<UserInfo> queryUserByCustom(@Param(Constants.WRAPPER) Wrapper<UserInfo> queryWrapper);

参数命名:在自定义sql时,传递Wrapper对象作为参数时,残水名必须为ew,或者使用注解@Param(Constants.WRAPPER)明确指定参数为Wrapper对象(注意:Constants来自com.baomidou.mybatisplus.core.toolkit.Constants包
使用${ew.customSqlSegment}:在SQL语句里面,使用${ew.customSqlSegment}来引用Wrapper对象产生的SQL片段


感谢您的访问!!期待您的关注!!!

在这里插入图片描述

T04BF

🫵 今天记得敲代码
  • 22
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值