亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

MyBatisPlus是國產(chǎn)的第三方插件, 它封裝了許多常用的CURDapi,免去了我們寫mApper.xml的重復(fù)勞動,這里介紹了基本的整合SpringBoot和基礎(chǔ)用法。

2|0引入依賴

在項目中pom文件引入mybatisplus和MySQL驅(qū)動依賴,如下圖

    <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>

3|0配置連接信息

在項目中application.yaml文件中配置數(shù)據(jù)庫的連接信息

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

4|0新建兩個表

本案例通過一個完整的業(yè)務(wù)流程來介紹如何使用mybatispuls,首先在數(shù)據(jù)庫中新建兩個表,一個是字典類型表sys_dict_type和一個字典數(shù)據(jù)表sys_dict_data

CREATE TABLE `sys_dict_type` (
`id` CHAR (19) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '標(biāo)識',
`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 '字典類型標(biāo)識',
 `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 '創(chuàng)建人ID',
  `create_name` CHAR (19) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '創(chuàng)建人名稱',
 `create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建時間',
 `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 '標(biāo)識',
`data_label` CHAR (19) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典標(biāo)簽',
 `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 '是否默認(rèn)',
 `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 '創(chuàng)建人ID',
   `create_name` CHAR (19) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '創(chuàng)建人名稱',
 `create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建時間',
 `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

5|0在項目中創(chuàng)建相應(yīng)的實體類

通過觀察SQL語句發(fā)現(xiàn)兩個表中有很多相同的字段,所有我們把相同的字段抽離出來,放到一個基礎(chǔ)的實體類中,其他實體類通過集成方式獲取公共的字段。

5|1創(chuàng)建基礎(chǔ)實體類

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: [email protected]
* CreateTime: 2022/4/29
* Desc: 基 礎(chǔ) 實 體 類
*/

@Data
public class BaseDomain implements Serializable {
    
    /**
    * 創(chuàng)建時間
    */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    
    /**
    * 創(chuàng)建人
    */
    @TableField(value = "create_by", fill = FieldFill.INSERT)
    private String createBy;
    
    /**
    * 創(chuàng)建人名稱
    */
    @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中的一個注解,后面會講解到的。

基礎(chǔ)實體類創(chuàng)建好了,接著我們把剩下的兩個實體類也一同創(chuàng)建吧。

5|2SysDictType實體類

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: [email protected]
 * CreateTime: 2022/4/25
 * Desc: 字典類型領(lǐng)域模型
 */

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

    /**
     * 標(biāo)識
     */
    @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;
    /**
     * 字典可用狀態(tài)
     */
    @NotBlank(message = "字典狀態(tài)不能為空")
    @ApiModelProperty(value = "字典狀態(tài)")
    private Boolean enable;
}

5|3SysDictData實體類

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: [email protected]
 * CreateTime: 2022/4/29
 * Desc: 字典值領(lǐng)域模型
 */

@Data
public class SysDictData extends BaseDomain {
    /**
     * id 編號
     */
    @Null(groups = ValidGroup.Crud.Create.class)
    @NotNull(groups = ValidGroup.Crud.Update.class,message = "字典數(shù)據(jù)ID不能為空")
    @ApiModelProperty("ID")
    @TableField(value = "data_id")
    private String dataId;
    /**
     * 字典顯示
     */
    @NotBlank(message = "字典數(shù)據(jù)名稱必填項")
    @ApiModelProperty(value = "字典數(shù)據(jù)名稱")
    private String dataLabel;
    /**
     * 字典值
     */
    @NotBlank(message = "字典數(shù)據(jù)值不能為空")
    @ApiModelProperty(value = "字典數(shù)據(jù)值")
    private String dataValue;
    /**
     * 字典類型
     */
    @ApiModelProperty(value = "字典編碼")
    @NotBlank(message = "字典數(shù)據(jù)值不能為空")
    private String typeCode;
    /**
     * 是否為默認(rèn)
     */
    @ApiModelProperty(value = "字典編碼")
    @NotBlank(message = "字典數(shù)據(jù)值不能為空")
    private String isDefault;

    /**
     * 是否啟用
     */
    @NotBlank(message = "字典狀態(tài)不能為空")
    @ApiModelProperty(value = "字典數(shù)據(jù)狀態(tài)")
    private Boolean enable;
}

6|0創(chuàng)建DAO繼承MybatisPlus增強(qiáng)接口

為兩個實體類中分別添加DAO繼承MybatisPlus增強(qiáng)接口,這樣就可以集成了增刪改查的功能了。

6|1SysDictTypeMapper

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: [email protected]
 * CreateTime: 2022/4/29
 * Desc: 字典類型接口
 */
@Mapper
public interface SysDictTypeMapper extends BaseMapper<SysDictType> {
}

6|2SysDictDataMapper

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: [email protected]
 * CreateTime: 2022/4/29
 * Desc: 字典數(shù)據(jù)接口
 */

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

7|0進(jìn)一步封裝到Service層

7|1定義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: [email protected]
 * 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: [email protected]
 * CreateTime: 2022/4/29
 * Desc:
 */
public interface SysDictTypeService extends IService<SysDictType> {
}

7|2實現(xiàn)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: [email protected]
 * 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: [email protected]
 * CreateTime: 2022/4/29
 * Desc:
 */
@Service
public class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeMapper, SysDictType> implements SysDictTypeService {
}

8|0在控制層上進(jìn)行增刪改查操作

8|1SysDictTypeController

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: [email protected]
 * CreateTime: 2022/4/25
 * Desc: 數(shù)據(jù)字典控制器
 */
@RestController
@Api(tags = "數(shù)據(jù)字典")
@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)? "刪除成功":"刪除失敗";
    }


}

體驗效果

新增數(shù)據(jù)

SpringBoot整合MybatisPlus基本的增刪改查,保姆級教程

 


SpringBoot整合MybatisPlus基本的增刪改查,保姆級教程

 

修改數(shù)據(jù)

SpringBoot整合MybatisPlus基本的增刪改查,保姆級教程

 


SpringBoot整合MybatisPlus基本的增刪改查,保姆級教程

 

刪除數(shù)據(jù)

SpringBoot整合MybatisPlus基本的增刪改查,保姆級教程

 

9|0自動填充功能

原理:

  • 實現(xiàn)元對象處理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
  • 注解填充字段 @TableField(.. fill = FieldFill.INSERT)生成器策略部分也可以配置!

9|1自定義實現(xiàn)類 DomainInterceptor

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: [email protected]
 * 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 創(chuàng)建時間
     * */
    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());
    }
}

10|0分頁查詢

10|1添加分頁插件

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: [email protected]
 * 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;
    }
}

10|2定義分頁接口

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: [email protected]
 * CreateTime: 2022/4/29
 * Desc: 數(shù)據(jù)字典類型服務(wù)類
 */
public interface SysDictTypeService extends IService<SysDictType> {

    IPage<SysDictType> page(PageDomain pageDomain);
}

10|3實現(xiàn)分頁接口

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: [email protected]
 * CreateTime: 2022/4/29
 * Desc:
 */
@Service
public class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeMapper, SysDictType> implements SysDictTypeService {
    @Resource
    SysDictTypeMapper sysDictTypeMapper;
    @Override
    public IPage<SysDictType> page(PageDomain pageDomain) {
        IPage<SysDictType> page = new Page<>(pageDomain.getPage(),pageDomain.getLimit());
        return sysDictTypeMapper.selectPage(page,null);
    }
}

10|4控制層調(diào)用

@RestController
@Api(tags = "數(shù)據(jù)字典")
@RequestMapping("/api/sys/dictType")
public class SysDictTypeController {

    @Autowired
    SysDictTypeService sysDictTypeService;

    @ApiOperation("字典分頁查詢")
    @GetMapping
    public IPage list(@RequestBody PageDomain pageDomain){
        return sysDictTypeService.page(pageDomain);
    }
}

PageDomain定義了分頁接收的兩個參數(shù)

PageDomain類

package com.didiplus.common.web.domain;

import lombok.Data;

/**
 * Author: didiplus
 * Email: [email protected]
 * CreateTime: 2022/5/4
 * Desc: 分 頁 參 數(shù) 封 裝
 */
@Data
public class PageDomain {
    /**
     * 當(dāng)前頁
     */
    private  Integer page;
    /**
     * 每頁數(shù)量
     */
    private  Integer limit;

}

10|5體驗效果

SpringBoot整合MybatisPlus基本的增刪改查,保姆級教程

 

分享到:
標(biāo)簽:SpringBoot
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定