SpringBoot3与MyBatis-Plus

news/2025/2/9 8:19:54 标签: mybatis, java, tomcat

4.1 介绍

MyBatis-Plus(简称 MP)是一个基于 MyBatis 的增强工具,提供通用 CRUD 操作、代码生成器、条件构造器、分页插件等功能,简化开发流程,提升效率。

4.2 特点

  • 无侵入:只做增强不做修改,与 MyBatis 完全兼容。

  • CRUD 简化:内置通用 Mapper 和 Service,减少 SQL 编写。

  • 代码生成器:自动生成 Entity、Mapper、Service、Controller 代码。

  • 条件构造器:通过 QueryWrapperLambdaQueryWrapper 动态构建查询条件。

  • 分页插件:支持物理分页,自动优化 COUNT 语句。

4.3 如何使用

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

application.yml 配置文件中添加 H2 数据库的相关配置:

# DataSource Config
spring:
  datasource:
    driver-class-name: org.h2.Driver
    username: root
    password: 123456
  sql:
    init:
      schema-locations: classpath:db/schema-h2.sql
      data-locations: classpath:db/data-h2.sql

在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹:

@SpringBootApplication
@MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper")
public class Application {
​
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
​
}

编码

编写实体类 User.java

@Data
@TableName("`user`")
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

编写 Mapper 接口类 UserMapper.java

public interface UserMapper extends BaseMapper<User> {
​
}

5. mp-增加

// 插入单条记录
User user = new User();
user.setName("张三");
user.setAge(25);
userMapper.insert(user);
​
// 批量插入
List<User> userList = Arrays.asList(new User("李四", 30), new User("王五", 28));
userMapper.insertBatchSomeColumn(userList);

6. mp-删除

  // 根据 ID 删除
userMapper.deleteById(1L);
​
// 根据条件删除(删除年龄大于 30 的用户)
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.gt("age", 30);
userMapper.delete(wrapper);

7. mp-修改

// 根据 ID 更新
User user = userMapper.selectById(2L);
user.setName("赵六");
userMapper.updateById(user);
​
// 条件更新(将年龄小于 20 的用户设为无效)
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.lt("age", 20).set("status", 0);
userMapper.update(null, wrapper);

8. mp-查询

8.1 根据主键查询---省略

User user = userMapper.selectById(1L);

8.2 根据各种条件查询

// 查询年龄在 20-30 之间的用户
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.between("age", 20, 30);
List<User> users = userMapper.selectList(wrapper);
​
// 使用 Lambda 表达式(查询名字包含 "张" 的用户)
LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.like(User::getName, "张");
List<User> users = userMapper.selectList(lambdaWrapper);

8.3 根据条件查询一条记录

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "刘德华");
User user = userMapper.selectOne(wrapper);

8.4 分页查询

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-jsqlparser</artifactId>
    <version>3.5.10.1</version> <!-- 确保版本和 MyBatis Plus 主包一致 -->
</dependency>
属性名类型默认值描述
overflowbooleanfalse溢出总页数后是否进行处理
maxLimitLong单页分页条数限制
dbTypeDbType数据库类型
dialectIDialect方言实现类

配置类

@Configuration
@MapperScan("scan.your.mapper.package")
public class MybatisPlusConfig {
​
    /**
     * 添加分页插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加
        // 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
        return interceptor;
    }
}

Page<User> page = new Page<>(1, 10); // 第 1 页,每页 10 条
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.orderByDesc("create_time");
IPage<User> userPage = userMapper.selectPage(page, wrapper);
​
System.out.println("总页数:" + userPage.getPages());
System.out.println("总记录数:" + userPage.getTotal());

8.5 联表查询也使用mp的分页。

 /**
     * 联表查询 使用mp的分页功能。
     */
    @Test
    public void testLianbiao(){
        // @Param("ew") Wrapper<T> queryWrapper
        Page<User>  page=new Page<>(1,3);
        QueryWrapper<User> wrapper=new QueryWrapper<>();
        wrapper.eq("name","刘德华");
        IPage<User> users=userMapper.selectUserWithDept(page,wrapper);
        System.out.println("总页码:"+page.getPages());
        System.out.println("总条数:"+page.getTotal());
        System.out.println("当前页记录:"+page.getRecords());
    }

​
  <resultMap id="baseMaper" type="com.ykq.entity.User" autoMapping="true">
    <id property="id" column="id"/>
    <association property="dept" javaType="com.ykq.entity.Dept" autoMapping="true">
        <id column="did" property="did"/>
    </association>
  </resultMap>
  <select id="selectUserWithDept" resultMap="baseMaper">
        select * from user u join tbl_dept d on u.did=d.did  where isdeleted=0
​
          <if test="ew!=null">
                and ${ew.sqlSegment}
          </if>
​
  </select>

注意事项

  1. 联表查询需自定义 SQL,MP 分页插件会自动处理分页逻辑。

  2. 使用 QueryWrapper 时,条件字段名需与数据库列名一致。

  3. 分页参数 Pagecurrentsize 需明确指定。


http://www.niftyadmin.cn/n/5845821.html

相关文章

ssti学习笔记(服务器端模板注入)

目录 一&#xff0c;ssti是什么 二&#xff0c;原理 所谓模板引擎&#xff08;三列&#xff0c;可滑动查看&#xff09; 三&#xff0c;漏洞复现 1&#xff0c;如何判断其所属的模板引擎&#xff1f; 2&#xff0c;判断清楚后开始注入 &#xff08;1&#xff09;Jinja2&a…

MySQL第五次作业

根据图片内容完成作业 1.建表 &#xff08;1&#xff09;建立两个表:goods(商品表)、orders(订单表) mysql> create table goods( -> gid char(8) primary key, -> name varchar(10), -> price decimal(8,2), -> num int); mysql> create t…

Oracle Database Free版本的各项许可限制

Oracle Database Free版本的各项许可限制&#xff1a; 限制类型描述具体限制可能的错误信息CPU限制Oracle Database Free自动限制最多使用两个CPU核心进行处理最多2个CPU核心无特定错误信息&#xff0c;但性能受限安装和运行时限制每个逻辑环境中只能安装一次Oracle Database …

瑞芯微 Rockchip 系列 RK3588 主流深度学习框架模型转成 rknn 模型教程

前言 在瑞芯微 Rockchip 芯片上进行 NPU 推理&#xff0c;需要先将模型文件转换成 rknn 模型文件&#xff0c;才能执行各种推理任务。本文将介绍如何安装各种工具&#xff0c;并最终实现将各种深度学习框架的模型文件转换成 rknn 文件。 本教程不仅适合 RK3588 平台&#xff…

WebStorm设置Vue Component模板

下载vue.js插件 下面有模板样例 Composition API&#xff1a;这是 Vue 3 的一项新特性&#xff0c;允许通过 setup 函数来组织组件逻辑。Options API&#xff1a;这是 Vue 2 和 Vue 3 都支持的传统方式&#xff0c;通过定义组件的 data、methods、computed 等来组织逻辑。 Comp…

PM2 与 Docker 结合使用:Node.js 应用的高效管理与部署

在现代 Web 开发中&#xff0c;Node.js 应用的部署和管理至关重要。为了确保应用的高可用性和性能&#xff0c;开发者常常采用 PM2&#xff08;进程管理工具&#xff09;和 Docker&#xff08;容器化平台&#xff09;的结合方案。本文将详细介绍 PM2 的功能、Docker 的优势&…

IDEA编写SpringBoot项目时使用Lombok报错“找不到符号”的原因和解决

目录 概述|背景 报错解析 解决方法 IDEA配置解决 Pom配置插件解决 概述|背景 报错发生背景&#xff1a;在SpringBoot项目中引入Lombok依赖并使用后出现"找不到符号"的问题。 本文讨论在上述背景下发生的报错原因和解决办法&#xff0c;如果仅为了解决BUG不论原…

LIMO:少即是多的推理

25年2月来自上海交大、SII 和 GAIR 的论文“LIMO: Less is More for Reasoning”。 一个挑战是在大语言模型&#xff08;LLM&#xff09;中的复杂推理。虽然传统观点认为复杂的推理任务需要大量的训练数据&#xff08;通常超过 100,000 个示例&#xff09;&#xff0c;但本文展…