文章目录
程序结构

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文件


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

1763

被折叠的 条评论
为什么被折叠?



