mybatis plus 多源数据-及链式查询
·
可以看官网
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 #设置默认的数据源或者数据源组,默认值即为master
strict: 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%2B8
username: username
password: password
driver-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%2B8
username: root
password: 12345678
driver-class-name: com.mysql.jdbc.Driver
mybatis-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: true
configuration:
#开启驼峰功能
map-underscore-to-camel-case: true
#开启二级缓存
cache-enabled: true
# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
springdoc:
swagger-ui:
path: /swagger-ui.html
tags-sorter: alpha
operations-sorter: alpha
api-docs:
path: /v3/api-docs
group-configs:
- group: 'default'
paths-to-match: '/**'
packages-to-scan: com.example.demo.controller
knife4j:
enable: true
setting:
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 {
@Override
public boolean save(MaterialInfo entity) {
return super.save(entity);
}
@Override
public boolean updateById(MaterialInfo entity) {
return super.updateById(entity);
}
@Override
public 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> {
@Override
public 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);
}
@Override
public 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);
}
@Override
public 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();
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)