简化开发小技巧-Mybatis-Plus的使用和常用操作

目录

简介

快速使用

pom

代码

mapper

service

使用

常用操作

简单或操作查询

多条件或查询

更新字段为null

方法一,如果要更新的字段是String类型,

方法二, 使用mybatis-plus的字段注入。

方法三,使用UpdateWrapper方式更新

实体类有数据库没有的字段

其他


简介

官网: MyBatis-Plus

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生

特性:

ps: 简单来说就是..简单, 不写sql的crud

快速使用

pom

            <!-- mysql驱动 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.38</version>
            </dependency>
            <!--Mybatis-Plus 注意版本-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.4.3</version>
            </dependency>

代码

mapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * 用户表
 *
 * @author gen
 * @since 2022-10-17 15:00:08
 */
public interface UserMapper extends BaseMapper<User> {

}

继承BaseMapper, 内置常用的crud功能, 到这里已经可以使用了

service

内也有crud等功能

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.demo.dao.User;

/**
 * @author admin
 * @version 1.0
 * @since 2023/01/05 17:03
 */
public interface UserService extends IService<User> {

}



import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.dao.User;
import com.example.demo.dao.UserMapper;

/**
 * @author admin
 * @version 1.0
 * @since 2023/01/05 16:05
 */
@Service("userService")
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

}

使用

常用操作

简单或操作查询

        LambdaQueryWrapper<DO> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.select(DO::getId);
        queryWrapper.isNotNull(DO::getName1).or().isNotNull(DO::getName2);
        service.list(queryWrapper);

        ==>  Preparing: SELECT id FROM user WHERE (name1 IS NOT NULL OR name2 IS NOT NULL)

多条件或查询

当有其他条件比如and时直接肯定是不能直接接在后面, 例:

        queryWrapper.eq(DO::getStatus, 1);
        ==>  Preparing: SELECT id FROM user WHERE (name1 IS NOT NULL OR name2 IS NOT NULL AND status = ?)

正确写法

        LambdaQueryWrapper<DO> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.select(DO::getId);
        queryWrapper.eq(DO::getStatus, 1);
        queryWrapper.and(wrapper -> wrapper.isNotNull(DO::getName1).or().isNotNull(DO::getName2));
        service.list(queryWrapper);
        
        ==>  Preparing: SELECT id FROM user WHERE (status = ? AND ( (name1 IS NOT NULL OR name2 IS NOT NULL) ))

更新字段为null

方法一,如果要更新的字段是String类型,

可以把前端传入的null改为空字符串(“”),这样mybati-plus就不会忽略更新该字段

方法二, 使用mybatis-plus的字段注入。

在可能为空的Model类字段上方加@TableField(fill = FieldFill.INSERT_UPDATE),问题解决。

/**
 * 介绍说明(非必填)
 */
@TableField(fill = FieldFill.UPDATE)
private String explanation;

方法三,使用UpdateWrapper方式更新

在mybatis-plus中,除了updateById方法,还提供了一个update方法,直接使用update方法也可以将字段设置为null,代码如下:

        LambdaUpdateWrapper<UserDO> updateWrapper = Wrappers.lambdaUpdate();
        updateWrapper.eq(UserDO::getId, 1L);
        updateWrapper.set(UserDO::getName1, null);
        updateWrapper.set(UserDO::getName2, null);
        userService.update(updateWrapper);

实体类有数据库没有的字段

@TableField(exist=false)
 private String remark;

其他

mybatis-plus 自带QueryWrapper自定义sql实现复杂查询_瑶山的博客-CSDN博客_querywrapper自定义sql

猜你喜欢

转载自blog.csdn.net/qq_44695727/article/details/127671038