前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot--配置MyBatis、Logback、PagerHelper、Druid

SpringBoot--配置MyBatis、Logback、PagerHelper、Druid

作者头像
aruba
发布2022-05-30 09:27:23
8560
发布2022-05-30 09:27:23
举报
文章被收录于专栏:android技术

上篇SpringBoot--初入SpringBoot中对SpringBoot如何配置有了初步的了解,只需要配置下pom文件,写一个SpringBoot启动类,就可以启动服务进行访问了,再来看下当初的pom文件导入的依赖:

代码语言:javascript
复制
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

这边导入了一个spring-boot-starter-web,SpringBoot中称之为启动器,导入该启动器后,就相当于整合了SpringMVC和Spring,而以前复杂的配置都交由SpringBoot管理

启动器分为两种:

  • 以spring-boot-starter为前缀的启动器:SpringBoot内置的启动器
  • 以spring-boot-starter为后缀的启动器:第三方框架为支持SpringBoot的启动器

有了这些启动器,配置第三方框架将会变得非常简单

一、配置MyBatis

1. 导入MyBatis启动器
代码语言:javascript
复制
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
2. yml中配置数据库连接信息和MyBatis包扫描路径
代码语言:javascript
复制
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  mapper-locations: classpath:mybatis/*.xml #指定映射文件路径
  type-aliases-package: com.aruba.bean
3. 定义员工实体类
代码语言:javascript
复制
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Emp implements Serializable {
    /**
     * 员工编号
     */
    private Integer empno;
    /**
     * 姓名
     */
    private String ename;
    /**
     * 职位
     */
    private String job;
    /**
     * 上级
     */
    private Integer mgr;
    /**
     * 入职日期
     */
    private Date hiredate;
    /**
     * 薪水
     */
    private Double sal;
    /**
     * 奖金
     */
    private Double comm;
    /**
     * 部门编号
     */
    private Integer deptno;
}
4. 定义Mapper接口
代码语言:javascript
复制
@Mapper
public interface EmpMapper {
    @Select("select * from emp")
    List<Emp> findAllEmp();
}
5. 定义Service层接口和实现类

接口:

代码语言:javascript
复制
public interface EmpService {
    List<Emp> findAllEmp();
}

实现类:

代码语言:javascript
复制
@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;

    @Override
    public List<Emp> findAllEmp() {
        return empMapper.findAllEmp();
    }
}
6. 定义Controller层
代码语言:javascript
复制
@Controller
public class EmpController {
    @Autowired
    private EmpService empService;

    @RequestMapping("findAllEmp")
    @ResponseBody
    public List<Emp> findAllEmp() {
        return empService.findAllEmp();
    }

}

浏览器访问:

二、配置Logback

SpringBoot默认使用Logback作为日志管理,web启动器中集成了它,只需要在resources目录下新建配置文件:logback.xml

内容为:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="${catalina.base}/logs/"/>
    <!-- 控制台输出 -->
    <appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 日志输出格式 -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            </pattern>
        </layout>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/server.%d{yyyy-MM-dd}.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            </pattern>
        </layout>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- 日志输出级别 -->
    <root level="info">
        <appender-ref ref="Stdout"/>
        <!--暂时不需要输出到文件-->
        <!--<appender-ref ref="RollingFile"/>-->
    </root>

    <logger name="com.aruba.mapper" level="DEBUG"></logger>


    <!--日志异步到数据库 -->
    <!--<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
            日志异步到数据库
            <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
               连接池
               <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
                  <driverClass>com.mysql.jdbc.Driver</driverClass>
                  <url>jdbc:mysql://127.0.0.1:3306/databaseName</url>
                  <user>root</user>
                  <password>root</password>
                </dataSource>
            </connectionSource>
      </appender> -->

</configuration>

需要修改的为logger标签中的包名

三、配置PageHelper

PageHelper是一个帮助我们进行分页操作的框架,配置了PageHelper,在Mapper中进行分页只需要一行代码

1. 导入PageHelper启动器
代码语言:javascript
复制
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.4.2</version>
</dependency>
2. Controller层中定义分页接口
代码语言:javascript
复制
    @RequestMapping("findEmpByPage/{pageSize}/{pageNum}")
    @ResponseBody
    public List<Emp> findEmpByPage(@PathVariable("pageSize") Integer pageSize,
                                   @PathVariable("pageNum") Integer pageNum) {
        return empService.findEmpByPage(pageSize, pageNum);
    }
3. Service层实现接口
代码语言:javascript
复制
    @Override
    public List<Emp> findEmpByPage(Integer pageSize, Integer pageNum) {
        PageHelper.startPage(pageNum, pageSize);
        List<Emp> list = empMapper.findAllEmp();
        return list;
    }

对比就增加了PageHelper.startPage(pageNum, pageSize);这一句代码

调用结果:

4. 获取其他信息

PageHelper还可以获取额外的信息,如总大小,总页数等

代码语言:javascript
复制
    @Override
    public List<Emp> findEmpByPage(Integer pageSize, Integer pageNum) {
        Page<Emp> page = PageHelper.startPage(pageNum, pageSize);
        List<Emp> list = empMapper.findAllEmp();
        // Page对象获取
        System.out.println("当前页:" + page.getPageNum());
        System.out.println("总页数" + page.getPages());
        System.out.println("页大小:" + page.getPageSize());
        System.out.println("总记录数:" + page.getTotal());
        System.out.println("当前页数据" + page.getResult());

        // PageInfo对象获取
        PageInfo<Emp> empPageInfo = new PageInfo<>(list);
        System.out.println("当前页:" + empPageInfo.getPageNum());
        System.out.println("总页数" + empPageInfo.getPages());
        System.out.println("页大小:" + empPageInfo.getPageSize());
        System.out.println("总记录数:" + empPageInfo.getTotal());
        System.out.println("当前页数据" + empPageInfo.getList());

        return list;
    }

控制台打印:

四、配置Druid

阿里的德鲁伊连接池,之前以及使用过了,配置也很简单

1. 导入Druid启动器
代码语言:javascript
复制
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>
2. yml中配置
代码语言:javascript
复制
spring:
  datasource:
    # 使用阿里的Druid连接池
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    # 填写你数据库的url、登录名、密码和数据库名
    url: jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: root
  druid:
    # 连接池的配置信息
    # 初始化大小,最小,最大
    initial-size: 5
    min-idle: 5
    maxActive: 20
    # 配置获取连接等待超时的时间
    maxWait: 60000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    timeBetweenEvictionRunsMillis: 60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    # 打开PSCache,并且指定每个连接上PSCache的大小
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat,wall,slf4j
    # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
    connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
    # 配置DruidStatFilter
    web-stat-filter:
      enabled: true
      url-pattern: "/*"
      exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
    # 配置DruidStatViewServlet
    stat-view-servlet:
      url-pattern: "/druid/*"
      # IP白名单(没有配置或者为空,则允许所有访问)
      allow: 127.0.0.1,192.168.8.109
      # IP黑名单 (存在共同时,deny优先于allow)
      deny: 192.168.1.188
      #  禁用HTML页面上的“Reset All”功能
      reset-enable: false
      # 登录名
      login-username: admin
      # 登录密码
      login-password: 123456

配置完后启动,可以进入Druid的管理网页:

项目地址:

https://gitee.com/aruba/spring-boot-study.git

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、配置MyBatis
    • 1. 导入MyBatis启动器
      • 2. yml中配置数据库连接信息和MyBatis包扫描路径
        • 3. 定义员工实体类
          • 4. 定义Mapper接口
            • 5. 定义Service层接口和实现类
              • 6. 定义Controller层
              • 二、配置Logback
              • 三、配置PageHelper
                • 1. 导入PageHelper启动器
                  • 2. Controller层中定义分页接口
                    • 3. Service层实现接口
                      • 4. 获取其他信息
                      • 四、配置Druid
                        • 1. 导入Druid启动器
                          • 2. yml中配置
                          • 项目地址:
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档