Mybatis-Plus&Druid数据源

一、Mybatis-Plus简介

(一)什么是Mybatis-Plus

  1. Mybatis-Plus是一个Mybatis(OPENS NEW WINDOW)的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发。

(二)Mybatis-Plus的优势

  1. 无侵入:只做增强不做改变,引入它不会对现有工程产生影响。
  2. 损耗小:启动即会自动注入基本curd,性能基本无损耗,直接面向对象操作。
  3. 强大的crud操作:内置通用mAPPER、通用sERVICE,仅仅通过少量配置即可实现单表大部分crud操作,更有强大的条件构造器,满足各类使用需求。
  4. 支持lAMBDA形式调用:通过 lAMBDA 表达式,方便的编写各类查询条件,无需再担心字段写错
  5. 支持主键自动生成:支持多达4种主键策略(内含分布式唯一 id 生成器 - sEQUENCE),可自由配置,完美解决主键问题。
  6. 支持aCTIVErECORD模式:支持 aCTIVErECORD 形式调用,实体类只需继承 mODEL 类即可进行强大的 crud 操作。
  7. 支持自定义全局通用操作:支持全局通用方法注入( WRITE ONCE, USE ANYWHERE )。
  8. 内置代码生成器:采用代码或者 MAVEN 插件可快速生成 MAPPER 、 MODEL 、 SERVICE 、 CONTROLLER 层代码,支持模板引擎,更有超多自定义配置等您来使用。
  9. 内置分页插件:基于 Mybatis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List查询。
  10. 内置性能分析插件:可输出 sQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询。

(三)Mybatis-Plus的框架结构

二、Spring-Boot整合Mybatis-Plus入门 

(一)创建项目,添加依赖

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
            <version>3.5.7</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

(二)application.properties相关配置

spring:
  #?????
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/crm?useUnicode=true&characterEncoding=utf-8
    username: root
    password: 123456
logging:
  level:
    root: warn
    com.bdqn.demo.mapper: trace
  pattern:
    console: '%p%m%n'

(三)编写实体类

@Data
@TableName("sys_user")
public class User implements Serializable {

@TableId(type = IdType.AUTO)
@TableField("usr_id")
  private Long usrId;
@TableField("usr_name")
  private String usrName;
  private String usrPassword;
  private Long usrRoleId;
  private Long usrFlag;

(四)编写Mapper接口

public interface UserMapper extends BaseMapper<User> {
}

(五)测试

@SpringBootTest
class SpringBootT369PlusApplicationTests {

    @Resource
    private UserMapper userMapper;

    @Test
    public void testSelectById() {  //查询主键
        User user = userMapper.selectById(2L);
        System.out.println("usrName:" + user.getUsrName());
    }
}

三、Druid数据源简介

(一)概念与作用

Druid数据源是一款高性能、稳定、安全的数据源中间件,它主要用于Java应用程序中。Druid数据源兼容多种数据库,,如MySQL、Oracle、PostqreSQl等,可以为开发者提供一致、可靠的数据访问服务。


(二)特点与优势

Druid数据源具有以下特点和优势:
高性能:Druid数据源在性能上具有明显优势,通过多种优化策略,如二级缓存、连接池等,提高了数据访问效率
稳定可靠:Druid数据源在众多项目中得到了广泛应用,具有较高的稳定性和可靠性。
安全:Druid数据源支持加密和验证机制,保证了数据传输的安全性。
易用性:Druid数据源提供了丰富的API和配置项,方便开发者进行定制和扩展。

(三)Druid数据源的使用

(一) 引入依赖

       <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.4</version>
        </dependency>

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

(二)application.properties相关配置

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/crm?useUnicode=true&characterEncoding=utf-8
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource #??????Druid???
    druid:
#初始化大小,最小,最大连接数
      initial-size: 3
      max-active: 10 
      min-idle: 3
#配置获取连接等待超时的时间
      max-wait: 60000 
#监控后台账号和密码
      stat-view-servlet-log-username: admin
      stat-view-servlet-log-password: admin
#配置StatFilter
      filter-stat-log-slow-sql: true
      filter-stat-slow-sql-millis: true

在以前项目基础上,增加对Druid连接池配置,以及SQL监控的配置,druid-spring-boot-starter默认情况下开启StatDilter的监控功能。

配置完成后,直接启动项目访问地址:http://localhost:8080/druid即可

首先,需要在pom.xml中添加依赖,如下: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis-plus.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.6</version> </dependency> ``` 然后,需要在application.yml中配置Druid数据源Mybatis-plus的配置,如下: ```yaml spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 username: root password: root druid: max-active: 20 initial-size: 1 max-wait: 60000 min-idle: 1 time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 300000 validation-query: SELECT 1 FROM DUAL test-while-idle: true test-on-borrow: false test-on-return: false mybatis-plus: mapper-locations: classpath:/mapper/*.xml global-config: db-config: id-type: auto field-strategy: not_empty table-prefix: t_ logic-delete-value: 1 logic-not-delete-value: 0 configuration: map-underscore-to-camel-case: true ``` 接着,我们需要创建一个数据源切换的工具类,如下: ```java public class DynamicDataSourceContextHolder { private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>(); public static void setDataSourceType(String dataSourceType) { CONTEXT_HOLDER.set(dataSourceType); } public static String getDataSourceType() { return CONTEXT_HOLDER.get(); } public static void clearDataSourceType() { CONTEXT_HOLDER.remove(); } } ``` 然后,我们需要创建一个切面,用来在方法执行前切换数据源,如下: ```java @Component @Aspect public class DynamicDataSourceAspect { @Pointcut("@annotation(com.example.demo.annotation.DataSource)") public void dataSourcePointCut() {} @Around("dataSourcePointCut()") public Object around(ProceedingJoinPoint point) throws Throwable { MethodSignature signature = (MethodSignature) point.getSignature(); DataSource dataSource = signature.getMethod().getAnnotation(DataSource.class); if (dataSource == null) { DynamicDataSourceContextHolder.setDataSourceType("db1"); } else { DynamicDataSourceContextHolder.setDataSourceType(dataSource.value()); } try { return point.proceed(); } finally { DynamicDataSourceContextHolder.clearDataSourceType(); } } } ``` 在需要使用不同数据源的方法上,我们可以使用@DataSource注解来指定数据源,如下: ```java @DataSource("db2") public List<User> selectUserList() { return userMapper.selectList(null); } ``` 最后,我们需要在配置类中配置多个数据源,如下: ```java @Configuration public class DataSourceConfig { @Bean @ConfigurationProperties("spring.datasource.druid.db1") public DataSource db1() { return DruidDataSourceBuilder.create().build(); } @Bean @ConfigurationProperties("spring.datasource.druid.db2") public DataSource db2() { return DruidDataSourceBuilder.create().build(); } @Bean @Primary public DataSource dataSource(DataSource db1, DataSource db2) { Map<Object, Object> targetDataSources = new HashMap<>(); targetDataSources.put("db1", db1); targetDataSources.put("db2", db2); DynamicRoutingDataSource dataSource = new DynamicRoutingDataSource(); dataSource.setTargetDataSources(targetDataSources); dataSource.setDefaultTargetDataSource(db1); return dataSource; } } ``` 以上就是Mybatis-plus切换Druid数据源的完整代码和配置文件配置。其中,DynamicRoutingDataSource是动态数据源的实现类,需要自行实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值