首页 > 其他分享 >Spring Boot整合MyBatis-Plus

Spring Boot整合MyBatis-Plus

时间:2024-08-25 14:51:50浏览次数:14  
标签:Spring Plus MyBatis import cjq com orders

MyBatis Plus(简称MP)是一个在MyBatis基础上进行增强的工具,它保留了MyBatis的所有特性,并通过提供额外的功能和简化操作来提高开发效率。以下是对MyBatis Plus的详细介绍:

一、基本概述

  • 定义:MyBatis Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,旨在简化开发、提高效率。
  • 官网https://mybatis.plus/ 或 Redirect

二、主要特性

  1. 简化CRUD操作
    • MyBatis Plus提供了通用的Mapper接口和Service接口,简化了常见的CRUD(增删改查)操作。
    • 无需编写XML文件和手动编写SQL语句,只需继承通用Mapper接口或Service接口,即可使用常见的CRUD方法。
  2. 代码自动生成
    • MyBatis Plus内置了代码生成器,可以根据数据库表自动生成实体类、Mapper接口和XML文件,大大减少了手动编写代码的工作量。
  3. 分页查询
    • 提供了分页插件,可以在查询数据时直接指定分页参数,方便进行分页查询。
  4. 条件构造器
    • 提供了条件构造器,可以通过链式调用的方式生成查询条件,使得查询条件更加清晰易读。
  5. 乐观锁支持
    • 提供了乐观锁的支持,可以在更新数据时进行版本校验,避免数据冲突问题。
  6. 自动填充
    • 提供了自动填充功能,可以在插入或更新数据时自动填充某些字段,如创建时间和更新时间等。
  7. 多租户支持
    • 提供了多租户的支持,可以在查询数据时自动根据租户ID添加过滤条件,实现多租户数据隔离。
  8. 其他特性
    • 支持Lambda形式调用,通过Lambda表达式方便地编写各类查询条件。
    • 支持主键自动生成,提供了多达4种主键策略(内含分布式唯一ID生成器)。
    • 支持ActiveRecord模式,实体类只需继承Model类即可进行强大的CRUD操作。
    • 提供了性能分析插件,可输出SQL语句及其执行时间,帮助开发者优化查询。

三、架构与原理

  • 核心组件:MyBatis Plus的核心组件包括mybatis-plus-boot-starter(Spring Boot场景启动器)、注解(用于更高效地完成持久层开发)、extension(提供分页、逻辑删除、自动填充等扩展功能)、generator(代码生成器)以及core(核心功能)。
  • 运行原理:MyBatis Plus通过自动扫描实体,将数据库表中的列名和表名通过反射机制自动生成对应的代码,包括持久层的CRUD操作。

四、与MyBatis的区别

  • 语法简化:MyBatis Plus通过使用注解和API简化了MyBatis的配置和操作,减少了开发者的编码量。
  • 自动代码生成:MyBatis Plus提供了代码生成器,而MyBatis需要手动编写所有代码。
  • 分页插件:MyBatis Plus内置了分页插件,而MyBatis需要手动实现分页逻辑。
  • 条件查询:MyBatis Plus提供了强大的条件查询功能,而MyBatis则需要编写复杂的SQL语句来实现。

五、核心注解

1. @TableName

用途:用于指定实体类对应的数据库表名。

作用:告诉MyBatis Plus在进行SQL操作时应该使用哪个表。

详细说明:当实体类名与数据库表名不一致时,可以使用@TableName注解来指定实体类对应的数据库表名。这样,MyBatis Plus在执行SQL操作时就会使用指定的表名。

例如

package com.cjq.orders.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.math.BigDecimal;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString

@TableName("t_orders")
public class Orders {
    /**
     * 主键ID
      */
    @TableId(type = IdType.AUTO)
    private Integer ordersId;
    /**
     * 订单名字
      */
    private String ordersName;
    /**
     * 订单数量
      */
    private Integer ordersNum;
    /**
     * 订单价格
      */
    private BigDecimal ordersPrice;
    /**
     * 订单状态 1已支付 2未支付
      */
    private Integer ordersStatus;

}

在这个示例中,Orders类将映射到数据库中的t_orders表。

2. @TableId

用途:用于标识主键字段,并指定主键生成策略。

详细说明:@TableId注解不仅可以指定实体类中的哪个字段是主键,还可以指定主键的生成策略。MyBatis Plus提供了多种主键生成策略,如自增(IdType.AUTO)、手动输入(IdType.INPUT)、分布式全局唯一ID(IdType.ASSIGN_ID)等。

常用属性

  • value:指定主键字段名(默认值就是属性名)。
  • type:指定主键生成策略,如IdType.AUTO(自动增长)、IdType.INPUT(手动输入)、IdType.ASSIGN_ID(分配ID,默认使用雪花算法)等。

在这个示例中,id字段被标识为主键,并且采用自动增长的方式生成主键值。

3. @TableField

用途:用于标识实体类中的字段与数据库表中的字段的映射关系。

详细说明:@TableField注解可以指定字段名、是否为数据库字段、自定义字段填充策略等。当实体类中的字段名与数据库表中的字段名不一致时,可以使用@TableField注解的value属性来指定数据库表中的字段名。此外,@TableField还可以用于指定字段的填充策略,如插入时填充、更新时填充等。

常用属性

  • value:指定数据库表中的字段名(默认值就是属性名)。
  • exist:用于指明该字段是否是数据库表中的字段,默认为true
  • fill:用于指定字段填充策略,如FieldFill.INSERT(插入时填充)、FieldFill.UPDATE(更新时填充)等。
    @TableField(value = "user_name", exist = true, fill = FieldFill.INSERT)  
    private String userName;

    在这个示例中,userName字段映射到数据库表中的user_name字段,且在插入数据时由自定义的填充策略进行填充。

六、控制层(Controller)

package com.cjq.orders.controller;

import com.cjq.orders.domain.Orders;
import com.cjq.orders.service.OrdersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class OrdersController {
    @Autowired
    private OrdersService ordersService;

    @GetMapping("/ordersList")
    public List<Orders> ordersList(){
        List<Orders> ordersList = ordersService.list();
        return ordersList;
    }
}

七、业务层(Service)

1. IService<T>和ServiceIMpl<M extends BaseMapper<T>,T> 是对BaseMapper的进一步封装,一般很少用,但是很方便。

package com.cjq.orders.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.cjq.orders.domain.Orders;

public interface OrdersService extends IService<Orders> {
    
}
package com.cjq.orders.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cjq.orders.domain.Orders;
import com.cjq.orders.mapper.OrdersMapper;
import com.cjq.orders.service.OrdersService;

import org.springframework.stereotype.Service;

@Service
public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders> implements OrdersService {

}

八、持久层(Mapper)

1. BaseMapper<T>是mybatis-plus设计的一个接口,里面包含了单表的CRUD,用起来非常方便。

<T>表示实体类

package com.cjq.orders.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cjq.orders.domain.Orders;
import org.springframework.stereotype.Repository;

@Repository
public interface OrdersMapper extends BaseMapper<Orders> {

}

九、启动类

package com.cjq.orders;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
@MapperScan(basePackages = "com.cjq.orders.mapper")
public class OrdersApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrdersApplication.class,args);
    }
}

十、application.yml配置文件

注意:直接顶头粘贴

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  #日志
    map-underscore-to-camel-case: true  #开启驼峰命名

十一、结果详情

标签:Spring,Plus,MyBatis,import,cjq,com,orders
From: https://blog.csdn.net/C1226786216/article/details/141528781

相关文章

  • MyBatis源码(6)拦截器
    1、目标本文的主要目标是学习MyBatis拦截器的源码,本文将以插入操作为例debug拦截器相关的源码2、拦截器源码分析调用mapper接口的insert插入记录方法,会调用SqlSession对象的insert方法SqlSession执行insert方法Spring容器会创建SqlSessionTemplate对象,为了实现插入操......
  • 使用DropZone+SpringBoot实现图片的上传和浏览
    经常在项目中需要使用上传文件功能,找了不少前端上传组件,都不是很好用,今天尝试了一下DropZone,发现不错,顺便记录一下使用过程,方便后续查阅。在做开发的时候,经常需要调研一些技术,因此前后端都需要用到,为方便开发,这里采用传统的开发方式,没有做前后端分离,方便调试。前端采用HTML+......
  • springboot事件监听
     一、定义事件 packagecom.base.common.event;importcom.base.common.core.domain.entity.SysUser;importorg.springframework.context.ApplicationEvent;publicclassMyCustomEventextendsApplicationEvent{privateSysUseruser;publicMyCustomE......
  • Spring Boot 与 Spring Security 的集成及 OAuth2 实现
      我的主页:2的n次方_   在现代Web应用开发中,安全性是至关重要的。无论是保护用户的敏感数据,还是确保API只允许经过授权的请求访问,开发者都需要一个强大且灵活的安全框架来实现这些需求。SpringSecurity作为Spring框架的安全模块,能够为应用提供全面的安全保......
  • 基于SpringBoot的智慧党建系统+uniapp移动端+LW示例参考
    1.项目介绍技术栈+环境:SpringBoot+thymeleaf+uniapp+IDEA+Navicat+MySQL功能介绍:后端功能:首页管理(轮播图、通知公告、新闻管理)、用户管理(用户信息、用户反馈、用户订单、用户动态)、其他管理(题库管理、任务管理)移动端:学习模块、游戏学习模块、打卡签到、积分商城、问题咨......
  • 基于SpringBoot+Vue的宿舍管理系统
    郑重声明:项目经过本地测试,确保可以运行。项目仅供学习和毕业设计参考~1.项目介绍宿舍管理系统,是前后端分离项目。功能包括:权限管理,菜单管理,项目运行宿舍管理,学生管理,班级管理,宿舍楼管理,各项记录(归寝记录,维修记录,请假记录,晚归记录。环境配置:Jdk1.8+IDEA+Mysql5.7技术......
  • SpringBoot文档之开源软件依赖的阅读笔记
    DependencyVersions维护开源软件清单,并不是一个轻松、愉快的工作。很好奇SpringBoot的开发团队使用什么方式来管理、维护依赖清单,完成兼容性验证工作等。ManagedDependencyCoordinatesSpringBoot集成的开源软件的清单,以及版本号。VersionProperties比如使用${acti......
  • SpringBoot文档之配置参数的元数据的阅读笔记
    ConfigurationMetadata现代的IDE通过解析配置项的元数据信息,从而可以为开发者提供提示信息和补齐能力,提高维护配置文件的效率。SpringBoot支持的配置文件,比如application.properties或者application.yaml。对于一般的开发者而言,只需享受SpringBoot带来的便利。而对于组件的开......
  • SpringBoot文档之Jar文件格式的阅读笔记
    TheExecutableJarFormat使用spring-boot-maven-plugin构建项目时,生成的目标jar文件的格式的说明。NestedJARs以JarLauncher为例:META-INF/MANIFEST.MF,定义jar的元数据。org.springframework.boot.loader.launch.JarLauncher.class,jar的启动类。BOOT-INF/classes/,放......
  • JAVA毕业设计|(免费)springboot共享汽车管理系统包含文档代码讲解
    收藏点赞不迷路 关注作者有好处编号:springboot118springboot共享汽车管理系统开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis工具:IDEA/Ecilpse、Navicat、Maven1.系统展示2.万字文档展示第5章系统详细设计5.1管理员模块的实现5.1.1用户信息管理共享......