SpringBoot【2】集成 MyBatis Plus

news/2024/12/23 8:02:12/

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: 1logic-not-delete-value: 0mapper-locations: classpath*:/mapper/*Mapper.xmltype-aliases-package: com.junjiu.springboot.druid.entity

完整配置如下:

# 端口
server:port: 5826spring:application:# 应用名称name: junjiu-springboot-druiddatasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://192.168.88.54:3306/ideadb?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&useSSL=falseusername: fid_ideapassword: 123456initial-size: 10max-active: 100min-idle: 10max-wait: 60000pool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000max-evictable-idle-time-millis: 600000validation-query: SELECT 1 FROM DUAL# validation-query-timeout: 5000test-on-borrow: falsetest-on-return: falsetest-while-idle: trueconnection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000#filters: #配置多个英文逗号分隔(统计,sql注入,log4j过滤)filters: stat,wallstat-view-servlet:enabled: trueurl-pattern: /druid/*# 监控页面配置.
jj:druid:monitor:login-username: rootlogin-password: 123456reset-enable: false# mybatis plus 配置
mybatis-plus:global-config:db-config:logic-delete-value: 1logic-not-delete-value: 0mapper-locations: classpath*:/mapper/*Mapper.xmltype-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 {@Autowiredprivate 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*/@Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "createdTime", LocalDateTime.class, LocalDateTime.now());this.strictInsertFill(metaObject, "updatedTime", LocalDateTime.class, LocalDateTime.now());}/*** 更新数据时,自动填充创建时间+修改时间 为当前时间。* @param metaObject*/@Overridepublic 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 {@Beanpublic PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor();}/***  自动填充功能* @return*/@Beanpublic GlobalConfig globalConfig() {GlobalConfig globalConfig = new GlobalConfig();globalConfig.setMetaObjectHandler(new AutoFillMetaObjectHandler());return globalConfig;}}

验证

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

http://www.ppmy.cn/news/1470765.html

相关文章

视频智能分析平台智能边缘分析一体机视频监控业务平台区域人数不足检测算法

智能边缘分析一体机区域人数不足检测算法是一种集成了先进图像处理、目标检测、跟踪和计数等功能的算法&#xff0c;专门用于实时监测和统计指定区域内的人数&#xff0c;并在人数不足时发出警报。以下是对该算法的详细介绍&#xff1a; 一、算法概述 智能边缘分析一体机区域…

【计算机毕业设计】​206校园顺路代送微信小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

React框架的来龙去脉,react的技术原理及技术难点和要点,小白的进阶之路

React 框架的来龙去脉&#xff1a;技术原理及技术难点和要点 1. React 的起源与发展 React 是由 Facebook 开发的一个用于构建用户界面的 JavaScript 库。它最初由 Jordan Walke 创建&#xff0c;并在 2013 年开源。React 的出现是为了解决在大型应用中管理复杂用户界面的问题…

PHP基础之错误与异常

文章目录 1 错误1.1 简介1.2 简单错误处理1.2.1 使用die1.2.2 die和exit区别 1.3 自定义错误处理1.3.1 定义1.3.2 创建错误函数 1.4 触发错误1.5 抑制错误1.5.1 行内错误抑制 2 异常2.1 引言2.2 什么是异常2.3 Try、throw、catch、finally2.4 自定义异常2.5 设置顶层异常处理器…

Python武器库开发-武器库篇之ThinkPHP 2.x 任意代码执行漏洞(六十三)

Python武器库开发-武器库篇之ThinkPHP 2.x 任意代码执行漏洞&#xff08;六十三&#xff09; PHP代码审计简介 PHP代码审计是指对PHP程序进行安全审计&#xff0c;以发现潜在的安全漏洞和风险。PHP是一种流行的服务器端脚本语言&#xff0c;广泛用于开发网站和Web应用程序。由…

Spring Cloud Bus——进阶配置与事件传播

Spring Cloud 常用组件&#xff08;下&#xff09;——Spring Cloud Bus 进阶配置与事件传播 在上篇文章中&#xff0c;我们介绍了 Spring Cloud Bus 的基本概念和配置方法。在这篇文章中&#xff0c;我们将进一步探讨 Spring Cloud Bus 的进阶配置和高级功能&#xff0c;包括…

互联网的盈利模式

1. 广告收入 展示广告&#xff1a;通过在网站或应用上展示横幅广告、视频广告等&#xff0c;按点击次数&#xff08;CPC&#xff09;或展示次数&#xff08;CPM&#xff09;收费。搜索广告&#xff1a;通过搜索引擎上的关键词竞价广告&#xff0c;按点击次数收费。社交媒体广告…

Ada判别式记录的效率问题

在Ada语言的判别式记录类型&#xff08;discriminated record type&#xff09;中&#xff0c;包含了被称为判别器&#xff08;discriminant&#xff09;的元件&#xff08;component&#xff09;&#xff0c;以及依赖判别器的记录分量&#xff08;component&#xff09;。 依…