SpringBoot【2】集成 MyBatis Plus

news2025/1/13 8:09:13

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. 查询数据库
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 算法:回文链表 c++

原题链接&#x1f517;&#xff1a;回文链表 难度&#xff1a;简单⭐️ 题目 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head…

如何用 Google Chrome 浏览器浏览经过 XSLT 渲染的 XML 文件

对于经过XSLT渲染的XML文件&#xff0c;本来&#xff0c;可以直接用 IE (Internet Explorer) 打开&#xff0c;就能看到渲染之后的样子&#xff0c;很方便。但是后来&#xff0c;微软把 IE 换成了 Microsoft Edge&#xff0c;按理说这是比 IE 更先进的浏览器&#xff0c;可是偏…

Swift 是 C++ 的最佳继任者

苹果称 Swift 是 C 的最佳继任者 Swift 是苹果公司在 2014 年推出的&#xff0c;一款旨在替代 Objective-C 的编程语言。但苹果语言和运行时总监 Ted Kremenek 在 WWDC24 的主题演讲中表示&#xff0c;Swift 也将取代 C。 “Swift 的安全性、速度和易用性&#xff0c;加上内…

期末复习6--链表头插法(逆序)尾插法(顺序)---输出链表

头插法 #include <stdio.h> #include <stdlib.h>struct Node //定义结构体 {char data; //数据域struct Node * next; //指针域 };/* 请在这里填写答案 */void PrintList (struct Node * head) {struct Node * s;if(head NULL){printf("None&qu…

Python基础教程(二十一):多线程

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

在ubuntu中启动docker的mysql8镜像

首先查看docker是否启动&#xff1a; docker ps #出现信息就是启动成功 启动命令&#xff1a; sudo systemctl start docker 设置开机自启&#xff1a; sudo systemctl enable docker 查询下载好的mysql8的镜像文件&#xff1a; docker images 在启动查询好的镜像文件&#…

StarNet实战:使用StarNet实现图像分类任务(一)

文章目录 摘要安装包安装timm 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集 摘要 https://arxiv.org/pdf/2403.19967 论文主要集中在介绍和分析一种新兴的学习范式——星操作&#xff08;Star Operation&#xff09;&#xff0c;这是一种通过元素级乘法融合不同子…

521. 最长特殊序列 Ⅰ(Rust单百解法-脑筋急转弯)

题目 给你两个字符串 a 和 b&#xff0c;请返回 这两个字符串中 最长的特殊序列 的长度。如果不存在&#xff0c;则返回 -1 。 「最长特殊序列」 定义如下&#xff1a;该序列为 某字符串独有的最长 子序列 &#xff08;即不能是其他字符串的子序列&#xff09; 。 字符串 s …

从传统到智能:数字孪生在火电厂中的应用

通过图扑 HT 可视化技术数字孪生正在运行的火力发电厂&#xff0c;搭建数字化运营平台&#xff0c;对发电厂进行工厂式精细化的数字化管理&#xff0c;提升企业对整个发电厂业务进行数字化管理能力。

安装wsl

安装wsl 先决条件&#xff1a; 打开控制面板->选择程序与功能->选择启动或关闭windows功能&#xff0c;将以下框选的勾选上 二、到Mircosoft store下载Ubuntu 三、如果以上都勾选了还报以下错误 注册表错误 0x8007019e Error code: Wsl/CallMsi/REGDB_E_CLASSNOTREG…

gma 2.0.10 (2024.06.16) | GmaGIS V0.0.0a4 更新日志

安装 gma 2.0.10 pip install gma2.0.10网盘下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1P0nmZUPMJaPEmYgixoL2QQ?pwd1pc8 提取码&#xff1a;1pc8 注意&#xff1a;此版本没有Linux版&#xff01; 编译gma的Linux虚拟机没有时间修复&#xff0c;本期Linux版…

QT信号与槽/窗口组件优化/使用QT制作QQ登录界面

使用手动连接&#xff0c;将登录框中的取消按钮使用第二中连接方式&#xff0c;右击转到槽&#xff0c;在该槽函数中&#xff0c;调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断u界面上输入的账号是否为"admin"&#xff0c;…

2024.6.14 作业 xyt

使用手动连接&#xff0c;将登录框中的取消按钮使用第二中连接方式&#xff0c;右击转到槽&#xff0c;在该槽函数中&#xff0c;调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c…

【面试干货】Integer 和 int 的区别

【面试干货】Integer 和 int 的区别 1、基本类型与包装类型2、内存占用3、自动装箱与拆箱4、null 值5、常量池6、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;Integer 和 int 是两种不同类型的变量&#xff0c;…

在k8s中部署Elasticsearch高可用集群详细教程

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《洞察之眼&#xff1a;ELK监控与可视化》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Elasticsearch简介 2、为什么在k8s中部署elasti…

【团队成长】2024-24周周报-第一次组会人员分工48期推文预告

大家好&#xff01;我们是IndustryOR 团队&#xff0c;致力于分享业界落地的算法技术。欢迎关注微信公众号/知乎/CSDN【运筹匠心】 。 记录人&#xff1a;张哲铭&#xff0c;算法专家&#xff0c;某互联网大厂 【团队成长/个人成长】系列的推文会以 【工作周报】 的方式记录Ind…

视频信号发生器上位机

在液晶屏测试、电视机信号测试、视频处理器测试中&#xff0c;经常需要使用视频信号发生器&#xff0c;市场上专业的视频信号发生器通常需要大几千元&#xff0c;多则上万元&#xff0c;而且设备测试仪器是一套硬件&#xff0c;没有办法像软件一样复制传播。所以我开发了一套基…

机器视觉:工业镜头的主要参数

工业镜头是图像采集系统的重要光学设备。它的作用是将目标物体的像成在相机的感光面上。 一、工业镜头原理 镜头是对光线进行调制和变换&#xff0c;使目标能够成像到相机的感光芯片上。将不同折射率的硝材加工成高精度的曲面&#xff0c;再把这些曲面进行组合后设计成能够满…

LogicFlow 学习笔记——2. LogicFlow 基础 实例

LogicFlow 实例 创建实例 每一个流程设计界面&#xff0c;就是一个 LogicFlow 的实例。 <template><div id"container"></div><!-- 用于显示 LogicFlow 图表的容器 --> </template> <script>// 创建 LogicFlow 实例const lf …

中文版svn怎么忽略文件

个人需求&#xff1a; 不上传dist&#xff0c;dist.7z&#xff0c;node_modules等文件夹 实际操作&#xff1a; 前言&#xff1a;在上传svn为避免操作失败导致丢失文件的情况&#xff0c;保险起见&#xff0c;先备份代码 1&#xff1a;右键点击 2&#xff1a;点击新建 – 其…