mybatis plus 多源数据-及链式查询

news/2025/3/5 2:25:06/

可以看官网
https://baomidou.com/pages/a61e1b/#dynamic-datasource

1. 添加jar pom.xml


<mybatis.plus.version>3.4.2</mybatis.plus.version>
<mysql-connector-java.version>8.0.24</mysql-connector-java.version><!--Mybatis--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis.plus.version}</version></dependency><!-- mybatis plus 集成多数据源--><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.0</version></dependency><!-- MySQL --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql-connector-java.version}</version><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency>

2. 配置文件

server:port: 9000
spring:datasource:dynamic:primary: system #设置默认的数据源或者数据源组,默认值即为masterstrict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源datasource:youzi:url: jdbc:mysql://rm-2ze72bkwe80t.mysql.rds.aliyuncs.com:3306/xxx?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8username: usernamepassword: passworddriver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置system:url: jdbc:mysql://localhost:3306/xxx?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8username: rootpassword: 12345678driver-class-name: com.mysql.jdbc.Drivermybatis-plus:mapper-locations: com.example.demo.mapper/*.xml # 配置MyBatis-Plus扫描Mapper文件的位置type-aliases-package: com.example.demo.entity # 创建别名的类所在的包global-config:db-config:id-type: assign_id#主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
#    id-type: 3#机器 ID 部分(影响雪花ID)
#    workerId: 1#数据标识 ID 部分(影响雪花ID)(workerId 和 datacenterId 一起配置才能重新初始化 Sequence)#datacenterId: 18#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"#field-strategy: 2#驼峰下划线转换#db-column-underline: trueconfiguration:#开启驼峰功能map-underscore-to-camel-case: true#开启二级缓存cache-enabled: true# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用#   log-impl: org.apache.ibatis.logging.stdout.StdOutImplspringdoc:swagger-ui:path: /swagger-ui.htmltags-sorter: alphaoperations-sorter: alphaapi-docs:path: /v3/api-docsgroup-configs:- group: 'default'paths-to-match: '/**'packages-to-scan: com.example.demo.controller
knife4j:enable: truesetting:language: zh_cn

3.直接在想要指定数据库访问的代码方法、类上用@DS(“system或youzi”)

4.mybatis-plus如何实现IService、Mapper实现链式访问数据库。

4.1 entity

import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.lookahead.core.tool.utils.DateUtil;
import org.springframework.format.annotation.DateTimeFormat;import java.util.Date;/*** @Description youzi课本、书* @Author admin* @Date 2023/10/31 13:22* @Version 1.0*/
@Data
@TableName("tb_material_info")
@Schema(description = "课程、书")
public class MaterialInfo {private String id;private String materialName;private String materialCoverUrl;private String materialType;private String delFlag;/*** 创建时间*/@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)@JsonFormat(pattern = DateUtil.PATTERN_DATETIME)@Schema(description = "创建时间", hidden = true)private Date createDate;/*** 更新时间*/@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)@JsonFormat(pattern = DateUtil.PATTERN_DATETIME)@Schema(description = "更新时间", hidden = true)private Date updateDate;private String createBy;private String updateBy;}

4.2 mapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.MaterialInfo;
import org.apache.ibatis.annotations.Mapper;public interface MaterialInfoMapper extends BaseMapper<MaterialInfo> {}

4.3 service

/*** 基础业务接口** @param <T>* @author */
public interface BaseService<T> extends IService<T> {/*** 保存* @param entity* @return*/boolean save(T entity);/*** 修改* @param entity* @return*/boolean updateById(T entity);/*** 逻辑删除** @param ids id集合(逗号分隔)* @return boolean*/boolean deleteLogic(@NotEmpty List<Long> ids);}
import com.baomidou.dynamic.datasource.annotation.DS;
import com.example.demo.entity.MaterialInfo;public interface IMaterialInfoService extends BaseService<MaterialInfo>{
}

4.4 serviceImpl

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.entity.MaterialInfo;
import com.example.demo.mapper.MaterialInfoMapper;
import com.example.demo.service.BaseService;
import com.example.demo.service.IMaterialInfoService;
import org.springframework.stereotype.Service;import javax.validation.constraints.NotEmpty;
import java.util.List;/*** @Description TODO* @Author admin* @Date 2023/10/31 10:22* @Version 1.0*/
@Service
@DS("youzi")
public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, MaterialInfo> implements IMaterialInfoService {@Overridepublic boolean save(MaterialInfo entity) {return super.save(entity);}@Overridepublic boolean updateById(MaterialInfo entity) {return super.updateById(entity);}@Overridepublic boolean deleteLogic(@NotEmpty List<Long> ids) {return super.removeByIds(ids);}
}

当然,因为好多不同的service都要实现BaseService,所以可以加BaseServiceImpl implement BaseService

/*** 业务封装基础类** @param <M> mapper* @param <T> model* @author*/
@Validated
public class BaseServiceImpl<M extends BaseMapper<T>, T extends BaseEntity> extends ServiceImpl<M, T> implements BaseService<T> {@Overridepublic boolean save(T entity) {
//		Userinfo user = SecureUtil.getUser();
//		if (user != null) {
//			entity.setOperatorBy(user.getUserId());
//			entity.setOperatorName(user.getRealName());
//		}Date now = DateUtil.now();entity.setGmtCreate(now);entity.setGmtModified(now);entity.setIsDeleted(LaConstant.DB_NOT_DELETED);return super.save(entity);}@Overridepublic boolean updateById(T entity) {
//		Userinfo user = SecureUtil.getUser();
//		if (user != null) {
//			entity.setOperatorBy(user.getUserId());
//			entity.setOperatorName(user.getRealName());
//		}entity.setGmtModified(DateUtil.now());return super.updateById(entity);}@Overridepublic boolean deleteLogic(@NotEmpty List<Long> ids) {return super.removeByIds(ids);}}

4.5 在controller就可以直接用service.lambdaQuery() 查询了!

        List<TeacherMaterialModule> parentModules = materialModuleService.lambdaQuery().eq(TeacherMaterialModule::getMaterialInfoId, materialInfo.getId()).isNull(TeacherMaterialModule::getParentMaterialModuleId).list();

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

相关文章

c++qt学习对象树

1.当创建的对象在堆区时候&#xff0c;如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类&#xff0c;可以不用管理释放的操作&#xff0c;将对象会放在对象树中。 2.一定程度上简化了内存回收机制 构造顺序与析构顺序相反

window10 mysql8.0 修改端口port不生效

mysql的默认端口是3306&#xff0c;我想修改成3307。 查了一下资料&#xff0c;基本上都是说先进入C:\Program Files\MySQL\MySQL Server 8.0这个目录。 看看有没有my.ini&#xff0c;没有就新建。 我这里没有&#xff0c;就新建一个&#xff0c;然后修改port&#xff1a; […

浅谈无源供电无线测温在线监测系统应用方案

安科瑞 崔丽洁 摘要&#xff1a;无源供电无线测温在线监测系统是一种基于声表面波技术的测温技术&#xff0c;在变电站监测方面得到了很好的技术实践应用。本文对无源供电无线测温在线监测系统研究应用进行分析研究。 关键词&#xff1a;设备检测&#xff1b;无线测温。 引言 在…

vue-admin-templete项目配置在手机上预览

参考文档&#xff1a; https://blog.csdn.net/qq_29752857/article/details/109802801想要在手机上预览本地打开的vue-admin-templete项目&#xff0c;首先要确保手机和电脑在同一网段。 参考文档&#xff1a;https://blog.csdn.net/m0_57236802/article/details/1315234471.查…

采购供应链思维导图

供应链采购&#xff0c;是指企业根据生产需要&#xff0c;通过与供应商签订合同&#xff0c;由供应商提供原材料、零部件、包装材料等&#xff0c;企业负责产品的制造&#xff0c;并将产品销售给用户的一种交易方式。 供应链管理 横向:采购把东西买进来&#xff0c;生产去加工增…

6-1 二叉排序树查找操作

description 本题要求实现二叉排序树的查找操作。 函数接口定义&#xff1a; BSTree SearchBST(BSTree T,ElemType e); 其中BSTree结构定义如下&#xff1a; typedef int ElemType; typedef struct BSTNode { ElemType data; struct BSTNode *lchild,*rchild; }BSTNode,*BS…

Docker中OceanBase挂载过后,删除再启动无限重启的解决办法

ob-compose.yml文件如下&#xff1a; version: 3 services:oceanbase1:image: oceanbase/oceanbase-ce:latestcontainer_name: oceanbase1hostname: oceanbase1ports:- 2881:2881restart: alwaysprivileged: truevolumes:#- //d/obdata/ob:/root/ob#- //d/obdata/obd:/root/.o…

Python数据分析:在职场中的竞争优势

前言 在职场中&#xff0c;技能的重要性是不言而喻的。越来越多的职位要求员工具备数据分析能力&#xff0c;而Python作为一种强大的数据分析工具&#xff0c;正在成为职场中的“利器”。然而&#xff0c;尽管Python数据分析提供了巨大的优势&#xff0c;许多人依然未能掌握这…