SpringBoot整合MybatisPlus基本的增删改查,保姆级教程

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: SpringBoot整合MybatisPlus基本的增删改查,保姆级教程

概述

MybatisPlus是国产的第三方插件, 它封装了许多常用的CURDapi,免去了我们写mapper.xml的重复劳动,这里介绍了基本的整合SpringBoot和基础用法。

引入依赖

在项目中pom文件引入mybatisplusmysql驱动依赖,如下图

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.1</version>
    </dependency>
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>8.0.26</version>
     </dependency>

配置连接信息

在项目中application.yaml文件中配置数据库的连接信息

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/didiadmin?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
    username: root
    password: 123456

新建两个表

本案例通过一个完整的业务流程来介绍如何使用mybatispuls,首先在数据库中新建两个表,一个是字典类型表sys_dict_type和一个字典数据表sys_dict_data

CREATE TABLE `sys_dict_type` (
    `id` CHAR (19) CHARACTER
    SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标识',
    `type_name` VARCHAR (255) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典类型名称',
 `type_code` VARCHAR (255) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典类型标识',
 `description` VARCHAR (255) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典类型描述',
 `enable` CHAR (1) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '是否启用',
 `create_by` CHAR (19) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人ID',
  `create_name` CHAR (19) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人名称',
 `create_time` datetime DEFAULT NULL COMMENT '创建时间',
 `update_by` CHAR (19) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人ID',
 `update_name` CHAR (19) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人名称',
 `update_time` datetime DEFAULT NULL COMMENT '修改时间',
 `remark` VARCHAR (255) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
 PRIMARY KEY (`id`) USING BTREE
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC

CREATE TABLE `sys_dict_data` (
    `data_id` CHAR (19) CHARACTER
    SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标识',
    `data_label` CHAR (19) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典标签',
 `data_value` CHAR (20) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典值',
 `type_code` CHAR (20) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '所属类型',
 `is_default` CHAR (1) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '是否默认',
 `update_by` CHAR (19) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人ID',
   `update_name` CHAR (19) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人名称',
 `update_time` datetime DEFAULT NULL COMMENT '修改时间',
 `create_by` VARCHAR (255) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人ID',
   `create_name` CHAR (19) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人名称',
 `create_time` datetime DEFAULT NULL COMMENT '创建时间',
 `remark` VARCHAR (255) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
 `enable` CHAR (1) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '是否启用',
 PRIMARY KEY (`data_id`) USING BTREE
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC

在项目中创建相应的实体类

通过观察SQL语句发现两个表中有很多相同的字段,所有我们把相同的字段抽离出来,放到一个基础的实体类中,其他实体类通过集成方式获取公共的字段。

创建基础实体类

package com.didiplus.common.base;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
* Author: didiplus
* Email: 972479352@qq.com
* CreateTime: 2022/4/29
* Desc: 基 础 实 体 类
*/

@Data
public class BaseDomain implements Serializable {
   
   

    /**
    * 创建时间
    */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
    * 创建人
    */
    @TableField(value = "create_by", fill = FieldFill.INSERT)
    private String createBy;

    /**
    * 创建人名称
    */
    @TableField(value = "create_name", fill = FieldFill.INSERT)
    private String createName;

    /**
    * 修改时间
    */
    @TableField(value = "update_time", fill = FieldFill.UPDATE)
    private LocalDateTime updateTime;

    /**
    * 修改人
    */
    @TableField(value = "update_by", fill = FieldFill.UPDATE)
    private String updateBy;

    /**
    * 修改人名称
    */
    @TableField(value = "update_name", fill = FieldFill.UPDATE)
    private String updateName;


    /**
    * 备注
    */
    private String remark;
}

@TableField 是mybatisplus中的一个注解,后面会讲解到的。

基础实体类创建好了,接着我们把剩下的两个实体类也一同创建吧。

SysDictType实体类

package com.didiplus.modules.sys.domain;

import com.didiplus.common.base.BaseDomain;
import com.didiplus.common.base.ValidGroup;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.*;

/**
 * Author: didiplus
 * Email: 972479352@qq.com
 * CreateTime: 2022/4/25
 * Desc: 字典类型领域模型
 */

@Data
@ApiModel(value = "字典类型")
public class SysDictType extends BaseDomain {
   
   

    /**
     * 标识
     */
    @Null(groups = ValidGroup.Crud.Create.class)
    @NotNull(groups = ValidGroup.Crud.Update.class,message = "字典ID不能为空")
    @ApiModelProperty("ID")
    private String id;

    /**
     * 字典名称
     */
    @NotBlank(message = "字典名称必填项")
    @ApiModelProperty(value = "字典名称",example = "用户ID")
    private String typeName;
    /**
     * 字典类型
     */
    @NotBlank(message = "字典编码不能为空")
    @ApiModelProperty(value = "字典编码")
    private String typeCode;
    /**
     * 字典描述
     */
    @ApiModelProperty(value = "字典描述")
    private String description;
    /**
     * 字典可用状态
     */
    @NotBlank(message = "字典状态不能为空")
    @ApiModelProperty(value = "字典状态")
    private Boolean enable;
}

SysDictData实体类

package com.didiplus.modules.sys.domain;

import com.baomidou.mybatisplus.annotation.TableField;
import com.didiplus.common.base.BaseDomain;
import com.didiplus.common.base.ValidGroup;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;

/**
 * Author: didiplus
 * Email: 972479352@qq.com
 * CreateTime: 2022/4/29
 * Desc: 字典值领域模型
 */

@Data
public class SysDictData extends BaseDomain {
   
   
    /**
     * id 编号
     */
    @Null(groups = ValidGroup.Crud.Create.class)
    @NotNull(groups = ValidGroup.Crud.Update.class,message = "字典数据ID不能为空")
    @ApiModelProperty("ID")
    @TableField(value = "data_id")
    private String dataId;
    /**
     * 字典显示
     */
    @NotBlank(message = "字典数据名称必填项")
    @ApiModelProperty(value = "字典数据名称")
    private String dataLabel;
    /**
     * 字典值
     */
    @NotBlank(message = "字典数据值不能为空")
    @ApiModelProperty(value = "字典数据值")
    private String dataValue;
    /**
     * 字典类型
     */
    @ApiModelProperty(value = "字典编码")
    @NotBlank(message = "字典数据值不能为空")
    private String typeCode;
    /**
     * 是否为默认
     */
    @ApiModelProperty(value = "字典编码")
    @NotBlank(message = "字典数据值不能为空")
    private String isDefault;

    /**
     * 是否启用
     */
    @NotBlank(message = "字典状态不能为空")
    @ApiModelProperty(value = "字典数据状态")
    private Boolean enable;
}

创建DAO继承MybatisPlus增强接口

为两个实体类中分别添加DAO继承MybatisPlus增强接口,这样就可以集成了增删改查的功能了。

SysDictTypeMapper

package com.didiplus.modules.sys.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.didiplus.modules.sys.domain.SysDictType;
import org.apache.ibatis.annotations.Mapper;

/**
 * Author: didiplus
 * Email: 972479352@qq.com
 * CreateTime: 2022/4/29
 * Desc: 字典类型接口
 */
@Mapper
public interface SysDictTypeMapper extends BaseMapper<SysDictType> {
   
   
}

SysDictDataMapper

package com.didiplus.modules.sys.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.didiplus.modules.sys.domain.SysDictData;
import org.apache.ibatis.annotations.Mapper;

/**
 * Author: didiplus
 * Email: 972479352@qq.com
 * CreateTime: 2022/4/29
 * Desc: 字典数据接口
 */

@Mapper
public interface SysDictDataMapper extends BaseMapper<SysDictData> {
   
   
}

进一步封装到Service层

定义Service接口中的抽象方法

SysDictDataService

package com.didiplus.modules.sys.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.didiplus.modules.sys.domain.SysDictData;

/**
 * Author: didiplus
 * Email: 972479352@qq.com
 * CreateTime: 2022/4/29
 * Desc:
 */

public interface SysDictDataService extends IService<SysDictData> {
   
   
}

SysDictTypeService

package com.didiplus.modules.sys.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.didiplus.modules.sys.domain.SysDictType;

/**
 * Author: didiplus
 * Email: 972479352@qq.com
 * CreateTime: 2022/4/29
 * Desc:
 */
public interface SysDictTypeService extends IService<SysDictType> {
   
   
}

实现Service接口中的方法

SysDictTypeServiceImpl

package com.didiplus.modules.sys.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.didiplus.modules.sys.domain.SysDictType;
import com.didiplus.modules.sys.mapper.SysDictTypeMapper;
import com.didiplus.modules.sys.service.SysDictTypeService;
import org.springframework.stereotype.Service;

/**
 * Author: didiplus
 * Email: 972479352@qq.com
 * CreateTime: 2022/4/29
 * Desc:
 */
@Service
public class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeMapper, SysDictType> implements SysDictTypeService {
   
   
}

SysDictDataServiceImpl

package com.didiplus.modules.sys.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.didiplus.modules.sys.domain.SysDictType;
import com.didiplus.modules.sys.mapper.SysDictTypeMapper;
import com.didiplus.modules.sys.service.SysDictTypeService;
import org.springframework.stereotype.Service;

/**
 * Author: didiplus
 * Email: 972479352@qq.com
 * CreateTime: 2022/4/29
 * Desc:
 */
@Service
public class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeMapper, SysDictType> implements SysDictTypeService {
   
   
}

在控制层上进行增删改查操作

SysDictTypeController

package com.didiplus.modules.sys.controller;

import com.didiplus.common.base.ValidGroup;
import com.didiplus.modules.sys.domain.SysDictType;
import com.didiplus.modules.sys.service.SysDictTypeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;


/**
 * Author: didiplus
 * Email: 972479352@qq.com
 * CreateTime: 2022/4/25
 * Desc: 数据字典控制器
 */
@RestController
@Api(tags = "数据字典")
@RequestMapping("/api/sys/dictType")
public class SysDictTypeController {
   
   

    @Autowired
    SysDictTypeService sysDictTypeService;

    @ApiOperation("字典添加")
    @PostMapping("/add")
    public String add(@Validated(value = ValidGroup.Crud.Create.class) @RequestBody SysDictType sysDictType) {
   
   
        return  sysDictTypeService.save(sysDictType)? "添加成功":"添加失败";
    }

    @ApiOperation("字典修改")
    @PutMapping("/edit")
    public String edit(@Validated(value = ValidGroup.Crud.Update.class) @RequestBody SysDictType sysDictType) {
   
   
        return  sysDictTypeService.updateById(sysDictType)? "修改成功":"修改失败";
    }


    @ApiOperation("字典删除")
    @DeleteMapping("/del/{id}")
    public  String del( @PathVariable String id) {
   
   
        return  sysDictTypeService.removeById(id)? "删除成功":"删除失败";
    }


}

体验效果

新增数据


修改数据

image.png
image.png

删除数据

自动填充功能

原理:

  • 实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
  • 注解填充字段 @TableField(.. fill = FieldFill.INSERT)生成器策略部分也可以配置!

    自定义实现类 DomainInterceptor

    ```java
    package com.didiplus.common.web.interceptor;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**

  • Author: didiplus
  • Email: 972479352@qq.com
  • CreateTime: 2022/5/4
  • Desc: 字 段 填 充 拦 截 器
    */
    @Component
    public class DomainInterceptor implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {

     createField(metaObject);
    

    }

    @Override
    public void updateFill(MetaObject metaObject) {

     updateField(metaObject);
    

    }

    /**

    • @Field 创建时间
    • */
      public void createField(MetaObject metaObject){
      this.strictInsertFill(metaObject,"createTime", LocalDateTime.class,LocalDateTime.now());
      }

      /**

    • @Field 修改时间
    • */
      public void updateField(MetaObject metaObject) {
      this.strictUpdateFill(metaObject,"updateTime",LocalDateTime.class,LocalDateTime.now());
      }
      }
      ```

      分页查询

      添加分页插件

      ```java
      package com.didiplus.common.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**

  • Author: didiplus
  • Email: 972479352@qq.com
  • CreateTime: 2022/5/4
  • Desc: mybatis-plus分页插件
    */
    @Configuration
    public class MyBatisPlusConfig {

    /**

    • mybatis-plus分页插件
      */
      @Bean
      public MybatisPlusInterceptor mybatisPlusInterceptor() {
      MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
      interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
      return interceptor;
      }
      }
      ```

      定义分页接口

      ```java
      package com.didiplus.modules.sys.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.didiplus.common.web.domain.PageDomain;
import com.didiplus.modules.sys.domain.SysDictType;

/**

  • Author: didiplus
  • Email: 972479352@qq.com
  • CreateTime: 2022/4/29
  • Desc: 数据字典类型服务类
    */
    public interface SysDictTypeService extends IService {

    IPage page(PageDomain pageDomain);
    }
    ```

    实现分页接口

    ```java
    package com.didiplus.modules.sys.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.didiplus.common.web.domain.PageDomain;
import com.didiplus.modules.sys.domain.SysDictType;
import com.didiplus.modules.sys.mapper.SysDictTypeMapper;
import com.didiplus.modules.sys.service.SysDictTypeService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**

  • Author: didiplus
  • Email: 972479352@qq.com
  • CreateTime: 2022/4/29
  • Desc:
    */
    @Service
    public class SysDictTypeServiceImpl extends ServiceImpl implements SysDictTypeService {
    @Resource
    SysDictTypeMapper sysDictTypeMapper;
    @Override
    public IPage page(PageDomain pageDomain) {

     IPage<SysDictType> page = new Page<>(pageDomain.getPage(),pageDomain.getLimit());
     return sysDictTypeMapper.selectPage(page,null);
    

    }
    }

    ## 控制层调用
    ```java
    @RestController
    @Api(tags = "数据字典")
    @RequestMapping("/api/sys/dictType")
    public class SysDictTypeController {
    
     @Autowired
     SysDictTypeService sysDictTypeService;
    
     @ApiOperation("字典分页查询")
     @GetMapping
     public IPage list(@RequestBody PageDomain pageDomain){
         return sysDictTypeService.page(pageDomain);
     }
    }
    

    PageDomain定义了分页接收的两个参数

PageDomain类

package com.didiplus.common.web.domain;

import lombok.Data;

/**
 * Author: didiplus
 * Email: 972479352@qq.com
 * CreateTime: 2022/5/4
 * Desc: 分 页 参 数 封 装
 */
@Data
public class PageDomain {
   
   
    /**
     * 当前页
     */
    private  Integer page;
    /**
     * 每页数量
     */
    private  Integer limit;

}

体验效果


下一篇,我们继续来学习mybatisPlus的代码生成器

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
Cloud Native Java C++
Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)
文章介绍如何在Spring Boot 3中利用GraalVM将Java应用程序编译成独立的本机二进制文件,从而提高启动速度、减少内存占用,并实现不依赖JVM运行。
346 1
Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)
|
3月前
|
前端开发 Java 数据安全/隐私保护
用户登录前后端开发(一个简单完整的小项目)——SpringBoot与session验证(带前后端源码)全方位全流程超详细教程
文章通过一个简单的SpringBoot项目,详细介绍了前后端如何实现用户登录功能,包括前端登录页面的创建、后端登录逻辑的处理、使用session验证用户身份以及获取已登录用户信息的方法。
494 2
用户登录前后端开发(一个简单完整的小项目)——SpringBoot与session验证(带前后端源码)全方位全流程超详细教程
|
2月前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
2月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
2月前
|
SQL 存储 数据库
深入理解@TableField注解的使用-MybatisPlus教程
`@TableField`注解在MyBatis-Plus中是一个非常灵活和强大的工具,能够帮助开发者精细控制实体类与数据库表字段之间的映射关系。通过合理使用 `@TableField`注解,可以实现字段名称映射、自动填充、条件查询以及自定义类型处理等高级功能。这些功能在实际开发中,可以显著提高代码的可读性和维护性。如果需要进一步优化和管理你的MyBatis-Plus应用程
199 3
|
3月前
|
Java API Apache
Springboot+shiro,完整教程,带你学会shiro
这篇文章提供了一个完整的Apache Shiro与Spring Boot结合使用的教程,包括Shiro的配置、使用以及在非Web和Web环境中进行身份验证和授权的示例。
120 2
Springboot+shiro,完整教程,带你学会shiro
|
3月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
634 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
3月前
|
缓存 NoSQL Java
springboot的缓存和redis缓存,入门级别教程
本文介绍了Spring Boot中的缓存机制,包括使用默认的JVM缓存和集成Redis缓存,以及如何配置和使用缓存来提高应用程序性能。
133 1
springboot的缓存和redis缓存,入门级别教程
|
3月前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
206 1
|
3月前
|
数据采集 监控 Java
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
本文是关于SpringBoot日志的详细教程,涵盖日志的定义、用途、SLF4J框架的使用、日志级别、持久化、文件分割及格式配置等内容。
234 0
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......