SpringBoot【2】集成 MyBatis Plus

SpringBoot 集成 MyBatis Plus

  • 前言
  • 修改 pom.xml
  • 修改配置文件
  • 添加 实体类
  • 添加 持久层接口
  • 添加 持久层 XxxMapper.xml 文件
  • 添加 业务接口层
  • 添加 业务接口实现类
  • 添加 控制层
  • 添加 MyBatis 配置
    • AutoFillMetaObjectHandler
    • MyBatisPlusConfig
  • 验证

前言

由于 MySQL 备份/恢复测试,模拟应用数据实时写入数据库的场景。
现集成 MyBatis Plus 做于笔记。

当前项目是以《SpringBoot 集成 Druid》基础进行持续集成的。
持续集成 MyBatis Plus 完成之后的项目截图如下:
在这里插入图片描述

客户表数据参考《MySQL数据库-创建测试数据》,表结构如下:

	-- 1 -* 客户表
create table client(
   id bigint not null primary key auto_increment comment '自增ID',
   client_id bigint not null comment 'ID编号',
   user_no varchar(30) comment '账号',
   user_password varchar(60) comment '密码',
   nick_name varchar(30) comment '昵称',
   real_name varchar(30) comment '真实姓名',
   created_time datetime default now() comment '创建时间',
   upated_time datetime default now() comment '更新时间'
);


修改 pom.xml

在《SpringBoot 集成 Druid》章节中的 pom.xml文件已经将 MyBatis Plus 的依赖以配置完成。

<!-- mybatis-plus 依赖
  https://baomidou.com/getting-started/
  <mybatis.plus.boot.starter.version>3.3.1</mybatis.plus.boot.starter.version>
-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version> ${mybatis.plus.boot.starter.version} </version>
</dependency>

修改配置文件

application.yml 文件中,添加以下配置:

# mybatis plus 配置
mybatis-plus:
  global-config:
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0
  mapper-locations: classpath*:/mapper/*Mapper.xml
  type-aliases-package: com.junjiu.springboot.druid.entity

完整配置如下:

# 端口
server:
  port: 5826

spring:
  application:
    # 应用名称
    name: junjiu-springboot-druid
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://192.168.88.54:3306/ideadb?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&useSSL=false
      username: fid_idea
      password: 123456
      initial-size: 10
      max-active: 100
      min-idle: 10
      max-wait: 60000
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      max-evictable-idle-time-millis: 600000
      validation-query: SELECT 1 FROM DUAL
      # validation-query-timeout: 5000
      test-on-borrow: false
      test-on-return: false
      test-while-idle: true
      connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      #filters: #配置多个英文逗号分隔(统计,sql注入,log4j过滤)
      filters: stat,wall
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*

# 监控页面配置.
jj:
  druid:
    monitor:
      login-username: root
      login-password: 123456
      reset-enable: false

# mybatis plus 配置
mybatis-plus:
  global-config:
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0
  mapper-locations: classpath*:/mapper/*Mapper.xml
  type-aliases-package: com.junjiu.springboot.druid.entity

添加 实体类

package com.junjiu.springboot.druid.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * program: junjiu-springboot-druid
 * ClassName: ClientEntity
 * description:
 *
 * @author: 君九
 * @create: 2024-06-12 22:55
 * @version: 1.0
 **/
@Data
@TableName("client")
public class ClientEntity implements Serializable {

    /**
     * -- 1 -* 客户表
     * create table client(
     *    id bigint not null primary key auto_increment comment '自增ID',
     *    client_id bigint not null comment 'ID编号',
     *    user_no varchar(30) comment '账号',
     *    user_password varchar(60) comment '密码',
     *    nick_name varchar(30) comment '昵称',
     *    real_name varchar(30) comment '真实姓名',
     *    created_time datetime default now() comment '创建时间',
     *    upated_time datetime default now() comment '更新时间'
     * );
     */

    private Long id;
    private Long clientId;
    private String userNo;
    private String userPassword;
    private String nickName;
    private String realName;
    private Date createdTime;
    private Date updatedTime;

}

添加 持久层接口

package com.junjiu.springboot.druid.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.junjiu.springboot.druid.entity.ClientEntity;
import org.apache.ibatis.annotations.Mapper;

/**
 * program: junjiu-springboot-druid
 * ClassName: ClientMapper.xml
 * description:
 *
 * @author: 君九
 * @create: 2024-06-12 22:57
 * @version: 1.0
 **/
@Mapper
public interface ClientMapper extends BaseMapper<ClientEntity> {
}

添加 持久层 XxxMapper.xml 文件

此处文件名称定义为 ClientMapper.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="com.junjiu.springboot.druid.mapper.ClientMapper">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.junjiu.springboot.druid.entity.ClientEntity">
        <id column="id" property="id" />
        <result column="client_id" property="clientId" />
        <result column="user_no" property="userNo" />
        <result column="user_password" property="userPassword" />
        <result column="nick_name" property="nickName" />
        <result column="real_name" property="realName" />
        <result column="created_time" property="createdTime" />
        <result column="updated_time" property="updatedTime" />
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, client_id, user_no, user_password, nick_name, real_name, created_time, updated_time
    </sql>

</mapper>

添加 业务接口层

package com.junjiu.springboot.druid.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.junjiu.springboot.druid.entity.ClientEntity;

/**
 * program: junjiu-springboot-druid
 * ClassName: ClientService
 * description:
 *  客户端业务接口.
 *
 * @author: 君九
 * @create: 2024-06-12 22:57
 * @version: 1.0
 **/
public interface ClientService extends IService<ClientEntity> {
}

添加 业务接口实现类

package com.junjiu.springboot.druid.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junjiu.springboot.druid.entity.ClientEntity;
import com.junjiu.springboot.druid.mapper.ClientMapper;
import com.junjiu.springboot.druid.service.ClientService;
import org.springframework.stereotype.Service;

/**
 * program: junjiu-springboot-druid
 * ClassName: ClientServiceImpl
 * description:
 *  客户业务实现类.
 *
 * @author: 君九
 * @create: 2024-06-12 22:58
 * @version: 1.0
 **/
@Service
public class ClientServiceImpl extends ServiceImpl<ClientMapper, ClientEntity> implements ClientService {

}

添加 控制层

package com.junjiu.springboot.druid.controller;

import com.junjiu.springboot.druid.entity.ClientEntity;
import com.junjiu.springboot.druid.service.ClientService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * program: junjiu-springboot-druid
 * ClassName: ClientController
 * description:
 *
 * @author: 君九
 * @create: 2024-06-12 22:59
 * @version: 1.0
 **/
@RestController
@RequestMapping("/client")
public class ClientController {

    @Autowired
    private ClientService clientService;

    /**
     * 测试添加数据.
     * @return
     */
    @RequestMapping("/testAdd")
    public String testAdd() {

        ClientEntity clientEntity = new ClientEntity();
        clientEntity.setClientId(1001L);
        clientEntity.setNickName("九皇叔叔");
        clientEntity.setRealName("君九");
        clientEntity.setUserNo("JunJiu");
        clientEntity.setUserPassword("123456");

        clientService.save(clientEntity);

        return "Success.";
    }


}

添加 MyBatis 配置

说明:
当前配置主要两个方面:

  1. 分页配置:Table表格展示数据时的分页功能。
  2. 自动填充配置:添加|修改|逻辑删除 时需更新时间的功能。

AutoFillMetaObjectHandler

package com.junjiu.springboot.druid.config;

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

import java.time.LocalDateTime;

/**
 * program: junjiu-springboot-druid
 * ClassName: AutoFillMetaObjectHandler
 * description:
 *
 * @author: 君九
 * @create: 2024-06-12 22:52
 * @version: 1.0
 **/
@Component
public class AutoFillMetaObjectHandler  implements MetaObjectHandler {

    /**
     * 新增数据时,自动填充创建时间+修改时间 为当前时间。
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createdTime", LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, "updatedTime", LocalDateTime.class, LocalDateTime.now());
    }

    /**
     * 更新数据时,自动填充创建时间+修改时间 为当前时间。
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "updatedTime", LocalDateTime.class, LocalDateTime.now());
    }
}

MyBatisPlusConfig

package com.junjiu.springboot.druid.config;

import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * program: junjiu-springboot-druid
 * ClassName: MyBatisPlusConfig
 * description:
 *
 * @author: 君九
 * @create: 2024-06-12 22:49
 * @version: 1.0
 **/
@Configuration
public class MyBatisPlusConfig {


    @Bean
    public PaginationInterceptor paginationInterceptor() {

        return new PaginationInterceptor();
    }

    /**
     *  自动填充功能
     * @return
     */
    @Bean
    public GlobalConfig globalConfig() {
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setMetaObjectHandler(new AutoFillMetaObjectHandler());
        return globalConfig;
    }

}

验证

  1. 启动项目
  • 进入到如下类中,鼠标右键 Run 启动即可。
    在这里插入图片描述
  1. 在浏览器访问:http://localhost:5826/client/testAdd
    在这里插入图片描述
  2. 查询数据库
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/710271.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

哪里有海量的短视频素材,以及短视频制作教程?

在当下&#xff0c;短视频已成为最火爆的内容形式之一&#xff0c;尤其是在抖音上。但很多创作者都面临一个问题&#xff1a;视频素材从哪里来&#xff1f;怎么拍摄才能吸引更多观众&#xff1f;别担心&#xff0c;今天我将为大家推荐几个宝藏网站&#xff0c;确保你素材多到用…

CANoe连接Option Scope使用方法

系列文章目录 文章目录 系列文章目录前言一、前提条件二、CANoe配置三、PicoScope接线四、CANoe捕捉报文五、眼图功能前言 本文档主要介绍如何使用CANoe Option .Scope捕获CAN总线上的物理波形,并利用眼图进行分析。 一、前提条件 使用CANoe Option .Scope,需要具备以下条件…

时间复杂度与空间复杂度题目讲解

前言&#xff1a; 在前面我们了解到了时间复杂度与空间复杂度&#xff0c;这里我们就可以尝试一下做一些关于时间复杂度与空间复杂度的题目。 1. 数组篇 题目一&#xff1a;消失的数字 消失的数字&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 看…

基于python-CNN卷积网络训练识别牛油果和猕猴桃-含数据集+pyqt界面

代码下载地址&#xff1a; https://download.csdn.net/download/qq_34904125/89383066 本代码是基于python pytorch环境安装的。 下载本代码后&#xff0c;有个requirement.txt文本&#xff0c;里面介绍了如何安装环境&#xff0c;环境需要自行配置。 或可直接参考下面博文…

.net8 blazor auto模式很爽(四)改造vs自动创建的Blazor auto为前后端分离模式(3)

BlazorApp1的appsettings改为下面的内容,注意 "BaseAddress": "https://localhost:7228"这个商端口号要和Properties的launchSettings内容一致&#xff1a; {"BaseAddress": "https://localhost:7228","Logging": {"L…

花卉识别-python-pytorch-CNN深度学习含数据集+pyqt界面

代码下载地址&#xff1a; https://download.csdn.net/download/qq_34904125/89383063 本代码是基于python pytorch环境安装的。 下载本代码后&#xff0c;有个requirement.txt文本&#xff0c;里面介绍了如何安装环境&#xff0c;环境需要自行配置。 或可直接参考下面博文…

Matlab使用Simulink仿真实现AM和BPSK信号的解调

前言 本篇实现了基于AM和BPSK调制的通信系统&#xff0c;采用Bernoulli Binary Generator生成随机二元序列&#xff0c;码元速率为0.5秒/个。AM调制使用Sine Wave模块生成载波&#xff0c;频率40Hz&#xff0c;相位π/2。BPSK调制通过Switch模块切换相位0和π的载波。信号传输…

sap怎么批量给信息记录打上删除标识

1.MEMASSIN-----事务代码 2.选择完成字段 3.根据条件查询需要冻结的信息记录 4.输入查询条件 5.全部勾选完成标识&#xff0c;点击保存&#xff0c;即可冻结完成

Spark groupByKey和reduceByKey对比

在 Apache Spark 中&#xff0c;groupByKey 和 reduceByKey 都是用于对键值对 (key-value) 数据集进行分组和聚合的操作。然而&#xff0c;它们在性能和使用场景上有显著的差异。 groupByKey 函数 groupByKey 将数据集中的所有键相同的值进行分组&#xff0c;然后返回一个键值…

Radis初阶 Radis基本命令与在Springboot中访问Radis

阿里网盘链接 文章目录 初始NoSQL数据库对比MySQL数据库从结构方面&#xff1a;从关系方面&#xff1a;从查询方式&#xff1a;从事物方面&#xff1a; Redis入门Redis数据结构访问Radis通用命令&#xff08;tab键&#xff1a;自动补全&#xff09;KEYSDELEXISTSEXPIRETTL Str…

【TB作品】MSP430G2553,DS1302,LCD1602,时间读取和显示,万年历,Proteus仿真

效果 部分代码 #include <MSP430.h> #include "ds1302.h" #include "LCD.h"//关掉ccs优化&#xff0c;并且Convert_BCD_To_Dec函数中只能是10.0f才行&#xff0c;不然有bugvoid main(void) {char cnt 0;char disp[16];WDTCTL WDTPW WDTHOLD; /* …

基于51单片机的智能水表

一.硬件方案 本设计主要以51单片机作为主控处理器的智能水表&#xff0c;该水表能够记录总的用水量和单次用水量&#xff0c;当用水量超出设定值时系统发出声光报警提醒&#xff0c;水量报警值能够通过按键进行自行设置&#xff0c;并且存储于AT24C02中&#xff0c;并且可以测…

【Ardiuno】使用ESP32单片机网络功能调用API接口(图文)

接着上文连通wifi后&#xff0c;我们通过使用HTTPClient库进行网络相关操作&#xff0c;这里我们通过http协议进行接口调用。 为了简化操作&#xff0c;小飞鱼这里使用了本地服务器上的文件作为接口&#xff0c;正常操作时会调用接口后&#xff0c;将服务器返回的数据进行解析…

Vue32-挂载流程

一、init阶段 生命周期本质是函数。 1-1、beforeCreate函数 注意&#xff1a; 此时vue没有_data&#xff0c;即&#xff1a;data中的数据没有收到。 1-2、create函数 二、生成虚拟DOM阶段 注意&#xff1a; 因为没有template选项&#xff0c;所以&#xff0c;整个div root都…

stable diffusion最全插件大全,新手必备指南

Stable diffusion30个必备插件推荐&#xff0c;给我点个赞吧&#xff0c;兄弟们 1&#xff0c;ComfyUI&#xff0c;SD扩展里面直接搜索就行&#xff0c; ComfyUI 是一个基于节点操作的UI界面&#xff0c;玩过建模的更容易学 安装后大概是这样的 评价&#xff1a;comfyui,更适…

换卡槽=停机?新手机号使用指南!

刚办理的手机号莫名其妙的就被停用了&#xff1f;这到底是怎么回事&#xff1f;这篇文章快来学习一下吧。 ​ 先说一下&#xff0c;你的手机为什么被停机&#xff1f; 现在运营商对于手机卡的使用有着非常严格的要求&#xff0c;尤其是刚办理的新号码&#xff0c;更是“严上加…

神经网络学习1—nn.Module

nn.module 为所有神经网络提供了一个模板 import torch.nn as nn import torch.nn.functional as Fclass Model(nn.Module):def __init__(self):super(Model, self).__init__()self.conv1 nn.Conv2d(1, 20, 5)self.conv2 nn.Conv2d(20, 20, 5)def forward(self, x):x F.rel…

解决Echarts图表中tooltip无法换行问题

解决Echarts图表中tooltip无法换行问题 这里设置宽度、颜色都是是可以生效的&#xff0c;但就是不换行 解决办法tooltip. extraCssText extraCssText: max-width:300px; white-space:pre-wraptooltip: { // 单个柱子显示悬浮内容extraCssText: max-width:300px; white-space…

工业网关在智能制造中的具体应用和效果-天拓四方

随着工业4.0时代的到来&#xff0c;智能制造正逐渐成为工业领域的发展趋势。作为连接物理世界与数字世界的桥梁&#xff0c;工业网关在智能制造中发挥着至关重要的作用。本案例将详细阐述工业网关在某一制造企业中的具体应用&#xff0c;展示其如何助力企业实现数字化转型&…

【数据挖掘】机器学习中相似性度量方法-欧式距离

写在前面&#xff1a; 首先感谢兄弟们的订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…