集成mybatis-plus框架

news2025/2/23 1:25:09

文章目录

    • 1.新建一个sun_frame数据库并创建user表
    • 2.新建一个sun-common-mybatisplus模块
        • 1.maven项目
        • 2.添加依赖
    • 3.sun-user集成mybatis-plus
        • 1.配置application.yml
        • 2.修改架构,由sun-user模块引入需要的公共模块
        • 3.代码目录结构
        • 4.mapper:po查,po封
          • 1.UserMapper.java(一会使用@MapperScan注解扫描)
          • 2.UserMapper.xml(这个xml放在了非resource目录下,就需要在父模块显示配置扫描,之前配过)
        • 5.service:dto查,vo封
          • 1.UserService.java
          • 2.UserServiceImpl.java 添加@Service注解
        • 6.controller:req查,vo封
          • UserController.java 添加@RestController注解
        • 7.entity
          • 1.UserReq.java
          • 2.UserDto.java
          • 3.UserPo.java
        • 8.将项目clean-package试一下
          • 1.报错找不到依赖
          • 2.这种情况就在父模块clean-install一下就好了
          • 3.如果java -jar 启动时报错sun-user-1.0-SNAPSHOT.jar中没有主清单属性,往往是没有打包插件
        • 9.apipost测试

1.新建一个sun_frame数据库并创建user表

# 创建数据库sun-frame
CREATE DATABASE sun_frame DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
use sun_frame;
# 创建user表
CREATE TABLE `user` (
                        `id` bigint NOT NULL AUTO_INCREMENT,
                        `name` varchar(16) COLLATE utf8mb4_general_ci DEFAULT NULL,
                        `age` int DEFAULT NULL,
                        `create_by` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL,
                        `create_time` timestamp NULL DEFAULT NULL,
                        `update_by` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL,
                        `update_time` timestamp NULL DEFAULT NULL,
                        `delete_flag` tinyint DEFAULT NULL,
                        `version` int DEFAULT NULL,
                        PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

2.新建一个sun-common-mybatisplus模块

1.maven项目

CleanShot 2024-07-09 at 15.33.47@2x

2.添加依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.sunxiansheng</groupId>
        <artifactId>sun-common</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>sun-common-mybatisplus</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- jdbc -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <!-- 父模块统一指定版本 -->
        </dependency>
        <!-- druid连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.21</version>
        </dependency>
        <!-- mysql连接 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <!-- 父模块统一指定版本 -->
        </dependency>
        <!-- mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.0</version>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>

3.sun-user集成mybatis-plus

1.配置application.yml
server:
  port: 8080
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 
    url: jdbc:mysql://bj--grp-1a6li...com:24169/?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
    type: com.alibaba.druid.pool.DruidDataSource # druid连接池
    druid:
      initial-size: 20 # 初始化连接数
      min-idle: 20 # 最小空闲连接数
      max-active: 100 # 最大连接数
      max-wait: 60000 # 获取连接的最大等待时间
2.修改架构,由sun-user模块引入需要的公共模块
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.sunxiansheng</groupId>
        <artifactId>sun-frame</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>sun-user</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- 引入common-web -->
        <dependency>
            <groupId>com.sunxiansheng</groupId>
            <artifactId>sun-common-web</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- 引入common-mybatisplus -->
        <dependency>
            <groupId>com.sunxiansheng</groupId>
            <artifactId>sun-common-mybatisplus</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>
3.代码目录结构

CleanShot 2024-07-09 at 17.35.20@2x

4.mapper:po查,po封
1.UserMapper.java(一会使用@MapperScan注解扫描)
package com.sunxiansheng.user.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sunxiansheng.user.entity.po.UserPo;
import org.springframework.stereotype.Repository;

/**
 * Description:
 * @Author sun
 * @Create 2024/7/9 15:59
 * @Version 1.0
 */
public interface UserMapper extends BaseMapper<UserPo> {
}
2.UserMapper.xml(这个xml放在了非resource目录下,就需要在父模块显示配置扫描,之前配过)
<?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.sunxiansheng.user.mapper.UserMapper">
</mapper>

CleanShot 2024-07-09 at 18.05.53@2x

5.service:dto查,vo封
1.UserService.java
package com.sunxiansheng.user.service;

import com.sunxiansheng.user.entity.dto.UserDto;

/**
 * Description: service:dto查,vo封
 * @Author sun
 * @Create 2024/7/9 16:41
 * @Version 1.0
 */
public interface UserService {

    int addUser(UserDto userDto);

}

2.UserServiceImpl.java 添加@Service注解
package com.sunxiansheng.user.service.impl;

import com.sunxiansheng.user.entity.dto.UserDto;
import com.sunxiansheng.user.entity.po.UserPo;
import com.sunxiansheng.user.mapper.UserMapper;
import com.sunxiansheng.user.service.UserService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * Description:
 * @Author sun
 * @Create 2024/7/9 16:45
 * @Version 1.0
 */
@Service
public class UserServiceImpl implements UserService {

    @Resource
    private UserMapper userMapper;

    @Override
    public int addUser(UserDto userDto) {
        // 封装数据
        UserPo userPo = new UserPo();
        BeanUtils.copyProperties(userDto, userPo);
        int insert = userMapper.insert(userPo);
        return insert;
    }

}
6.controller:req查,vo封
UserController.java 添加@RestController注解
package com.sunxiansheng.user.controller;

import com.sunxiansheng.user.entity.dto.UserDto;
import com.sunxiansheng.user.entity.req.UserReq;
import com.sunxiansheng.user.service.UserService;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * Description:
 * @Author sun
 * @Create 2024/7/8 17:55
 * @Version 1.0
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserService userService;

    @PostMapping
    public Integer addUser(@RequestBody UserReq userReq) {
        UserDto userDto = new UserDto();
        BeanUtils.copyProperties(userReq, userDto);
        int i = userService.addUser(userDto);
        return i;
    }
}
7.entity
1.UserReq.java
package com.sunxiansheng.user.entity.req;

import lombok.Data;

/**
 * Description:
 * @Author sun
 * @Create 2024/7/9 16:53
 * @Version 1.0
 */
@Data
public class UserReq {

    private String name;

    private Integer age;

}
2.UserDto.java
package com.sunxiansheng.user.entity.dto;

import lombok.Data;

/**
 * Description: 从数据库中查询数据
 * @Author sun
 * @Create 2024/7/9 16:01
 * @Version 1.0
 */
@Data
public class UserDto {

    private String name;

    private Integer age;

}
3.UserPo.java
package com.sunxiansheng.user.entity.po;

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

import java.util.Date;

/**
 * Description: 封装从数据库中查询的数据
 * @Author sun
 * @Create 2024/7/9 16:02
 * @Version 1.0
 */
@TableName("user") // 指定表名
@Data
public class UserPo {

    @TableId(value = "id", type = IdType.AUTO) // 指定主键
    private Long id;

    private String name;

    private Integer age;

    private String createBy;

    private Date createTime;

    private String updateBy;

    private Date updateTime;

    private Integer deleteFlag;

    private Integer version;

}
8.将项目clean-package试一下
1.报错找不到依赖

2.这种情况就在父模块clean-install一下就好了
3.如果java -jar 启动时报错sun-user-1.0-SNAPSHOT.jar中没有主清单属性,往往是没有打包插件
    <!-- maven打包常规配置 -->
    <build>
        <!--打包成jar包时的名字-->
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!-- 指定打包插件的版本,如果父模块指定了版本,那么就不需要自定义版本了 -->
                <version>2.3.0.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <!-- 将所有的包都打到这个模块中 -->
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
9.apipost测试

CleanShot 2024-07-09 at 18.24.51@2x

CleanShot 2024-07-09 at 18.25.05@2x

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

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

相关文章

SQLSugar进阶使用:高级查询与性能优化

文章目录 前言一、高级查询1.查所有2.查询总数3.按条件查询4.动态OR查询5.查前几条6.设置新表名7.分页查询8.排序 OrderBy9.联表查询10.动态表达式11.原生 Sql 操作 &#xff0c;Sql和存储过程 二、性能优化1.二级缓存2.批量操作3.异步操作4.分表组件&#xff0c;自动分表5.查询…

了解Redis数据持久化(上)

Redis常用作缓存&#xff0c;提高读取相应性能。Redis如果宕机可以从后端数据库里恢复数据&#xff0c;但是会出现的问题&#xff1a; 数据是从慢速数据库里获取数据&#xff0c;速度比不上从Redis缓存中获取。频繁访问数据库会给数据库造成压力。 处理宕机的方法就是&#xf…

Go 调用Rust函数

Go 调用Rust函数 在golang 中,go可以引用c代码&#xff0c;和c共舞&#xff0c;也就是cgo.在一些包里就能看到cgo的身影&#xff0c;gopcap(引用了libpcap),go-sqlite(引用了libsqlite).毕竟c是"万物之主"嘛.本文利用cgo实现go调rust函数 这是一个rust demo用于生成…

【Docker】Docker学习03 | Docker的volume

本文首发于 ❄️慕雪的寒舍 1. 引入 在docker的基本知识讲解中&#xff0c;提到了docker镜像是由一层一层文件系统构成的。这一系列文件系统是一系列的只读层。当我们创建一个容器的时候&#xff0c;Docker会读取镜像&#xff08;只读&#xff09;&#xff0c;并在镜像的顶部再…

SpringBoot集成google登陆快速入门Demo

1.为何要使用 Google 账号登录 借助“使用 Google 账号登录”功能&#xff0c;您可通过安全性备受信赖的 Google 账号&#xff0c;轻松快捷地在网上登录和注册网站与应用。该功能可消除您对密码的依赖&#xff0c;从而降低使用密码带来的困扰和安全风险。 2.环境准备 登录 G…

【IEEE出版】第八届电气、机械与计算机工程国际学术会议(ICEMCE 2024,10月25-27)

由西京学院主办&#xff0c;AEIC学术交流中心协办&#xff0c;中国科学技术大学、深圳大学、浙江工业大学等校联合支持的第八届电气、机械与计算机工程国际学术会议&#xff08;ICEMCE 2024&#xff09;将于2024年10月25日至27日在西安举办。 本次会议主要围绕“电气”、"…

【文档】软件项目售后服务标准文档参考(word原件)

软件售后服务方案的售后服务范围广泛&#xff0c;涵盖了多个方面&#xff0c;以确保客户在使用软件过程中得到全面、及时的支持。具体来说&#xff0c;这些服务范围通常包括以下几个核心内容&#xff1a; 技术支持服务维护与更新服务培训与教育服务定制化服务数据管理与服务客户…

[C语言]一、C语言基础(函数)

G:\Cpp\C语言精讲 6. 函数 6.1函数的基本使用 6.1.1 为什么需要函数 《街霸》游戏中&#xff0c;每次人物出拳、出脚或跳跃等动作都需要编写50-80行的代码&#xff0c;在每次出拳、出脚或跳跃的地方都需要重复地编写这50-80行代码&#xff0c;这样程序会变得很臃肿&#xff…

[学习笔记]深度学习详解-Datawhale学习组

第三章&#xff1a;深度学习基础 3.1 局部极小值与鞍点 3.1.1 临界点及其种类 优化神经网络时&#xff0c;使用梯度下降法&#xff0c;遇到梯度为0的点&#xff0c;训练就停了下来&#xff0c;损失也不再下降。 这个梯度为0的点&#xff0c;可以称为临界点。 临界点可以细分…

在挫折感中遇见更好的自己

你是如何克服编程学习中的挫折感的&#xff1f; 编程学习之路上&#xff0c;挫折感就像一道道难以逾越的高墙&#xff0c;让许多人望而却步。然而&#xff0c;真正的编程高手都曾在这条路上跌倒过、迷茫过&#xff0c;却最终找到了突破的方法。你是如何在Bug的迷宫中找到出口的…

ssrf+redisssrf+fastcgi

curl支持很多协议&#xff0c;有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDA ssrfredis dict被禁用了用&#xff08;?urlhttp://172.19.0.3端口&#xff09;来探测一下端口吧 172.19.0.3主机只开放一个80端口 看看内网还有其他服务器没 这里可以看到内网还有…

Ai+若依(代码生成 -- 树表“有层级关系的”):【03篇】

代码生成 代码生成器,根据数据库表结构自动生成前后端CRUD代码提供三种生成模板:单表、树表、主子表(一对多)现在来说说树表,主子表 树表: 例如:公司==》部门==》员工 层级关系的这种 主子表: 例如: 数据之间存在一对多,比如菜品和口味表 一个菜品可以多个口味 自动化…

图形几何算法 -- 判断两条线段是否相交

线段相交检测是计算几何中的一个基本问题&#xff0c;广泛应用于计算机图形学、游戏开发、物理模拟等领域。我们可以通过以下步骤和理论来判断两条线段是否相交。 概念 在二维平面上&#xff0c;给定两条线段 A(P1, P2) 和 B(Q1, Q2)&#xff0c;我们需要判断这两条线段是否相…

鸿蒙内核源码分析(双向链表) | 谁是内核最重要结构体?

答案一定是: LOS_DL_LIST(双向链表)&#xff0c;它长这样. typedef struct LOS_DL_LIST {//双向链表&#xff0c;内核最重要结构体struct LOS_DL_LIST *pstPrev; /**< Current nodes pointer to the previous node *///前驱节点(左手)struct LOS_DL_LIST *pstNext; /**<…

Linux-部署YUM仓库及NFS共享服务

系列文章目录 提示&#xff1a;仅用于个人学习&#xff0c;进行查漏补缺使用。 1.Linux-网络设置 2.Linux-DHCP服务、vsftp 3.Linux-DNS域名解析服务 4.Linux-远程访问及控制 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档…

【GIS系列】多源异构原始影像解析:策略模式与规则引擎的应用

作者&#xff1a;后端小肥肠 &#x1f347; 我写过的文章中的相关代码放到了gitee&#xff0c;地址&#xff1a;xfc-fdw-cloud: 公共解决方案 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 1. 前言 在遥感技术和地球观测领域&#…

机器学习周报(8.19-8.25

文章目录 摘要Abstract1.PyTorch环境的配置及安装使用PyCharm配置环境安装配置jupyter 2.两个Python常用函数3.DataSet4.TensorBoard的使用绘制一幅坐标图使用tendorboard对一幅图片进行操作 5.torchvison中的transforms总结 摘要 在之前学习了一些机器学习相关理论之后&#…

【限时免费发放】2000+热门Scratch作品源码

欢迎访问小虎鲸Scratch资源站&#xff01;在Scratch编程的学习过程中&#xff0c;优质的资源和灵感是至关重要的。因此&#xff0c;我们特别准备了这份【免费下载】的Scratch作品源码合集&#xff0c;包含超过2000个精选的Scratch项目源码&#xff0c;旨在为Scratch编程爱好者和…

Nginx+keepalived实现高可用

目录 一、准备工作 1、安装软件 二、配置master主服务器 1、修改nginx主配置文件 ​编辑 2、修改keepalived主配置文件 三、配置backup备服务器 四、配置节点服务器 1、配置第一个节点服务器 1.1、设置虚拟网卡 1.2、忽略ARP请求 1.3、安装并启动nginx软件 2、配置…

【STM32】SPI接口(非连续传输)

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 前言 SPI简介 IO口初始化 SPI配置 时钟使能 SPI初始化 SPI使能 数据接收与发送 硬件SPI代码 MySPI.h MySPI.c 前言 【通信协议】SPI总线-CSDN博客 本篇博客学习使用STM32的…