spring boot3整合mybatis-plus

这篇具有很好参考价值的文章主要介绍了spring boot3整合mybatis-plus。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 添加依赖
             <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.5.3.2</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.mybatis</groupId>
                        <artifactId>mybatis-spring</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <!--解决【Invalid value type for attribute 'factoryBeanObjectType': java.lang.String】-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>3.0.3</version>
            </dependency>
    
            <!--<dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.32</version>
            </dependency>-->
    
            <dependency>
                <groupId>com.mysql</groupId>
                <artifactId>mysql-connector-j</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
  2. 配置属性信息

    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: XXX
        password: XXX
        url: jdbc:mysql://localhost:3306/XXX?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&serverTimezone=Asia/Shanghai
    
    mybatis-plus:
      mapper-locations: classpath:/mapper/*.xml
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  3. 编写业务逻辑测试代码

    package org.coding.java.controller;
    
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import io.swagger.v3.oas.annotations.Operation;
    import io.swagger.v3.oas.annotations.tags.Tag;
    import jakarta.annotation.Resource;
    import org.coding.java.api.CommonResult;
    import org.coding.java.domain.user.UserDO;
    import org.coding.java.query.PageQueryVO;
    import org.coding.java.service.UserService;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.List;
    
    @Tag(name = "用户管理")
    @RestController
    @RequestMapping("api/v1/user")
    public class UserController {
        @Resource
        private UserService userService;
    
        @PostMapping("/saveUser")
        @Operation(summary = "新增用户")
        public CommonResult<Integer> saveUser(@RequestBody UserDO userDO) {
            return userService.saveUser(userDO);
        }
    
        @DeleteMapping("/deleteUser/{id}")
        @Operation(summary = "根据ID删除用户")
        public CommonResult<Integer> deleteUser(@PathVariable("id") Long id) {
            return userService.deleteUserById(id);
        }
    
        @GetMapping("/selectList")
        @Operation(summary = "查询用户信息")
        public CommonResult<List<UserDO>> selectList() {
            return userService.selectList();
        }
    
        @PostMapping("/selectPage")
        @Operation(summary = "分页查询用户信息")
        public CommonResult<IPage<UserDO>> selectPage(@RequestBody PageQueryVO queryVO) {
            return userService.selectPage(queryVO);
        }
    
        @PutMapping("/updateUser")
        @Operation(summary = "更新用户信息")
        public CommonResult<Integer> updateUser(@RequestBody UserDO userDO) {
            return userService.updateUser(userDO);
        }
    }
    
    package org.coding.java.service.impl;
    
    import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import jakarta.annotation.Resource;
    import org.coding.java.api.CommonResult;
    import org.coding.java.api.ResponseMessage;
    import org.coding.java.domain.user.UserDO;
    import org.coding.java.mapper.UserMapper;
    import org.coding.java.query.PageQueryVO;
    import org.coding.java.service.UserService;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    
    import java.util.Collections;
    import java.util.List;
    import java.util.Objects;
    
    @Service
    @Transactional
    public class UserServiceImpl implements UserService {
    
        @Resource
        private UserMapper userMapper;
    
        @Override
        public CommonResult<Integer> saveUser(UserDO userDO) {
            return CommonResult.ok(ResponseMessage.MessageCode.SAVE_SUCCESS.code(), ResponseMessage.MessageCode.SAVE_SUCCESS.message(), userMapper.insert(userDO));
        }
    
        @Override
        public CommonResult<Integer> deleteUserById(Long id) {
            int count = userMapper.deleteById(id);
            if (count > 0) {
                return CommonResult.ok(ResponseMessage.MessageCode.DELETE_SUCCESS.code(), ResponseMessage.MessageCode.DELETE_SUCCESS.message(), count);
            }
            return CommonResult.failed(ResponseMessage.MessageCode.DELETE_FAILED.code(), ResponseMessage.MessageCode.DELETE_FAILED.message(), count);
        }
    
        @Override
        public CommonResult<List<UserDO>> selectList() {
            if (getUserList().size() > 0) {
                return CommonResult.ok(ResponseMessage.MessageCode.SELECT_SUCCESS.code(), ResponseMessage.MessageCode.SELECT_SUCCESS.message(), getUserList());
            }
            return CommonResult.failed(ResponseMessage.MessageCode.SELECT_FAILED.code(), ResponseMessage.MessageCode.SELECT_FAILED.message(), Collections.emptyList());
        }
    
        @Override
        public CommonResult<IPage<UserDO>> selectPage(PageQueryVO queryVO) {
            IPage<UserDO> page = new Page<>(queryVO.getPageNo(), queryVO.getPageSize());
            IPage<UserDO> pageList = getUserPageList(queryVO, page);
            if (pageList.getRecords().size() > 0) {
                return CommonResult.ok(ResponseMessage.MessageCode.SELECT_SUCCESS.code(), ResponseMessage.MessageCode.SELECT_SUCCESS.message(), pageList);
            } else if (pageList.getRecords().size() == 0) {
                return CommonResult.failed(ResponseMessage.MessageCode.SELECT_NON_CONFORMANCE.code(), ResponseMessage.MessageCode.SELECT_NON_CONFORMANCE.message(), pageList);
            }
            return CommonResult.failed(ResponseMessage.MessageCode.SELECT_FAILED.code(), ResponseMessage.MessageCode.SELECT_FAILED.message(), pageList);
        }
    
        @Override
        public CommonResult<Integer> updateUser(UserDO userDO) {
            int update = userMapper.updateById(userDO);
            if (update > 0) {
                return CommonResult.ok(ResponseMessage.MessageCode.UPDATE_SUCCESS.code(), ResponseMessage.MessageCode.UPDATE_SUCCESS.message(), update);
            }
            return CommonResult.failed(ResponseMessage.MessageCode.UPDATE_FAILED.code(), ResponseMessage.MessageCode.UPDATE_FAILED.message(), update);
        }
    
        private IPage<UserDO> getUserPageList(PageQueryVO queryVO, IPage<UserDO> page) {
            LambdaQueryWrapper<UserDO> wrapper = new LambdaQueryWrapper<>();
            wrapper.like(Objects.nonNull(queryVO.getName()), UserDO::getName, queryVO.getName());
            wrapper.eq(Objects.nonNull(queryVO.getPhone()), UserDO::getPhone, queryVO.getPhone()).or();
            wrapper.eq(Objects.nonNull(queryVO.getEmail()), UserDO::getEmail, queryVO.getEmail());
            return userMapper.selectPage(page, wrapper);
        }
    
        private List<UserDO> getUserList() {
            QueryWrapper<UserDO> wrapper = new QueryWrapper<>();
            wrapper.select("id", "name", "age", "email", "sex", "phone");
            return userMapper.selectList(wrapper);
        }
    }
    
  4. 配置mybatis-plus分页插件

    package org.coding.java.config.mybatisplus;
    
    import com.baomidou.mybatisplus.annotation.DbType;
    import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
    import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
    import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    /**
     * @Description: mybatis常用配置
     */
    @Configuration
    @EnableTransactionManagement
    @MapperScan("org.coding.java.mapper")
    public class MybatisPlusConfig {
    
        /**
         * 实现分页配置
         * @return
         */
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor() {
            MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
            PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
            paginationInnerInterceptor.setDbType(DbType.MYSQL);
            interceptor.addInnerInterceptor(paginationInnerInterceptor);
            return interceptor;
        }
    
    }
    
  5. 配置mybatis-plus之属性自动填充

    package org.coding.java.config.mybatisplus;
    
    import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
    import org.apache.ibatis.reflection.MetaObject;
    import org.springframework.stereotype.Component;
    
    import java.time.LocalDateTime;
    
    /**
     * @Description: mybatis自动填充功能
     */
    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {
    
        @Override
        public void insertFill(MetaObject metaObject) {
            this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
            this.strictUpdateFill(metaObject, "updateTime",  LocalDateTime.class, LocalDateTime.now());
        }
    
        @Override
        public void updateFill(MetaObject metaObject) {
            this.strictUpdateFill(metaObject, "updateTime",  LocalDateTime.class, LocalDateTime.now());
        }
    }
    
    
  6. 如图所示mybatis-plus-spring-boot3-starter,spring boot,mybatis,后端mybatis-plus-spring-boot3-starter,spring boot,mybatis,后端

        二、SpringBoot3整合mybatis

1、添加依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.32</version>
        </dependency>

        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
            <version>4.3.0</version>
        </dependency>

        <dependency>
            <groupId>org.coding</groupId>
            <artifactId>boot-cmmon</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.13</version>
        </dependency>

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.6</version>
        </dependency>

        <!--解决【Invalid value type for attribute 'factoryBeanObjectType': java.lang.String】-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>3.0.3</version>
        </dependency>

2、配置属性

server:
  port: 18082

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: XXX
    password: XXX
    url: jdbc:mysql://localhost:3306/XXX?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&serverTimezone=Asia/Shanghai


mybatis:
  mapper-locations: classpath:/mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

pagehelper:
  helper-dialect: mysql # 指定数据库类型
  reasonable: true
  params: count=countSql
  support-methods-arguments: true

# springdoc-openapi项目配置
springdoc:
  swagger-ui:
    path: /swagger-ui.html
    tags-sorter: alpha
    operations-sorter: alpha
  api-docs:
    path: /v3/api-docs
  group-configs:
    - group: 'mybatis'
      paths-to-match: '/**'
      packages-to-scan: org.coding.java.controller

# knife4j的增强配置,不需要增强可以不配
knife4j:
  enable: true
  setting:
    language: zh_cn
logging:
  level:
    org.coding.java.mapper: debug

3、编写测试代码

package org.coding.java.service.impl;

import com.github.pagehelper.IPage;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import org.coding.java.api.CommonResult;
import org.coding.java.api.ResponseMessage;
import org.coding.java.domain.user.UserDO;
import org.coding.java.mapper.UserMapper;
import org.coding.java.query.QueryPageVO;
import org.coding.java.service.UserService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class UserServiceImpl implements UserService {

    @Resource
    private UserMapper userMapper;

    @Override
    public CommonResult<Integer> saveUser(UserDO userDO) {
        return CommonResult.ok(ResponseMessage.MessageCode.SAVE_SUCCESS.code(), ResponseMessage.MessageCode.SAVE_SUCCESS.message(), userMapper.saveUser(userDO));
    }

    @Override
    public CommonResult<List<UserDO>> selectList() {
        List<UserDO> list = userMapper.selectList();
        if (list.size() > 0) {
            return CommonResult.ok(ResponseMessage.MessageCode.SELECT_SUCCESS.code(), ResponseMessage.MessageCode.SELECT_SUCCESS.message(), list);
        }
        return CommonResult.ok(ResponseMessage.MessageCode.SELECT_FAILED.code(), ResponseMessage.MessageCode.SELECT_FAILED.message(), list);
    }

    @Override
    public CommonResult<Integer> deleteUserById(Long id) {
        Integer count = userMapper.deleteUserById(id);
        if (count > 0) {
            return CommonResult.ok(ResponseMessage.MessageCode.DELETE_SUCCESS.code(), ResponseMessage.MessageCode.DELETE_SUCCESS.message(), count);
        }
        return CommonResult.ok(ResponseMessage.MessageCode.DELETE_FAILED.code(), ResponseMessage.MessageCode.DELETE_FAILED.message(), count);
    }

    @Override
    public CommonResult<Integer> updateUser(UserDO userDO) {
        Integer count = userMapper.updateUser(userDO);
        if (count > 0) {
            return CommonResult.ok(ResponseMessage.MessageCode.UPDATE_SUCCESS.code(), ResponseMessage.MessageCode.UPDATE_SUCCESS.message(), count);
        }
        return CommonResult.ok(ResponseMessage.MessageCode.UPDATE_FAILED.code(), ResponseMessage.MessageCode.UPDATE_FAILED.message(), count);
    }

    @Override
    public CommonResult<PageInfo> selectPage(QueryPageVO pageVO) {
        PageHelper.startPage(pageVO.getPageNo(), pageVO.getPageSize());
        List<UserDO> list = userMapper.selectPage(pageVO);
        PageInfo<UserDO> pageInfo = new PageInfo<>(list);
        if (pageInfo.getTotal() > 0) {
            return CommonResult.ok(ResponseMessage.MessageCode.SELECT_SUCCESS.code(), ResponseMessage.MessageCode.SELECT_SUCCESS.message(), pageInfo);
        }
        return CommonResult.ok(ResponseMessage.MessageCode.SELECT_FAILED.code(), ResponseMessage.MessageCode.SELECT_FAILED.message(), pageInfo);
    }
}
package org.coding.java.controller;

import com.github.pagehelper.IPage;
import com.github.pagehelper.PageInfo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.coding.java.api.CommonResult;
import org.coding.java.domain.user.UserDO;
import org.coding.java.query.QueryPageVO;
import org.coding.java.service.UserService;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Tag(name = "用户管理")
@RestController
@RequestMapping("/api/v1/user")
public class UserController {

    @Resource
    private UserService userService;

    @PostMapping("/saveUser")
    @Operation(summary = "新增用户")
    public CommonResult<Integer> saveUser(@RequestBody UserDO userDO) {
        return userService.saveUser(userDO);
    }

    @GetMapping("/selectList")
    @Operation(summary = "查询用户【不分页】")
    public CommonResult<List<UserDO>> selectList() {
        return userService.selectList();
    }

    @PostMapping("/selectPage")
    @Operation(summary = "查询用户【分页】")
    public CommonResult<PageInfo> selectPage(@RequestBody QueryPageVO pageVO) {
        return userService.selectPage(pageVO);
    }

    @DeleteMapping("/deleteUserById/{id}")
    @Operation(summary = "删除用户【根据ID】")
    public CommonResult<Integer> deleteUserById(@PathVariable("id") Long id) {
        return userService.deleteUserById(id);
    }

    @PutMapping("/updateUser")
    @Operation(summary = "编辑用户【根据ID】")
    public CommonResult<Integer> updateUser(@RequestBody UserDO userDO) {
        return userService.updateUser(userDO);
    }

}

4、XML文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.coding.java.mapper.UserMapper">
    <insert id="saveUser" parameterType="org.coding.java.domain.user.UserDO">
        insert into user(name,age,phone,sex,email) value(#{name},#{age},#{phone},#{sex},#{email})
    </insert>

    <select id="selectList">
        select id, name, age, phone, sex, email from user;
    </select>

    <delete id="deleteUserById">
        delete from user where id = #{id}
    </delete>

    <update id="updateUser" parameterType="org.coding.java.domain.user.UserDO">
        update user
        <set>
            <if test="name != null and name != ''">
                name = #{name},
            </if>
            <if test="age != null and age != ''">
                age = #{age},
            </if>
            <if test="phone != null and phone != ''">
                phone = #{phone},
            </if>
            <if test="sex != null and sex != ''">
                sex = #{sex},
            </if>
            <if test="email != null and email != ''">
                email = #{email},
            </if>
            update_time = now()
        </set>
        where id = #{id}
    </update>

    <select id="selectPage">
        select id, name, age, phone, sex, email from user where
        <if test="item != null">
            <if test="item.name != null and item.name != '' ">
                name like '%' #{item.name} '%'
            </if>
            <if test="item.phone != null and item.phone != ''">
                and phone = #{item.phone}
            </if>
        </if>
        order by create_time desc
    </select>
</mapper>

5、测试数据是否能走通

mybatis-plus-spring-boot3-starter,spring boot,mybatis,后端

mybatis-plus-spring-boot3-starter,spring boot,mybatis,后端

mybatis-plus-spring-boot3-starter,spring boot,mybatis,后端文章来源地址https://www.toymoban.com/news/detail-838753.html

到了这里,关于spring boot3整合mybatis-plus的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot 整合 Mybatis

    导入依赖的时候,需要根据自己所使用的Spring Boot和MySQL的版本而定。 我这里使用的是MySQL数据库。 首先创建一个mybatis_learn的数据库。然后创建一个student的表。 对应的,要实现一个Java的实体类,来对应数据库的表。 创建如图结构的各个包和文件。 这个接口是对应Mybatis的

    2024年02月03日
    浏览(52)
  • Spring Boot整合MyBatis

    在开发中,通常会涉及到对数据库的数据进行操作,Spring Boot在简化项目开发以及实现自动化配置的基础上,对关系型数据库和非关系型数据库的访问操作都提供了非常好的整合支持。 Spring Boot默认采用整合SpringData的方式统一处理数据访问层,通过添加大量自动配置,引入各

    2024年02月06日
    浏览(51)
  • 【Spring Boot整合MyBatis教程】

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成

    2024年02月15日
    浏览(65)
  • Spring Boot 整合MyBatis(超详细)

    😀前言 本篇博文关于Spring Boot 整合MyBatis,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉 💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰 如果文章

    2024年02月11日
    浏览(44)
  • 在Spring Boot中整合MyBatis

    第1步:添加依赖: 在pom.xml文件中添加MyBatis和MySQL JDBC驱动的依赖。如果你使用的是Maven,配置如下: 第2步:配置数据源 DataSource: 在application.properties或application.yml文件中配置数据库连接信息: 第3步:(可选)配置MyBatis全局配置文件: 如果你需要自定义MyBatis的全局配置,

    2024年01月24日
    浏览(51)
  • Spring Boot整合MyBatis-Plus

    引言 在现代软件开发中,我们经常需要处理大量的数据。为了有效地管理这些数据,我们需要使用一些强大的框架。其中,Spring Boot和MyBatis-Plus是两个非常流行的框架。Spring Boot是一个基于Spring的开源Java框架,可以用于创建独立的、生产级别的Spring应用。MyBatis-Plus是一个MyB

    2024年01月19日
    浏览(57)
  • Spring Boot 整合MyBatis-Plus

    😀前言 本篇博文是关于Spring Boot 整合MyBatis-Plus的,希望你能够喜欢😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉 💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰

    2024年02月11日
    浏览(57)
  • Spring Boot整合Mybatis配置多数据源

    在之前的事件管理系统博客中有提到动态的多数据源配置 工作中难免需要做几个工具方便自己偷懒,加上之前的挡板,数据源肯定没法单一配置,所以需要多数据源配置。这里介绍两种配置:动态数据源和固定数据源模式。这两种我在目前的工作的工具开发中都有用到。 M

    2024年01月23日
    浏览(71)
  • Spring Boot3 系列:Spring Boot3 跨域配置 Cors

    CORS,全称是“跨源资源共享”(Cross-Origin Resource Sharing),是一种Web应用程序的安全机制,用于控制不同源的资源之间的交互。 在Web应用程序中,CORS定义了一种机制,通过该机制,浏览器能够限制哪些外部网页可以访问来自不同源的资源。源由协议、域名和端口组成。当一

    2024年01月19日
    浏览(60)
  • 【SpringBoot】Spring Boot 项目中整合 MyBatis 和 PageHelper

    目录 前言         步骤 1: 添加依赖 步骤 2: 配置数据源和 MyBatis 步骤 3: 配置 PageHelper 步骤 4: 使用 PageHelper 进行分页查询 IDEA指定端口启动 总结         Spring Boot 与 MyBatis 的整合是 Java 开发中常见的需求,特别是在使用分页插件如 PageHelper 时。PageHelper 是一个针对 MyBat

    2024年04月25日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包