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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐