SpringBoot整合SpringBoot整合MybatisPlus、MP分页插件、Logback日志框架
1 整合MybatisPlus
1.1 导入依赖
- druid-spring-boot-starter
- mybatis-plus-boot-starter
- lombok
<dependencies>
<!-- mybatis-plus起步依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
</dependencies>
1.2 修改配置文件
当mapper映射文件与Mapper接口不在统一目录下需要配置classpath
mybatis-plus:
# 加载mybatis配置文件
# config-location: mybatis-config.xml
#加载mapper映射文件配置文件(当mapper映射文件与Mapper接口不在统一目录下需要配置)
mapper-locations: classpath:mapper/*Mapper.xml
#mybatis别名配置
type-aliases-package: com.ying.springboot04.pojo
configuration:
#日志配置
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 开启驼峰映射配置
map-underscore-to-camel-case: true
# druid数据源配置
spring:
datasource:
druid:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///你的数据库名
username: root
password: 1234
#初始化连接
initial-size: 20
#最大连接数量
max-active:
#最小空闲连接
min-idle: 10
#超时等待时间
max-wait: 00
1.3 扫描Mapper
@SpringBootApplication
@MapperScan(basePackages = "com.ying.springboot01.mapper")
public class Springboot01Application {
public static void main(String[] args) {
SpringApplication.run(Springboot0pplication.class, args);
}
}
1.4 测试
2 整合MP分页插件
2.1 编写MP配置类
配置类和配置文件
@Configuration 表示当前类是配置类
//Spring boot方式
@Configuration
public class MybatisPlusConfig {
// 最新版
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
//mybatisplus官网示例
@Configuration
@MapperScan("scan.your.mapper.package")
public class MybatisPlusConfig {
/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
return interceptor;
}
@Bean
public ConfigurationCustomizer configurationCustomizer() {
return configuration -> configuration.setUseDeprecatedExecutor(false);
}
}
2.2 使用分页插件
@Test
public void testPage(){
Page<User> page = new Page<>(1,3);
userMapper.selectPage(page,null);
page.getRecords().forEach(System.out::println);
System.out.println(page.getPages());
System.out.println(page.getTotal());
}
3 整合Logback日志框架
项目中日志系统是必不可少的,目前比较流行的日志框架有log4j、logback等,可能大家都知道,这两个框架的作者是同一个人,Logback旨在作为流行的log4j项目的后续版本,从而恢复log4j离开的位置。另外 slf4j(Simple Logging Facade for Java) 则是一个日志框架,提供了日志系统中常用的接口,logback 和 log4j 则对slf4j 进行了实现。这里主要讲解Logback这个日志框架,它的执行速度上比Log4j可以快上最高10倍以上。
3.1 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
注意:
spring-boot-starter其中包含了 spring-boot-starter-logging,所以导入了spring-boot-starter或者spring-boot-starter-web则无需单独导入spring-boot-starter-logging依赖
3.2 Logbak配置
scan: 当配置文件被修改后, 将会被重新载入。
scanPeriod: 置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 输出到控制台 -->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 配置日志输出到控制台的格式 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} -- %-4relative %-evel %logger{32} %thread -- %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!-- 将日志记录到文件当中 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 基于时间和大小的的滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名, 必须包含%i, 从1开始-->
<FileNamePattern>D:/workspace/logs/logback.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
<!-- 最大20KB 超过最大值,会重新建一个文件-->
<maxFileSize>20MB</maxFileSize>
<!-- 所有的日志加起来最大的大小 -->
<totalSizeCap>400MB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-evel:级别从左显示字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-evel %thread -- %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!-- root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。 -->
<root level="INFO">
<!-- 标识这个appender将会添加到这个loger。 -->
<appender-ref ref="stdout"/>
<appender-ref ref="file"/>
</root>
</configuration>
3.3 配置说明
配置 | 说明 |
---|---|
%d | 日期转换,花括号中指定日期的格式 |
%-4relative | 该条日志输出的时间,这个时间是相对于服务器启动到打印出这条日志的相对时间,4表示时间占用的宽度。 |
%-evel | 日志的级别,日志总共级别,分别是debug,info,warn,error,fatal,从左往右日志级别越高,示日志级别占用的字符宽度 |
%thread | 该日志所属的线程。 |
%msg | 日志信息 |
%logger{32} | 输出该日志信息的类,32表示包的层级 |
%n: | 换行 |
3.4 使用日志
@Service
public class UserServiceImpl implements UserService {
private final Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);
@Override
public void addUser() {
try {
System.out.println(10/0);
System.out.println("添加用户");
logger.info("xxx时间...添加用户");
} catch (Exception e) {
e.printStackTrace();
logger.error("添加用户失败");
}
}
}