Spring Boot集成Mybatis Plus快速入门Demo

embedded/2024/9/23 20:14:14/

1.什么事Mybatis Plus?

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑

  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作

  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求

  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错

  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题

  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作

  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )

  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用

  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询

  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库

  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询

  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

支持数据库

任何能使用  MyBatis 进行 CRUD, 并且支持标准 SQL 的数据库,具体支持情况如下,如果不在下列表查看分页部分教程 PR 您的支持。
  • MySQL,Oracle,DB2,H2,HSQL,SQLite,PostgreSQL,SQLServer,Phoenix,Gauss ,ClickHouse,Sybase,OceanBase,Firebird,Cubrid,Goldilocks,csiidb,informix,TDengine,redshift

  • 达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库,优炫数据库,星瑞格数据库

2.mysql环境准备

第一个mysql数据库

docker run --name docker-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql

初始化数据

create database demo;
create table user_info
(
user_id     varchar(64)          not null primary key,
username    varchar(100)         null ,
age         int(3)               null ,
gender      tinyint(1)           null ,
remark      varchar(255)         null ,
create_time datetime             null ,
create_id   varchar(64)          null ,
update_time datetime             null ,
update_id   varchar(64)          null ,
enabled     tinyint(1) default 1 null
);

说明

msyql账号root
mysql密码123456

3.代码工程

实验目的:使用mybatis plus操作mysql数据库

pom.xml

<?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"><parent><artifactId>springboot-demo</artifactId><groupId>com.et</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>mybatis-plus</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1</version></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.3.1</version></dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version></dependency></dependencies>
</project>

application.yaml

server:port: 8088spring:datasource:password: 123456username: rooturl: jdbc:mysql://localhost:3306/demo?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=truedriver-class-name: com.mysql.cj.jdbc.Driver

generator

java">package com.et.mybaties.plus.util;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class GeneratorCode {/*** database connect* */private static final String dbUrl = "jdbc:mysql://localhost:3306/demo?useUnicode=true&useSSL=false&characterEncoding=utf8";/*** username* */private static final String username = "root";/*** pasword* */private static final String password = "123456";/*** moduleName* */private static final String moduleName = "/mybatis-plus";/*** <p>* read console content* @param* </p>*/public static String scanner(String tip) {Scanner scanner = new Scanner(System.in);StringBuilder help = new StringBuilder();help.append("please input:" + tip + ":");System.out.println(help.toString());if (scanner.hasNext()) {String ipt = scanner.next();if (StringUtils.isNotBlank(ipt)) {return ipt;}}throw new MybatisPlusException("please right conntent:" + tip + "!");}public static void main(String[] args) {// Code GenerateorAutoGenerator mpg = new AutoGenerator();String module = scanner("please input module");// GlobalCOnfigGlobalConfig gc = new GlobalConfig();//D:\IdeaProjects\ETFrameworkString basedir ="D:/IdeaProjects/ETFramework/";String projectPath = basedir+moduleName;System.out.println(projectPath);//OutputDirgc.setOutputDir(projectPath+"/src/main/java");gc.setAuthor("stopping");//some generate rulegc.setMapperName("%sMapper");gc.setServiceName("%sService");gc.setServiceImplName("%sServiceImp");gc.setControllerName("%sController");gc.setXmlName("%sMapper");gc.setIdType(IdType.AUTO);gc.setOpen(false);//IsOverridegc.setFileOverride(true);//isSwagger2gc.setSwagger2(false);mpg.setGlobalConfig(gc);//datasourceDataSourceConfig dsc = new DataSourceConfig();dsc.setUrl(dbUrl);dsc.setDriverName("com.mysql.cj.jdbc.Driver");dsc.setUsername(username);dsc.setPassword(password);mpg.setDataSource(dsc);// PackageConfigPackageConfig pc = new PackageConfig();//package pathpc.setParent("com.et.mybaties.plus");//subpackage pathpc.setMapper("mapper."+module);pc.setController("controller."+module);pc.setService("service."+module);pc.setServiceImpl("service."+module+".imp");pc.setEntity("model.entity");pc.setXml("Mapper");mpg.setPackageInfo(pc);//custom configInjectionConfig cfg = new InjectionConfig() {@Overridepublic void initMap() {// to do nothing}};//  freemarkerString templatePath = "/templates/mapper.xml.ftl";// FileOutConfigList<FileOutConfig> focList = new ArrayList<>();focList.add(new FileOutConfig(templatePath) {@Overridepublic String outputFile(TableInfo tableInfo) {// MapperString xmlUrl = projectPath + "/src/main/resources/mapper/" + module+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;System.out.println("xml path:"+xmlUrl);return xmlUrl;}});cfg.setFileOutConfigList(focList);mpg.setCfg(cfg);// templateConfigTemplateConfig templateConfig = new TemplateConfig();templateConfig.setXml(null);mpg.setTemplate(templateConfig);// StrategyConfigStrategyConfig strategy = new StrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);strategy.setEntityLombokModel(true);strategy.setRestControllerStyle(true);// common file//strategy.setSuperEntityColumns("id");strategy.setInclude(scanner("tablename,multi can be seperated ,").split(","));strategy.setControllerMappingHyphenStyle(true);strategy.setTablePrefix(pc.getModuleName() + "_");//isAnnotationEnablestrategy.setEntityTableFieldAnnotationEnable(true);mpg.setStrategy(strategy);mpg.setTemplateEngine(new FreemarkerTemplateEngine());mpg.execute();}
}

运行main函数,生成相应的代码如下2cd8196818dba72c358c73974199ddd2.png

DemoApplication.java

java">package com.et.mybaties.plus;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.et.mybaties.plus.mapper")
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • https://github.com/Harries/springboot-demo

4.测试

编写测试类,执行插入,更新,自定义查询测试

java">package com.et.mybaties.plus;import com.et.mybaties.plus.model.entity.UserInfo;
import com.et.mybaties.plus.service.userInfo.UserInfoService;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class)
public class DemoTests {private Logger log = LoggerFactory.getLogger(getClass());@AutowiredUserInfoService userInfoService;@Beforepublic void before()  {log.info("init some data");}@Afterpublic void after(){log.info("clean some data");}@Testpublic void query()  {log.info("your method test Code");userInfoService.lambdaQuery().list().forEach(System.out::println);}@Testpublic void testQueryWrapper()  {log.info("your method test Code");userInfoService.testQueryWrapper(3).forEach(System.out::println);}@Testpublic void insert()  {log.info("your method test Code");for(int i =1;i<10;i++) {UserInfo ui =  new UserInfo();ui.setUserId(i+"id");userInfoService.removeById(i+"id");ui.setUsername("HBLOG"+i);ui.setAge(i);userInfoService.save(ui);}}}

5.参考引用

  • http://www.liuhaihua.cn/archives/710453.html

  • https://baomidou.com/


http://www.ppmy.cn/embedded/12896.html

相关文章

桥式压力传感器输出mV用仪表运放还是选高精度ADC的问题

桥式压力传感器输出mV用仪表运放还是选高精度ADC的问题 这几天博采众长 吸收了很多大师的意见 都不建议用仪表运放去做这种信号的放大采集&#xff0c;直接用高精度的ADC芯片&#xff0c;带MCU那种。&#xff08;仪表放大器非常难做到很稳定&#xff0c;自打σ-δ ADC出现以后…

UV胶水能够粘接丙烯腈-丁二烯-苯乙烯共聚物ABS吗?

UV胶水能够粘接丙烯腈-丁二烯-苯乙烯共聚物ABS吗&#xff1f; UV胶水通常能够用于粘接丙烯腈-丁二烯-苯乙烯共聚物&#xff08;ABS&#xff09;。UV胶水的优势之一是其适用于多种材料的粘接&#xff0c;包括ABS。然而&#xff0c;成功的粘接还取决于一些因素&#xff0c;包括表…

NLP(5)-softmax和交叉熵

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 感觉全连接层就像一个中间层转换数据的形态的,或者说预处理数据&#xff1f; 代码 softmax就是把输出的y 归一化&#xff0c;把结果转化为概率值&#xff01;&#xff0c;在分类问题中很常见。 而交叉熵是一种损失函数&…

公链系统开发全指南: 从规划到实施

在区块链技术的迅速发展和应用推广下&#xff0c;公链系统的开发成为了当前数字资产领域的热门话题。从规划到实施&#xff0c;公链系统的开发过程需要经历多个步骤&#xff0c;下文将详细介绍每个步骤。 第一步: 规划和设计 市场调研: 分析市场需求和竞争情况&#xff0c;确定…

go语言并发实战——日志收集系统(四) 利用tail包实现对日志文件的实时监控

Linux中的tail命令 tail 命令是一个在 Unix/Linux 操作系统上用来显示文件末尾内容的命令。它可以显示文件的最后几行内容&#xff0c;默认情况下显示文件的最后 10 行。tail 命令 非常有用&#xff0c;特别是在我们查看日志文件或者监视文件变化时。 基本用法如下&#xff1a…

如何操作HTTP返回头-ApiHug小技巧-002

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace &…

vue项目中定位组件来源的查找思路

vue项目中定位组件来源的查找思路 先去【package.json】里面看看有没有看【a】开头或者【a-】开头的插件名 例如&#xff1a;如果我不知道【el-tree】&#xff0c;先去【package.json】里面找【el】或者【el-】开头的插件名&#xff0c;结果知道了【element-ui】这样就可以直接…

PHP中的错误处理机制是怎样的?

HP中的错误处理机制是一个关键组件&#xff0c;它帮助开发者识别、记录和处理在代码执行过程中出现的各种问题。这种机制确保了程序的稳定性和可维护性&#xff0c;使开发者能够迅速定位并修复错误。 PHP中的错误处理主要包括以下几个方面&#xff1a; 错误级别&#xff1a; P…