【springboot 集成 mybatis-plus】

news/2025/1/20 14:03:29/

springboot 集成 mybatis-plus

  • 前言
  • 实战
    • 代码生成器
    • 自动填充字段

前言

正如MyBatis-Plus官网所说,MyBatis-Plus 是一个 MyBatis 的增强工具,提供了强大的CRUD操作,支持主键自动生成,代码生成器,自动填充字段等等,具体请到官网详细学习MyBatis-Plus官网

实战

代码生成器

  1. 创建springboot项目
  2. 引入相关依赖
        <!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.10.1</version></dependency><!--mybatis-plus代码生成--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.10.1</version></dependency><!--模板引擎--><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.32</version></dependency><!-- mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.22</version></dependency>

问题解决:java.lang.NoClassDefFoundError: freemarker/template/Configuration
3. 启动类上包扫描、mapper扫描

@SpringBootApplication(scanBasePackages={"com.gpyj"})
@MapperScan({"com.gpyj.data.dao","com.gpyj.data2.dao"})
public class DataApplication {public static void main(String[] args) {SpringApplication.run(DataApplication.class, args);}}
  1. yaml配置mapper目录
mybatis:mapper-locations: classpath:mapper/**/*.xml
  1. 创建代码生成器类
    这里主要配置以下几个配置,基本也就够用了,更多的定制化,请参考官网:
  • 数据库连接信息
  • 全局配置(主要配置公共的输出目录)
  • 数据源配置(自定义类型转换器实现)
  • 包配置(这些配置能决定你的文件生成到哪里)
  • 策略配置(这些配置能决定开启哪些文件生成,以及自定义文件名称等等)
package com.gpyj.data;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 java.nio.file.Paths;
import java.sql.Types;
import java.util.Collections;public class MybatisPlusGenerator {public static void main(String[] args) {String projectPath = Paths.get(System.getProperty("user.dir")).toString();System.out.println("path: " + projectPath);String url = "jdbc:mysql://localhost:3306/test20190411?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";String username = "root";String password = "root";FastAutoGenerator.create(url, username, password).globalConfig(builder -> {builder.author("dong") // 设置作者.enableSwagger() // 开启 swagger 模式.outputDir(projectPath + "/src/main/java") // 指定输出目录.disableOpenDir();}).dataSourceConfig(builder ->builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {int typeCode = metaInfo.getJdbcType().TYPE_CODE;if (typeCode == Types.SMALLINT) {// 自定义类型转换return DbColumnType.INTEGER;}return typeRegistry.getColumnType(metaInfo);})).packageConfig(builder -> {builder.parent("com.gpyj.data2") // 设置父包名.entity("dao.bean") // 设置实体类包名.mapper("dao") // 设置 Mapper 接口包名.service("service") // 设置 Service 接口包名.serviceImpl("service.impl") // 设置 Service 实现类包名
//                            .xml("mappers") // 设置 Mapper XML 文件包名.pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + "/src/main/resources/mapper/mapper")); // 设置路径配置信息}).strategyConfig(builder ->{// 表名String tStockMacd = "t_stock_macd";// 其他文件名String fileName = "Mp" + "StockMacd";builder.addInclude(tStockMacd) // 设置需要生成的表名.entityBuilder().enableLombok() // 启用 Lombok.enableTableFieldAnnotation() // 启用字段注解.convertFileName((a) -> fileName + "Po").serviceBuilder().convertServiceFileName((a) -> fileName + "Service").convertServiceImplFileName((a) -> fileName + "ServiceImpl").mapperBuilder().convertMapperFileName((a) -> fileName + "Dao").convertXmlFileName((a) -> fileName + "Dao").controllerBuilder().disable().convertFileName((a) -> fileName + "Controller");}).templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板.execute();}}
  1. 执行以上代码生成器类main方法,就会在对应的路径生成文件,在Controller里面简单写个例子
package com.gpyj.data2.controller;import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.gpyj.data2.dao.bean.MpStockMacdPo;
import com.gpyj.data2.service.MpStockMacdService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/test2")
public class TestController2 {@AutowiredMpStockMacdService stockMacdService;@GetMapping("/macd")public String test(){List<MpStockMacdPo> list = stockMacdService.list(Wrappers.lambdaQuery(MpStockMacdPo.class).eq(MpStockMacdPo::getCode,"000166.XSHE"));list.forEach(e -> System.out.println(e));return "test";}
}

自动填充字段

https://baomidou.com/guides/auto-fill-field/


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

相关文章

【ComfyUI专栏】ComfyUI的环境配置

对于常规的用户来说,我们碰到需要非常注意的问题,就是我们的ComfyUI的各个节点可能会有不兼容的情况,因此我们最好建立独立的Python虚拟环境。如何建立虚拟的环境呢?其实非常简单。 执行的命令如下: Python -m venv venv #创建Venv名称的虚拟环境 cd venv #进入到Venv …

InVideo AI技术浅析(四):机器学习

一、视频剪辑与合成 1. 工作原理 视频剪辑与合成是视频编辑中的核心任务,旨在将多个视频片段、音频和字幕等元素组合成一个连贯且富有吸引力的视频。InVideo AI 使用机器学习技术自动化这一过程,通过分析视频内容、识别重要片段并进行智能剪辑和合成。其核心目标是提升观众…

【Linux系统编程】—— 深度解析进程等待与终止:系统高效运行的关键

文章目录 进程创建再次认识fork()函数fork()函数返回值 写时拷贝fork常规⽤法以及调用失败的原因 进程终⽌进程终止对应的三种情况进程常⻅退出⽅法_exit函数exit函数return退出 进程等待进程等待的必要性进程等待的⽅法 进程创建 再次认识fork()函数 fork函数初识&#xff1…

人脸识别【python-基于OpenCV】

1. 导入并显示图片 #导入模块 import cv2 as cv#读取图片 imgcv.imread(img/wx(1).jpg) #路径名为全英文&#xff0c;出现中文 图片加载失败,"D:\picture\wx.jpg" #显示图片 &#xff08;显示标题&#xff0c;显示图片对象&#xff09; cv.imshow(read_picture,im…

【AI论文】迈向大型语言模型(LLM)训练开放数据集的最佳实践

摘要&#xff1a;许多人工智能公司未经版权所有者许可&#xff0c;就在其数据上训练大型语言模型&#xff08;LLM&#xff09;。这一行为的合法性因司法管辖区而异&#xff1a;在欧盟和日本等国家&#xff0c;这种行为在特定限制下是被允许的&#xff0c;而在美国&#xff0c;法…

vue3+vite+ts+router4+Pinia+Axios+sass 从0到1搭建

1、使用vite构建项目 npm create vitelatest 填写项目名的时候不能大写 2、跑起来之后配置下 import { defineConfig } from vite import vue from vitejs/plugin-vue import { resolve } from path // https://vite.dev/config/ export default defineConfig({plugins: [vue…

业务幂等性技术架构体系之服务幂等深入剖析

简单来说&#xff0c;服务幂等是指一个操作&#xff08;或请求&#xff09;无论被执行多少次&#xff0c;其对系统状态的影响都是一样的&#xff0c;就好像这个操作只执行了一次一样。换句话说&#xff0c;对于同一组输入参数&#xff0c;幂等的服务会给出相同的结果&#xff0…

[STM32 HAL库]串口中断编程思路

一、前言 最近在准备蓝桥杯比赛&#xff08;嵌入式赛道&#xff09;&#xff0c;研究了以下串口空闲中断DMA接收不定长的数据&#xff0c;感觉这个方法的接收效率很高&#xff0c;十分好用。方法配置都成功了&#xff0c;但是有一个点需要进行考虑&#xff0c;就是一般我们需要…