我们相信:世界是美好的,你是我也是。 来玩一下解压小游戏吧!

刚刚宣布MyBatisJPA更好一些,因为它可以直观的写sql语句。就出现了一个MyBatis Plus,理由是它不用写大部分的sql语句。真心是“天道好轮回,苍天饶过谁”。本文写如何使用MyBatis Plus代替MyBatis

苏南大叔:SpringBoot开发,如何使用mybatisplus代替mybatis? - springboot-mybatisplus
SpringBoot开发,如何使用mybatisplus代替mybatis?(图4-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10openjdk@23.0.2IntelliJ IDEA 2024.3.4.1maven@3.3.2spring boot@2.5.4java@17mysql@5.7.26MyBatisPlus@3.4.3.4

前文回顾

因为本文的目的是使用mybatisplus代替mybatis。所以,这里先回顾一下springboot里面集成mybatis的文章步骤:

MyBatisPlus

MyBatis-Plus提供了许多开箱即用的功能,使得我们不需要手写大部分的SQL语句。它通过继承BaseMapper接口和使用 ServiceImpl类来实现常见的CRUD操作。

所以,它的特点是:不需要手写大部分sql语句。实现方式是:继承BaseMapper接口和ServiceImpl类。

pom.xml

这里新增MyBatisPlus的依赖,删除MyBatis的依赖。
pom.xml:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3.4</version>
</dependency>
XML

执行mvn install命令。

修改配置

src\main\resources\application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/boot
spring.datasource.username=root
spring.datasource.password=root
mybatis-plus.mapper-locations=classpath*:mappers/*.xml
logging.level.com.example.demo.mapper=DEBUG
logging.level.com.baomidou.mybatisplus=DEBUG
logging.level.jdbc.sqlonly=DEBUG
Ini

从这个配置文件上,也可以看到:虽然MyBatisPlus凸显的是少写sql,并不是不写sql。所以依然存在着配置:

mybatis-plus.mapper-locations=classpath*:mappers/*.xml
Ini

Entity文件

JPA/MyBatis里面的Entity文件差不多,仅有部分修改。
src\main\java\com\example\demo\entity\User.java

package com.example.demo.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import org.apache.ibatis.type.Alias;

@Alias("User")
public class User {
    @TableId(type = IdType.AUTO)
    private Integer id; // Ensure the ID field is Integer
    private String name;
    private String password;

    // Getters and Setters
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
Java

苏南大叔:SpringBoot开发,如何使用mybatisplus代替mybatis? - entity
SpringBoot开发,如何使用mybatisplus代替mybatis?(图4-2)

Mapper文件

MyBatis中,mapper文件可是个非常重要的文件。然而,到了MyBatisPlus里面,它的存在感一再拉低。

src\main\java\com\example\demo\mapper\UserMapper.java:

package com.example.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User> {
    // No additional methods needed, BaseMapper provides CRUD operations
}
Java

苏南大叔:SpringBoot开发,如何使用mybatisplus代替mybatis? - 最大的变数
SpringBoot开发,如何使用mybatisplus代替mybatis?(图4-3)

Service文件

整体上来说,和以前的版本差不多。但是它继承了MyBatisPlusServiceImpl
src\main\java\com\example\demo\service\UserService.java:

package com.example.demo.service;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.mapper.UserMapper;
import com.example.demo.entity.User;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService extends ServiceImpl<UserMapper, User> {

    public List<User> getAllUsers() {
        return list();
    }

    public User getUserById(Integer id) {
        if (id == null || id <= 0) {
            throw new IllegalArgumentException("ID不能为空且必须为正数");
        }
        return getById(id);
    }

    public User getUserByName(String name) {
        return lambdaQuery().eq(User::getName, name).one();
    }

    public User createUser(User user) {
        if (user == null || user.getName() == null || user.getName().trim().isEmpty() ||
            user.getPassword() == null || user.getPassword().trim().isEmpty()) {
            throw new IllegalArgumentException("用户名和密码不能为空");
        }
        if (lambdaQuery().eq(User::getName, user.getName()).count() > 0) {
            throw new RuntimeException("User with the same name already exists");
        }
        save(user);
        return user;
    }

    public User updateUser(Integer id, User user) {
        if (id == null || id <= 0 || user == null || user.getName() == null || user.getName().trim().isEmpty() ||
            user.getPassword() == null || user.getPassword().trim().isEmpty()) {
            throw new IllegalArgumentException("ID、用户名和密码不能为空且ID必须为正数");
        }
        User existingUser = getById(id);
        if (existingUser != null) {
            if (lambdaQuery().eq(User::getName, user.getName()).ne(User::getId, id).count() > 0) {
                throw new RuntimeException("User with the same name already exists");
            }
            existingUser.setName(user.getName());
            existingUser.setPassword(user.getPassword());
            updateById(existingUser);
            return existingUser;
        }
        return null;
    }

    public void deleteUser(Integer id) {
        if (id == null || id <= 0) {
            throw new IllegalArgumentException("ID不能为空且必须为正数");
        }
        if (count() <= 1) {
            throw new RuntimeException("Cannot delete the last user");
        }
        removeById(id);
    }
}
Java

苏南大叔:SpringBoot开发,如何使用mybatisplus代替mybatis? - service文件
SpringBoot开发,如何使用mybatisplus代替mybatis?(图4-4)

Controller文件

基本上没有变化,如果Service文件提供的方法有变化的话,这里才需要变化。

结语

基本上SpringBoot系列快速入门的文章,就这么多了。其它的就是碰到啥写啥了。jpamybatismybatisplus这三个组件来看,功用基本上差不多,使用方法略有区别。但是套路上来说也都差不多。所以,选择哪一个,并不是说是必须的。根据个人喜好或者项目需求来选择即可。

更多苏南大叔的java相关文章,请点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   java