SpringBoot2.x 整合 mybatis + Paghelper + druid
SpringBoot2.x 整合 mybatis + Paghelper + druid
1、简介
软件架构
- 阿里巴巴数据库连接池 druid : https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
- mybatis分页插件 pageHelper github : https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md
- pageHelper官网 : https://pagehelper.github.io/docs/howtouse/
- SpringBoot 集成 pageHelper : https://github.com/pagehelper/pagehelper-spring-boot
2、maven配置
<?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.6.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.dw.study</groupId>
<artifactId>springboot-mybatis-pagehelper</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-mybatis-pagehelper</name>
<description>springboot-mybatis-pagehelper</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<!--mybatis pageHelper https://github.com/pagehelper/pagehelper-spring-boot-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.2</version>
</dependency>
<!--mysql-connector 连接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--druid 数据库连接池 https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
3、yml配置
server:
port: 8081
spring:
application:
name: springboot-mybtais-paghelper
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
url: jdbc:mysql://localhost:3306/my_local?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf8
&autoReconnect=true&failOverReadOnly=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
# 配置初始化连接池大小(默认0)、最小、最大(默认8)
initial-size: 1
# 最小连接池个数——》已经不再使用,配置了也没效果
min-idle: 2
# 最大连接池个数
max-active: 20
# 配置获取连接等待超时的时间
max-wait: 60000
# 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大。 默认为false
pool-prepared-statements: true
# 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。
max-open-prepared-statements: 20
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
time-between-eviction-runs-millis: 60000
# 配置一个连接在池中最小和最大生存的时间,单位是毫秒
min-evictable-idle-time-millis: 300000
max-evictable-idle-time-millis: 900000
# 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。
# 如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
validation-query: SELECT 1
# 申请连接时执行validationQuery检测连接是否有效 默认为true
test-on-borrow: true
# 归还连接时执行validationQuery检测连接是否有效 默认为false
test-on-return: false
# 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
test-while-idle: true
filter:
stat:
# 显示sql
log-slow-sql: true
# 显示慢sql 2秒
slow-sql-millis: 2000
profiles:
active: dev
# mybatis
mybatis:
# mapper 配置文件地址
mapper-locations: classpath:mapper/*.xml
configuration:
# 开启驼峰命名
map-underscore-to-camel-case: true
# pageHelper
pagehelper:
# 数据库方言,会自动检测所使用的的数据库,使用相应的分页方式
helperDialect: mysql
# reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。
# 默认false 时,直接根据参数进行查询。
reasonable: true
# 默认值为 false,当该参数设置为 true 时,如果 pageSize=0 或者 RowBounds.limit = 0 就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是 Page 类型)
pageSizeZero: true
# 支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。
supportMethodsArguments: true
# 为了支持 startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值,
# 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值,
# 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
params: count=countSql
4、通用日志配置 logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 引入默认设置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 应用名称-->
<property name="appName" value="springboot-mybatis-pageHelper"/>
<!-- 日志的存放目录-->
<property name="INFO_LOG_FILE_NAME_PATTERN" value="logs/${appName}-info.%d{yyyy-MM-dd}.%i.log"/>
<property name="WARN_LOG_FILE_NAME_PATTERN" value="errlogs/${appName}-warn.%d{yyyy-MM-dd}.%i.log"/>
<property name="ERROR_LOG_FILE_NAME_PATTERN" value="errlogs/${appName}-error.%d{yyyy-MM-dd}.%i.log"/>
<!--输出到控制台的日志格式-->
<property name="CONSOLE_LOG_PATTERN"
value="%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p})
%clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%c){cyan} %clr(:){faint}
%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<!-- 输出到文件的日志格式, 格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<property name="FILE_LOG_PATTER" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>
<!-- 控制台输出设置 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!-- 按天输出INFO日志设置 -->
<appender name="DAY_INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${INFO_LOG_FILE_NAME_PATTERN}</fileNamePattern>
<!-- 日志保留天数 -->
<maxHistory>7</maxHistory>
<!-- 日志文件上限大小,达到指定大小后删除旧的日志文件 -->
<totalSizeCap>1GB</totalSizeCap>
<!-- 每个日志文件的最大值 -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level> <!-- 设置拦截的对象为INFO级别日志 -->
<onMatch>ACCEPT</onMatch> <!-- 当遇到了INFO级别时,启用改段配置 -->
<onMismatch>DENY</onMismatch> <!-- 没有遇到INFO级别日志时,屏蔽改段配置 -->
</filter>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_LOG_PATTER}</pattern>
</encoder>
</appender>
<!-- 按天输出WARN日志设置 -->
<appender name="DAY_WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${WARN_LOG_FILE_NAME_PATTERN}</fileNamePattern>
<!-- 日志保留天数 -->
<maxHistory>7</maxHistory>
<!-- 日志文件上限大小,达到指定大小后删除旧的日志文件 -->
<totalSizeCap>1GB</totalSizeCap>
<!-- 每个日志文件的最大值 -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level> <!-- 设置拦截的对象为INFO级别日志 -->
<onMatch>ACCEPT</onMatch> <!-- 当遇到了INFO级别时,启用改段配置 -->
<onMismatch>DENY</onMismatch> <!-- 没有遇到INFO级别日志时,屏蔽改段配置 -->
</filter>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_LOG_PATTER}</pattern>
</encoder>
</appender>
<!-- 按天输出ERROR级别日志设置 -->
<appender name="DAY_ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${ERROR_LOG_FILE_NAME_PATTERN}</fileNamePattern>
<!-- 日志保留天数 -->
<maxHistory>7</maxHistory>
<!-- 日志文件上限大小,达到指定大小后删除旧的日志文件 -->
<totalSizeCap>1GB</totalSizeCap>
<!-- 每个日志文件的最大值 -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level> <!-- 设置拦截的对象为ERROR级别日志 -->
<onMatch>ACCEPT</onMatch> <!-- 当遇到了ERROR级别时,启用改段配置 -->
<onMismatch>DENY</onMismatch> <!-- 没有遇到ERROR级别日志时,屏蔽改段配置 -->
</filter>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_LOG_PATTER}</pattern>
</encoder>
</appender>
<!-- 日志输出级别,OFF level > FATAL > ERROR > WARN > INFO > DEBUG > ALL level -->
<!-- <logger name="com.apache.ibatis" level="INFO"/>-->
<!-- <logger name="java.sql.Statement" level="INFO"/>-->
<!-- <logger name="java.sql.Connection" level="INFO"/>-->
<!-- <logger name="java.sql.PreparedStatement" level="INFO"/>-->
<!-- <logger name="org.springframework" level="WARN"/>-->
<!-- <logger name="com.baomidou.mybatisplus" level="WARN"/>-->
<logger name="com.dw.study.dao" level="DEBUG"/>
<!-- 开发环境:打印控制台和输出到文件 -->
<springProfile name="dev"><!-- 由application.yml中的spring.profiles.active配置 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
<!-- 测试环境:打印控制台和输出到文件 -->
<springProfile name="test"><!-- 由application.yml中的spring.profiles.active配置 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="DAY_INFO_FILE"/>
<appender-ref ref="DAY_WARN_FILE"/>
<appender-ref ref="DAY_ERROR_FILE"/>
</root>
</springProfile>
<!-- 生产环境:打印控制台和输出到文件 -->
<springProfile name="prod"><!-- 由application.yml中的spring.profiles.active配置 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="DAY_INFO_FILE"/>
<appender-ref ref="DAY_WARN_FILE"/>
<appender-ref ref="DAY_ERROR_FILE"/>
</root>
</springProfile>
</configuration>
gitee源码地址:https://gitee.com/my-study-project/springboot-mybatis-pagehelper