spring-boot整合mybatis(web mysql logback配置)

时间:2023-01-26 09:29:59

pom.xml相关的配置说明。

配置文件看着比价多,在创建spring-boot项目的时候,自需要添加web,mysql,mybatis三个选项即可

<?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 http://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.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xiaoeyu</groupId>
    <artifactId>springboot2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot2</name>
    <description>Demo project for Spring Boot</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.0.0</version>
        </dependency>
        <!--mysql相关-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </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>
            </plugin>
            <!--手动添加的,逆向工程,用于根据数据库中的表生成实体类,dao接口与对应的mapper.xml文件-->
            <plugin>
                <!--逆向工程:需要的jar包-->
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
                <configuration>
                    <overwrite>true</overwrite>
                    <!--如何生成的配置文件地址-->
                    <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
                </configuration>
                <!--生成时与数据库连接需要的驱动-->
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.47</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

</project>

 逆向工程 :https://www.cnblogs.com/xiaoeyu/p/10402694.html  详细说明,用于生成与数据库中的表相关的类

创建spring-boot项目时 生成的test测试类说明

  生成的测试类名: 项目+ApplicationTests.java。运行该测试类有几个坑要填好

package com.xiaoeyu.springboot2;

import com.xiaoeyu.springboot2.dao.EmpMapper;
import com.xiaoeyu.springboot2.pojo.Emp;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;


//spring-boot自动生成的测试类,与SSM中spring测试类用的包好像不同
@RunWith(SpringRunner.class)
@SpringBootTest
public class Springboot2ApplicationTests {

    //不用web,直接通过dao层的接口方法调用测试与数据库的连接是否畅通  EmpMapper为dao层的接口,@Autowired会把 根据Mapper.xml自动生成实现类,注入进来
    @Autowired
    private EmpMapper empMapper;
    
    @Test
    public void contextLoads() {
        //根据id查询,对象
        Emp emp = empMapper.selectByPrimaryKey(7369);
        //打印对应的一个信息,有数据,连接成功
        System.out.println(emp.getHiredate());
    }

}
  1. 启动类,Springboot2Application.java
    package com.xiaoeyu.springboot2;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    //扫描dao所在的包,在测试的时候,不然找不到要注入接口的实体类。
    //dao的实体类是根据dao中的接口与dao对应的mapper.xml由spring生成的。这里要指定dao层接口所在的路径,并在配置文件中指定mapper.xml的路径
    @MapperScan(value = "com.xiaoeyu.springboot2.dao")
    public class Springboot2Application {
        public static void main(String[] args) {
            SpringApplication.run(Springboot2Application.class, args);
        }
    }
  2. application.yml配置文件。指定对应的mapper.xml
    spring:
      datasource:
    #    mysql高版本驱动,为格林时区,+8到北京时区
        url: jdbc:mysql://localhost:3306/bcs?serverTimezone=GMT%2B8
        username: root
        driver-class-name: com.mysql.cj.jdbc.Driver
      profiles:
        active: dev
    
    server:
      port: 80
      servlet:
        context-path: /springboot
    mybatis:
    #  在测试类中,只用自动装配。被注入的类是由dao里面的接口与mapper.xml生成的。这里用来指定dao里面的接口对应的mapper.xml文件的位置
    #  不然在运行测试类的时候,接口中的方法没有实现。
      mapper-locations: classpath:com/xiaoeyu/springboot2/mapper/*.xml
    #  日志设置
    logging:
      level:
        com.xiaoeyu.springboot2.dao: debug
        org.springframework: info

     

springboot中,用于处理日志信息的配置文件。相关功能的解释

<?xml version="1.0" encoding="UTF-8"?>
<!--本日志文件存在于springboot项目中,并且配置文件名为:logback-spring.xml  被spring识别-->
<configuration>
    <!--用于日志环境切换,根据主配置文件中的spring.profiles.active指定的不同的环境,把指定的环境中的日志输出到不同的文件中-->
    <!--spring.profiles.active设置的值与<springProfile name="xxxx">的xxx进行匹配,选择日志输出,不管active指定的配置环境是否存在-->
    <springProfile name="dev">
        <property name="LOG_HOME" value="d:/logs/dev" />
    </springProfile>
    <springProfile name="prd">
        <property name="LOG_HOME" value="d:/logs/prd" />
    </springProfile>
    
    <!--定义日志保存的路径,根据日志环境记录的话,这个就有点多余,先注释掉-->
    <!--<property name="LOG_HOME" value="d:/logs" />-->
    
    <!--定义一个控制台输出器,名为console-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!--按pattern指定的格式输出日志,编码为UTF-8-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread]  %logger{30} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    
    
    <!--定义一个日滚动(每天生成一份)的日志文件,就是把日志生成文件,存在硬盘中,命名为精确到天的日期,则一天只保留一个日志文件-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--按pattern指定的格式输出日志,编码为UTF-8-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread]  %logger{30} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        
        <!-- 定义保存的文件名 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--%d{yyyy-MM-dd}:日志名字的一部分,则一天只能存在一个这样的日志,重新生成的时候,会去掉之前存在的同名的-->
            <fileNamePattern>${LOG_HOME}/mysprintboot_%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--日志最多保存90天,一天的保存一份的话,就是最多保存90份-->
            <maxHistory>90</maxHistory>
        </rollingPolicy>
        
        <!-- 在日滚动文件中,强制只保存错误xxx级别以上信息 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level><!--xxx级别的定义-->
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    
    <!-- 定义日志全局最低输出级别是INFO,满足这个才会生成日志,根据配置显示在控制台或者生成文件保存在硬盘 -->
    <root level="INFO">
    
<appender-ref ref="console" /><!--输出到定义的控制台-->
    <appender-ref ref="file" /><!--输出到定义的日滚动配置-->

  </root>

</configuration>