可以看官网
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();