MyBatis-Plus&Druid数据源

MyBatis-Plus简介


MyBatis-Plus(简称MP)是一个MyBatis的增强工具,它在MyBatis的基础上进行了增强而不改变其原有的功能,旨在简化开发、提高效率。以下是对MyBatis-Plus的详细简介:

一、基本概述


定义:MyBatis-Plus是在MyBatis基础上进行增强的一个框架,通过提供一系列的特性和工具,极大地简化了CRUD(创建、读取、更新、删除)操作和其他数据库交互的复杂性。
目标:为开发者提供更加便捷、高效的数据库操作方式,减少重复性代码编写,提高开发效率。


二、主要特性


无侵入:MyBatis-Plus的引入不会对现有工程产生影响,它只做增强而不做改变,使得集成和使用变得非常简单。
损耗小:启动即会自动注入基本CRUD,性能基本无损耗,直接面向对象操作,BaseMapper接口中包含了大量的基本CRUD方法。
强大的CRUD操作:
内置通用Mapper和通用Service,通过少量配置即可实现单表大部分CRUD操作。
强大的条件构造器,支持链式调用,满足各类复杂的查询需求。
支持Lambda形式调用:通过Lambda表达式,可以方便地编写各类查询条件,无需担心字段写错。
支持主键自动生成:支持多达4种主键策略(包括分布式唯一ID生成器),可自由配置,完美解决主键问题。
支持ActiveRecord模式:实体类只需继承Model类即可进行强大的CRUD操作。
内置代码生成器:采用代码或Maven插件可快速生成Mapper、Model、Service、Controller层代码,支持模板引擎,提供了丰富的自定义配置选项。
内置分页插件:基于MyBatis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询。分页插件支持多种数据库。
内置性能分析插件:可输出SQL语句及其执行时间,帮助开发者快速定位慢查询。
内置全局拦截插件:提供全表delete、update操作智能分析阻断功能,也可自定义拦截规则,预防误操作。


三、与MyBatis的区别


语法简化:MyBatis-Plus通过使用注解和API简化了MyBatis的配置和操作,减少了开发者的编码量。
自动代码生成:MyBatis-Plus提供了代码生成器,可以根据数据库表自动生成对应的实体类、Mapper接口和Mapper XML文件,减少了手动编写的工作量。
分页插件:MyBatis-Plus内置了分页插件,而MyBatis本身需要手动编写分页逻辑。
条件查询:MyBatis-Plus提供了强大的条件查询功能,支持链式调用和Lambda表达式,使得查询条件更加清晰易读。


四、应用场景


MyBatis-Plus广泛应用于各种需要数据库交互的Java项目中,特别是在企业级应用开发中,其强大的功能和便捷的操作方式极大地提高了开发效率

综上所述,MyBatis-Plus是一个功能强大、易于使用的MyBatis增强工具,它通过提供一系列特性和工具,简化了数据库操作,提高了开发效率。

Lormbok简介


Lombok是一款Java编程工具,其主要作用在于简化Java代码的编写,提高开发效率。具体来说,Lombok的作用可以归纳为以下几点:

自动生成常用方法:


Getter和Setter方法:

通过在类的属性上添加@Getter和@Setter注解,Lombok可以自动生成这些属性的getter和setter方法,减少了手动编写这些方法的必要。


toString方法:

@ToString注解可以自动生成包含所有(非静态)属性名称和值的toString方法,方便调试和日志记录。


equals和hashCode方法:

@EqualsAndHashCode注解可以自动生成equals和hashCode方法,这对于需要将对象用作哈希表键或比较对象是否相等时非常有用。
自动生成构造函数:


无参构造函数:

@NoArgsConstructor注解可以自动生成一个无参构造函数。


全参构造函数:

@AllArgsConstructor注解可以自动生成一个包含所有属性作为参数的构造函数,简化了对象的创建过程。



@Slf4j、@Log4j2

等注解可以自动生成日志变量(如log),方便在代码中记录日志。
减少样板代码:
Lombok通过自动生成这些常用的方法和构造函数,显著减少了Java代码中的样板代(boilerplate code),使代码更加简洁和易于维护。
提高开发效率:
开发人员可以专注于业务逻辑的实现,而不是花费大量时间在编写和维护这些重复的代码上,从而提高了开发效率。
需要注意的是,Lombok仅在编译时起作用,不会对运行时的代码产生影响。生成的代码会在编译时自动插入到编译后的类文件中。此外,由于Lombok通过注解来工作,因此它依赖于IDE(如IntelliJ IDEA、Eclipse等)中的Lombok插件来解析这些注解并生成相应的代码。

综上所述,Lombok是一个强大的Java编程工具,它通过自动生成常用方法和构造函数、支持建造者模式、提供日志支持等功能,显著简化了Java代码的编写过程,提高了开发效率。

五 、添加 关键依赖包:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.18</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ktjiaoyu</groupId>
    <artifactId>MyBatis-Plus</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>MyBatis-Plus</name>
    <description>MyBatis-Plus</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.18</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
 
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
</project>
}

 application.properties添加相关配置:

spring.application.name=MyBatis-Plus
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/crm?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
 
spring.datasource.druid.initial-size=3
spring.datasource.druid.min-idle=3
spring.datasource.druid.max-active=10
 
spring.datasource.druid.max-wait=60000
 
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin
 
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=2000
#logging.level.root=warn
#logging.level.com.ktjiaoyu.crm.mapper=trace
#logging.pattern.console=%p%m%n

 启动类:

package com.ktjiaoyu.crm;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.ktjiaoyu.crm.mapper")
public class MyBatisPlusApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyBatisPlusApplication.class, args);
    }
 
}


 编写实体类:User

package com.ktjiaoyu.crm.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
@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 Integer usrFlag;
 
    public User(String usrName, String usrPassword, Long usrRoleId, Integer usrFlag) {
        this.usrName = usrName;
        this.usrPassword = usrPassword;
        this.usrRoleId = usrRoleId;
        this.usrFlag = usrFlag;
    }
}


 

 编写Mapper接口

package com.ktjiaoyu.crm.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ktjiaoyu.crm.pojo.User;
public interface UserMapper extends BaseMapper<User> {
 
}


 

 

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要在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、付费专栏及课程。

余额充值