springboot 2.3.0配置Druid 1.1.22 + mybatis-plus 3.3.2

目录

  • DruidDataSource配置介绍
  • mybatis-plus配置介绍
  • springboot整合搭建环境

DruidDataSource配置介绍

这里主要介绍DruidDataSource常用配置

官方文档

https://github.com/alibaba/druid/
配置 缺省值 说明
initialSize 0 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
maxActive 8 最大连接池数量
minIdle 最小连接池数量
maxWait 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
poolPreparedStatements false 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭
maxPoolPreparedStatementPerConnectionSize statement缓存大小
timeBetweenEvictionRunsMillis 有两个含义: 1、Destroy线程会检测连接的间隔时间 2、testWhileIdle的判断依据,详细看testWhileIdle属性的说明
minEvictableIdleTimeMillis 连接空闲时间大于该值并且池中空闲连接大于minIdle则关闭该连接【最小空闲时间,默认30分钟,如果连接池中非运行中的连接数大于minIdle,并且那部分连接的非运行时间大于minEvictableIdleTimeMillis,则连接池会将那部分连接设置成Idle状态并关闭;也就是说如果一条连接30分钟都没有使用到,并且这种连接的数量超过了minIdle,则这些连接就会被关闭了】
maxEvictableIdleTimeMillis 连接空闲时间大于该值,不管minIdle都关闭该连接【最大空闲时间,默认7小时,如果minIdle设置得比较大,连接池中的空闲连接数一直没有超过minIdle,这时那些空闲连接是不是一直不用关闭?当然不是,如果连接太久没用,数据库也会把它关闭,这时如果连接池不把这条连接关闭,系统就会拿到一条已经被数据库关闭的连接。为了避免这种情况,Druid会判断池中的连接如果非运行时间大于maxEvictableIdleTimeMillis,也会强行把它关闭,而不用判断空闲连接数是否小于minIdle】
testWhileIdle false 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效
testOnBorrow true 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testOnReturn false 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
statViewServlet 用于展示Druid的统计信息【1、提供监控信息展示的html页面 2、提供监控信息的JSON API】

mybatis-plus配置介绍

官方文档

https://mybatis.plus/guide/

具体查看官方文档,官方文档非常详细,这里就不多做介绍。

springboot整合搭建环境

废话不多说上代码,由于我搭建的是正式环境代码所以java命名不是以测试命名,所以不用管命名。

目录结构
springboot 2.3.0配置Druid 1.1.22 + mybatis-plus 3.3.2_第1张图片
mysql 建立sys_user表

CREATE TABLE `sys_user` (
  `user_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `password` varchar(100) DEFAULT NULL COMMENT '密码',
  `salt` varchar(20) DEFAULT NULL COMMENT '盐',
  `email` varchar(100) DEFAULT NULL COMMENT '邮箱',
  `mobile` varchar(100) DEFAULT NULL COMMENT '手机号',
  `status` tinyint(4) DEFAULT NULL COMMENT '状态  0:禁用   1:正常',
  `dept_id` bigint(20) DEFAULT NULL COMMENT '部门ID',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='系统用户';

在这里插入图片描述

下载之后导入到你的idea后开始配置

https://start.spring.io/

pom.xml依赖

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<mybatisplus.version>3.3.2</mybatisplus.version>
		<mybatisplus.spring.boot.version>3.3.2</mybatisplus.spring.boot.version>
		<mysql.version>5.1.49</mysql.version>
		<druid.version>1.1.22</druid.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>${mybatisplus.spring.boot.version}</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus -->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus</artifactId>
			<version>${mybatisplus.version}</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>${mysql.version}</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>${druid.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

配置DataSource

@Configuration
public class DynamicDataSourceConfig {
    @Bean
    @ConfigurationProperties("spring.datasource.druid.first")
    public DataSource firstDataSource() {
        return DruidDataSourceBuilder.create().build();
    }
}

application.yml 文件配置

# mysql
spring:
    # 环境 dev|test|prod
    profiles:
        active: dev

#mybatis
mybatis-plus:
  mapper-locations: classpath*:mapper/**/*.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.stcode.modules.*.entity
  global-config:
    #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
    id-type: 0
    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
    field-strategy: 2
    #驼峰下划线转换
    db-column-underline: true
    #刷新mapper 调试神器
    refresh-mapper: true
    #数据库大写下划线转换
    #capital-mode: true
    # Sequence序列接口实现类配置
    #key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
    #逻辑删除配置
    logic-delete-value: -1
    logic-not-delete-value: 0
    #自定义填充策略接口实现
    #meta-object-handler: com.baomidou.springboot.xxx
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false
    call-setters-on-nulls: true

application-dev.yml 文件配置

spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.jdbc.Driver
        druid:
            first:  #数据源1
                url: jdbc:mysql://localhost:3306/framework?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
                username: root
                password: 123456
            second:  #数据源2
                url: jdbc:mysql://10.10.168.18:3306/framework?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
                username: root
                password: 123456
            initial-size: 10
            max-active: 100
            min-idle: 10
            max-wait: 60000
            pool-prepared-statements: true
            max-pool-prepared-statement-per-connection-size: 20
            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
            stat-view-servlet:
                enabled: true
                url-pattern: /druid/*
                #login-username: admin
                #login-password: admin
            filter:
                stat:
                    log-slow-sql: true
                    slow-sql-millis: 1000
                    merge-sql: false
                wall:
                    config:
                        #允许一次执行多条语句
                        multi-statement-allow: true

mapper下的xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.stcode.modules.sys.dao.SysUserDao">
	<select id="queryAllPerms" resultType="string">
		select username from sys_user where user_id = #{userId}
	</select>
</mapper>

建立SysUserDao类

package com.stcode.modules.sys.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.stcode.modules.sys.entity.SysUserEntity;

import java.util.List;

public interface SysUserDao extends BaseMapper<SysUserEntity> {
    List<String> queryAllPerms(Long userId);
}

建立SysUserEntity类

package com.stcode.modules.sys.entity;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.io.Serializable;

@TableName("sys_user")
public class SysUserEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 用户ID
     */
    @TableId
    private Long userId;

    /**
     * 用户名
     */
    private String username;

    /**
     * 密码
     */
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String password;

}

建立SysUserService类

package com.stcode.modules.sys.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.stcode.modules.sys.entity.SysUserEntity;

import java.util.List;

public interface SysUserService extends IService<SysUserEntity> {

    //测试 的
    List<String> queryAllPerms(Long userId);

}

建立SysUserServiceImpl类

package com.stcode.modules.sys.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.stcode.modules.sys.dao.SysUserDao;
import com.stcode.modules.sys.entity.SysUserEntity;
import com.stcode.modules.sys.service.SysUserService;
import org.springframework.stereotype.Service;

import java.util.List;

@Service("sysUserService")
public class SysUserServiceImpl extends ServiceImpl<SysUserDao,SysUserEntity> implements SysUserService {
    @Override
    public List<String> queryAllPerms(Long userId) {
        return baseMapper.queryAllPerms(userId);
    }
}

建立AdminApplication类

package com.stcode;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
@MapperScan(basePackages = { "com.stcode.modules.*.dao" })
public class AdminApplication extends SpringBootServletInitializer {

	public static void main(String[] args) {
		SpringApplication.run(AdminApplication.class, args);
	}

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(AdminApplication.class);
	}
}

建立测试类

package com.stcode.service;

import com.stcode.modules.sys.service.SysUserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;


@SpringBootTest
public class TestMybatisPlusService {

    @Autowired
    private SysUserService sysUserService;

    @Test
    public void test() {
        List<String> list = sysUserService.queryAllPerms(1l);
        System.out.println(list.get(0));
    }
}

运行测试
springboot 2.3.0配置Druid 1.1.22 + mybatis-plus 3.3.2_第2张图片

你可能感兴趣的:(mybatis,数据库)