springboot 集成 mybatisplus

本案例版本

springboot  3.1.12

mybatis-plus  3.5.9

源码地址

 stormlong/springboot-mybatisplus

集成 mybatis-plus

官方文档:快速开始 | MyBatis-Plus

引入依赖

 <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
            <version>3.5.9</version>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

 yml配置

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://127.0.0.1:3306/springboot-oauth2?useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai&remarks=true&useInformationSchema=true&tinyInt1isBit=true

mybatis-plus:
  # 指定 MyBatis Mapper 对应的 XML 文件位置
  mapper-locations: classpath:/mapper/**.xml
  configuration:
    # 开启自动驼峰命名规则(camel case)映射
    map-underscore-to-camel-case: true

 如果使用 代码生成器,在连接上添加链接属性

启动类中修改

在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹

路径根据自己项目的 mapper 文件路径填写

@MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper")

集成代码生成器

引入依赖

 <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--        MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,
                    需要手动添加相关依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.9</version>
        </dependency>
        <!--        添加 模板引擎 依赖-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.34</version>
        </dependency>

代码生成主类 

strategyConfig 配置中显式配置了文件可覆盖生成,不配置则文件不覆盖

package com.mybatis.plus.demo.generator;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.apache.ibatis.type.JdbcType;

import java.nio.file.Paths;
import java.util.Collections;

/**
 * @author thl
 * @date 2025/1/10
 * @description
 **/
public class CodeGenerator {

    private static final String url = "jdbc:mysql://127.0.0.1:3306/springboot-oauth2?useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai&remarks=true&useInformationSchema=true&tinyInt1isBit=true";

    private static final String username = "root";

    private static final String password = "123456";

    public static void main(String[] args) {
        FastAutoGenerator.create(url, username, password)
                .globalConfig(builder -> {
                    builder.author("thl") // 设置作者
                            .outputDir(Paths.get(System.getProperty("user.dir")) + "/src/main/java")  // 指定输出目录
                            .commentDate("yyyy-MM-dd HH:mm:ss").disableOpenDir()
                    ;
                })
                .dataSourceConfig(builder ->

                        builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
                            // 兼容旧版本转换成Integer
                            if (JdbcType.TINYINT == metaInfo.getJdbcType()) {
                                return DbColumnType.INTEGER;
                            }
                            return typeRegistry.getColumnType(metaInfo);
                        })
                )
                .packageConfig(builder ->
                        builder.parent("com.mybatis.plus.demo") // 设置父包名
                                .entity("model")
                                .mapper("mapper")
                                .service("service")
                                .serviceImpl("service.impl")
                                .controller("controller")
                                .xml("mapper.xml")
                                .pathInfo(Collections.singletonMap(OutputFile.xml,
                                        Paths.get(System.getProperty("user.dir")) + "/src/main/resources/mapper")) // 设置mapperXml生成路径
                )
                .strategyConfig(builder ->
                        // 设置需要生成的表名
                        builder.addInclude("oauth2_user")
                                .controllerBuilder().enableFileOverride().enableRestStyle()
                                .serviceBuilder().enableFileOverride()
                                .mapperBuilder().enableFileOverride()
                                .entityBuilder().enableFileOverride()

                )
                .templateEngine(new FreemarkerTemplateEngine()) // 默认的是Velocity引擎模板
                .execute();
    }
}

打印sql

yml 配置

mapper 路径根据自己项目设置

logging:
  level:
    # 开启sql日志,去除 sql 语句查询结果
    com.mybatis.plus.demo.mapper: debug

数据库新建表 

DROP TABLE IF EXISTS `oauth2_user`;
CREATE TABLE `oauth2_user`  (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `age` int(11) NULL DEFAULT NULL COMMENT '年龄',
  `ou_password` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码',
  `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

项目目录结构 

使用

生成代码

运行 代码生成器主类 CodeGenerator, 自动生成 controller、service、service.impl、mapper、model、mapper.xml 文件

测试类

package com.mybatis.plus.demo;

import com.mybatis.plus.demo.mapper.Oauth2UserMapper;
import com.mybatis.plus.demo.model.Oauth2User;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest
class MybatisPlusAppTests {

    @Resource
    private Oauth2UserMapper oauth2UserMapper;

    @Test
    void testInsert() {
        Oauth2User oauth2User = new Oauth2User();
        oauth2User.setId(123236l);
        oauth2User.setUsername("user");
        oauth2User.setAge(18);
        oauth2User.setOuPassword("password");
        oauth2UserMapper.insert(oauth2User);
        assertThat(oauth2User.getId()).isNotNull();
    }

    @Test
    void testSelect() {
        List<Oauth2User> userlist = oauth2UserMapper.findUserByUserName("user");
        userlist.forEach(user-> System.out.println(user.toString()));
    }

}

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

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

相关文章

本地服务器Docker搭建个人云音乐平台Splayer并实现远程访问告别烦人广告

前言 大家好&#xff01;今天我要给大家分享的是如何在Ubuntu上用Docker快速搭建高颜值无广告的某抑云音乐播放器Splayer的详细流程&#xff0c;并且结合cpolar内网穿透工具实现远程访问。如果你是音乐爱好者&#xff0c;经常需要在外办公或旅行&#xff0c;这个教程绝对能让你…

phpenc加密程序源码

免费扩展加密程序&#xff0c;类似于sg11加密&#xff0c;支持单个PHP&#xff08;免费&#xff09;文件以及批量PHP文件&#xff08;ZIP压缩包格式&#xff09;源码加密的保护平台&#xff0c;加密后的源码文件保持原有代码结构&#xff0c;可以跨平台运行&#xff0c;可以运行…

牛客网刷题 ——C语言初阶(6指针)——BC106 上三角矩阵判定

1. 题目描述——BC106 上三角矩阵判定 牛客网OJ题链接 描述 KiKi想知道一个n阶方矩是否为上三角矩阵&#xff0c;请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵&#xff0c;主对角线为从矩阵的左上角至右下角的连线。 示例 输入&#xff1a; 3 1 2 3 0 4 5 0 0…

kafka消费堆积问题探索

背景 我们的商城项目用PHP写的&#xff0c;原本写日志方案用的是PHP的方案&#xff0c;但是&#xff0c;这个方案导致资源消耗一直降不下来&#xff0c;使用了20个CPU。后面考虑使用通过kafka的方案写日志&#xff0c;商城中把产生的日志丢到kafka中&#xff0c;在以go写的项目…

计算机网络 笔记 数据链路层3(局域网,广域网,网桥,交换机)

局域网: LAN:在某一区域内由多台计算机互联成的计算机组&#xff0c;使用广播信道 特点&#xff1a; 覆盖范围有限&#xff1a;通常局限在几千米范围内&#xff0c;比如一栋办公楼、一个校园或一个工厂等相对较小的地理区域。 数据传输速率高&#xff1a;一般能达到 10Mbps…

03-51单片机定时器和串口通信

一、51单片机定时器 1.定时器介绍 1.1为什么要使用定时器 在前面的学习中&#xff0c;用到了 Delay 函数延时&#xff0c;这里学习定时器以后&#xff0c;就可以通过定时器来完成&#xff0c;当然定时器的功能远不止这些&#xff1a; 51 单片机的定时器既可以定时&#xff…

Vue.config.productionTip = false 不起作用的问题及解决

文章目录 一、问题描述二、解决方法 一、问题描述 当我们在代码页面上引入Vue.js(开发版本)时&#xff0c;运行代码会出现以下提示&#xff0c;这句话的意思是&#xff1a;您正在开发模式下运行Vue&#xff0c;在进行生产部署时&#xff0c;请确保打开生产模式 You are runni…

迅为iTOP-RK3576开发板/核心板适用于ARM PC、边缘计算、个人移动互联网设备及其他多媒体产品

迅为iTOP-3576开发板采用瑞芯微RK3576高性能、低功耗的应用处理芯片&#xff0c;集成了4个Cortex-A72和4个Cortex-A53核心&#xff0c;以及独立的NEON协处理器。它适用于ARM PC、边缘计算、个人移动互联网设备及其他多媒体产品。支持INT4/INT8/INT16/FP16/BF16/TF32混合运算&am…

vue3 实现 “ fly-cut 在线视频剪辑 ”

参考地址&#xff1a;https://fly-cut.videocovert.online/ git源码地址&#xff1a;https://github.com/x007xyz/fly-cut 改版示例图&#xff1a; 功能点&#xff1a; 1、通过视频链接地址在浏览器中下载下来&#xff0c;并加载到页面中&#xff0c;展示时间、时间刻度、进…

关于使用FastGPT 摸索的QA

近期在通过fastGPT&#xff0c;创建一些基于特定业务场景的、相对复杂的Agent智能体应用。 工作流在AI模型的基础上&#xff0c;可以定义业务逻辑&#xff0c;满足输出对话之外的需求。 在最近3个月来的摸索和实践中&#xff0c;一些基于经验的小问题点&#xff08;自己也常常…

游戏引擎学习第78天

Blackboard: Position ! Collision “网格” 昨天想到的一个点&#xff0c;可能本来就应该想到&#xff0c;但有时反而不立即思考这些问题也能带来一些好处。节目是周期性的&#xff0c;每天不需要全程关注&#xff0c;通常只是在晚上思考&#xff0c;因此有时我们可能不能那么…

Link1189: 超过65536 对象的库限制

使用命令&#xff1a; dumpbin /EXPORTS E:\xxx\UnrealEditor-xxx-Win64-DebugGame.lib > C:\Users\xxx\Desktop\EXPORTS3.txt 看到有哪些对象和函数在被导出了&#xff0c;清理掉不需要的。 dumpbin /EXPORTS E:\ProjectX\zdev\Project\Binaries\Win64\Game-Win64-Debug…

【Oracle篇】深入了解执行计划中的访问路径(含表级别、B树索引、位图索引、簇表四大类访问路径)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;从事IT领域✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(…

一些计算机零碎知识随写(25年1月)-1

我原以为世界上有技术的那批人不会那么闲&#xff0c;我错了&#xff0c;被脚本真实了。 今天正隔着画画呢&#xff0c;手机突然弹出几条安全告警通知。 急忙打开服务器&#xff0c;发现问题不简单&#xff0c;直接关服务器重装系统..... 首先&#xff0c;不要认为小网站&…

浅谈容灾技术方案详解

一、什么是容灾&#xff1f; 容灾指的是&#xff0c;在异地搭建一套或多套和主生产系统一样的IT系统&#xff0c;用于应对在系统因发生意外&#xff08;自然灾害、人为灾害、设备系统故障等&#xff09;造成业务影响的情况&#xff0c;达到尽量让生产业务损失最小的目的。 二…

江科大STM32入门——输入捕获笔记总结

wx&#xff1a;嵌入式工程师成长日记 输入捕获原理 输入捕获是指 STM32 的定时器可以对外部输入信号的边沿进行检测&#xff0c;并记录下相应的时刻。其基本原理基于定时器的计数器和相关寄存器。 当外部信号连接到定时器的输入捕获引脚时&#xff0c;定时器会根据设定的捕获…

系统看门狗配置--以ubuntu为例

linux系统配置看门狗 以 ubuntu 系统配置看门狗为例 配置看门狗使用的脚本文件&#xff0c;需要使用管理员权限来执行&#xff1a; 配置是&#xff1a;系统每 30S 喂一次狗&#xff0c;超过 60S 不进行投喂&#xff0c;就会自动重启。 1. 系统脚本内容&#xff1a; #!/bin/b…

MySQL -- 约束

1. 数据库约束 数据库约束时关系型数据库的一个重要功能,主要的作用是保证数据的有效性,也可以理解为数据的正确性(数据本身是否正确,关联关系是否正确) 人工检查数据的完整性工作量非常大,在数据库中定义一些约束,那么数据在写入数据库的时候,就会帮我们做一些校验.并且约束一…

Unity3D仿星露谷物语开发20之道具简介弹出窗

1、目标 当鼠标悬停在栏的某个道具上面时&#xff08;没有点击道具&#xff09;&#xff0c;会自动弹出道具的简介的说明框。 2、思路 1&#xff09;制作一个预制件 2&#xff09;当鼠标悬停在某个slot上时&#xff0c;填充预制件的数据 3、自动布局ContentSizeFitter组件…

慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(一)

通过左侧导航菜单〖业务建模〗→〖业务对象〗&#xff0c;进入该界面&#xff1b;在该界面可以查看到系统中已存在的业务对象&#xff1b; 1.新建业务对象 在DatalinkX中进入【业务建模】的【业务对象】页面&#xff0c;点击【新建】按钮进入新建页面&#xff1b; 新建页面左侧…