springboot之集成Mybatis和Logback

本文详细介绍了如何在SpringBoot项目中集成MyBatis框架,包括maven依赖配置、外化配置、Logback日志配置及MyBatis具体配置。通过实例展示了增删改查操作,并解释了关键代码的作用。


程序结构
在这里插入图片描述

maven依赖

pom.xml

    <!--为spring boot,提供有用的Maven默认值-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
    </parent>
    
    <dependencies>
        <!--为web应用程序添加典型的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--swagger2、swagger-ui用来生成api文档-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.6.1</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.6.1</version>
        </dependency>

        <!--
            lombok作用:
                1.简写Java Bean方法,比如User中给出字段,getter/setter、toString等方法由lombok生成
                2.简化生成日志
        -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.14</version>
        </dependency>
        <!--处理json-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.38</version>
        </dependency>
        <!--连接mysql数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--将mysql、springboot、mybatis框架联系到一起-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.15</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>



spring boot外化配置

外化配置文件可以是properties或yaml文件
这里使用application.yml

server:
  port: 8888

logging:
  path: logs
  file: mylog.log

spring:
  application:
    name: myTest
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///course?serverTimezone=UTC
    username: root
    password: 123456

mybatis:
  type-aliases-package: com.course.model
  mapper-locations:
    - mapper/*

其中

  • server:port 设置tomcat访问端口;
  • logging:path 设置日志路径,在同级目录下生成logs文件夹
  • logging:file 设置日志文件名
  • spring:application:name 设置application名字
  • spring:datasourse 设置访问数据源信息
  • mybatis:type-alises-package 设置在什么路径下,搜索Java Bean
  • mybatis:mapper-locations 加载mapper/下面的所有xml文件



Logback配置

spring boot使用starters时,默认使用Logback记录日志,参见spring boot之日志

Logback的配置文件为logback.xml,参考logback的使用和logback.xml详解

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <!--日志格式化输出模板:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
    <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n"/>
    <property name="LOG_PATH" value="${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}"/>
    
    <!--滚动记录到文件,默认文件最大10M-->
    <!--${LOG_PATH}/${LOG_FILE}分别为application.yml中的logging.path和logging.file-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${LOG_FILE}.%d{yyyy-MM-dd}</fileNamePattern>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!--输出到控制台-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>


    <appender name="CRAWLER_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/event.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/event.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.business.intelligence.util.CrawlerLogger" level="INFO" additivity="false">
        <appender-ref ref="CRAWLER_LOG"/>
    </logger>

    <!--level日志级别,分为TRACE/DEBUG/INFO/WARN/ERROR/OFF-->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
    </root>
    
</configuration>



mybatis配置

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <typeAliases>
        <!--指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean-->
        <package name="com.course.model"/>
    </typeAliases>
    <mappers>
    	<!--mapper可以是多个,一般都是mapper/***.xml-->
        <mapper resource="mapper/mysql.xml"/>
    </mappers>
</configuration>



举例:使用mybatis+SpringBoot实现增删改查

Application.java
package com.course;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.scheduling.annotation.EnableScheduling;
import javax.annotation.PreDestroy;

@EnableScheduling
@SpringBootApplication
public class Application {

    private static ConfigurableApplicationContext context;

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

    @PreDestroy
    public void close(){
    	//关闭application context,释放资源
        Application.context.close();
    }
}

其中,

  • @EnableScheduling用来开启定时任务,即发现注解@Scheduled的任务并后台执行。
  • @Scheduled用于标注这个方法是一个定时任务的方法
  • @SpringBootApplication用来标注项目入口,以及完成一些基本的自动配置。
  • ConfigurableApplicationContext:此接口结合了所有ApplicationContext需要实现的接口。因此大多数的ApplicationContext都要实现此接口。它在ApplicationContext的基础上增加了一系列配置应用上下文的功能。配置应用上下文和控制应用上下文生命周期的方法在此接口中被封装起来,以免客户端程序直接使用。

参考:
Spring Boot(九):定时任务
SpringBoot Schedule 配置


mysql.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
                PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
                "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.course">
    <select id="getUserCount" resultType="Integer">
        select count(*) from  user;
    </select>

	<insert id="addUser" parameterType="com.course.model.User">
        insert into user(id,name,age,sex)
        values(#{id},#{name},#{age},#{sex})
    </insert>

    <update id="updateUser" parameterType="com.course.model.User">
        update user set name=#{name},age=#{age}
        where id=#{id}

    </update>
    <delete id="deleteUser" parameterType="Integer">
        delete from user where id = #{id}
    </delete>
</mapper>
User.java
package com.course.model;

import lombok.Data;

@Data
public class User {
    private int id;
    private String name;
    private String sex;
    private int age;

}

Demo.java
package com.course.controller;

import com.course.model.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;


@Log4j
@RestController
@Api(value = "v1", description = "这是我的第一个版本的demo") //swagger注解
@RequestMapping("v1")
public class Demo {

    //首先获取一个执行sql语句的对象
    @Autowired //启动即加载,即 程序启动时,立即加载template对象
    private SqlSessionTemplate template;

    @RequestMapping(value = "/getUserCount", method = RequestMethod.GET)
    @ApiOperation(value = "可以获取到用户数", httpMethod = "GET") //swagger注解
    public int getUserCount(){
        return template.selectOne("getUserCount");
    }
	
	@RequestMapping(value = "/addUser",method = RequestMethod.POST)
    public int addUser(@RequestBody User user){
        int result = template.insert("addUser",user);
        return result;
    }

    @RequestMapping(value = "/updateUser",method = RequestMethod.POST)
    public int updateUser(@RequestBody User user){
       
       return  template.update("updateUser",user);
    }

    @RequestMapping(value = "/deleteUser",method = RequestMethod.GET)
    public int delUser(@RequestParam int id){
        return template.delete("deleteUser",id);
    }
}

SqlSessionTemplate:通过源码我们何以看到 SqlSessionTemplate 实现了SqlSession接口,也就是说我们可以使用SqlSessionTemplate 来代理以往的DefaultSqlSession完成对数据库的操作

参考:
Mybatis SqlSessionTemplate 源码解析
SqlSessionTemplate是如何保证MyBatis中SqlSession的线程安全的?
在这里插入图片描述

执行结果

执行application.java中main方法,访问/v1/getUserCount接口,结果如下
在这里插入图片描述
使用jmeter执行/v1/addUser请求,
在这里插入图片描述
在这里插入图片描述

项目路径下,生成mylog.log文件
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值