前言
继前两篇springboot整合案例,今天我们来说说springboot整合mybatis
1.创建工程
这里博主就不多说了,直接贴图
2.添加依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
这里添加了mysql和mybatis的依赖
3.配置yml
server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
hikari:
username: root
password: 123
mybatis:
mapper-locations: classpath:mapper/**/*.xml # mapper文件的路径
4.编码
首先,我们先建张数据表,就叫user吧
CREATE TABLE `t_user` (
`id` bigint(20) NOT NULL,
`name` varchar(11) DEFAULT NULL,
`email` varchar(22) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
User.java
package com.space.mybatis.cache.bo;
import lombok.Data;
/**
* @author zhuzhe
* @date 2018/5/8 13:29
*/
@Data
public class User {
private Long id;
private String userName;
private String email;
}
UserMapper.java
package com.space.mybatis.cache.mapper;
import com.space.mybatis.cache.bo.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author zhuzhe
* @date 2018/5/8 13:29
*/
@Component
@Mapper
public interface UserMapper {
int save(User user);
List<User> getAll();
int delete(Long id);
}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.space.mybatis.cache.mapper.UserMapper" >
<resultMap id="BaseResultMap" type="com.space.mybatis.cache.bo.User" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="name" property="userName" jdbcType="VARCHAR" />
<result column="email" property="email" jdbcType="VARCHAR" />
</resultMap>
<insert id="save" parameterType="com.space.mybatis.cache.bo.User" >
insert into t_user (id, name, email)
values (#{id,jdbcType=BIGINT}, #{userName,jdbcType=VARCHAR},
#{email,jdbcType=VARCHAR})
</insert>
<select id="getAll" resultMap="BaseResultMap">
select * from t_user
</select>
<delete id="delete" parameterType="java.lang.Long">
delete from t_user where id = #{id}
</delete>
</mapper>
5.测试
编写测试类 UserController.java
package com.space.mybatis.cache.controller;
import com.space.mybatis.cache.bo.User;
import com.space.mybatis.cache.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author zhuzhe
* @date 2018/5/8 13:30
*/
@RequestMapping("/user")
@RestController
@Slf4j
public class UserController {
@Autowired
private UserMapper userMapper;
@RequestMapping("/add")
public String testAdd(User user){
log.info(user.toString());
userMapper.save(user);
return user.toString();
}
@RequestMapping("/get")
public List<User> testAdd(){
return userMapper.getAll();
}
@RequestMapping("/delete/{id}")
public String delete(@PathVariable("id") Long id){
userMapper.delete(id);
return "delete";
}
}
在这里我们使用postman进行测试:
先测试添加:
可以看到返回结果:
数据库也已经添加成功。
测试get:
OK!delete方法在此不多做演示。
至此,springboot整合mybatis就完成了。
6.实现mybatis的二级缓存
其实,要实现mybatis的二级缓存也是很EASY的。下面我们就来说说:
首先,在application.yml文件中进行配置
然后,我们在UserMapper.xml中进行详细配置:在xml中添加如下代码
<!--
eviction LRU
flushInterval缓存时间,以毫秒为单位
size缓存大小
readOnly如果为false的话,缓存对象必须是可序列化的
readOnly=true 当查询时,与上一次执行查询的时间差距小于
flushInterval缓存时间,直接从缓存里取
-->
<cache eviction="LRU"
type="org.apache.ibatis.cache.impl.PerpetualCache"
flushInterval="60000"
size="1024"
readOnly="true"/>
同时,在<select>标签中添加useCache='true'
<select id="getAll" resultMap="BaseResultMap" useCache='true'>
select * from t_user
</select>
这样,我们就已经实现了mybatis的二级缓存。
接下来,我们来测试一下:
我们执行get方法,可以查到数据:
然后,我们在数据库中将该条记录删除(记住,需要直接在库里删除,不要使用delete方法。因为使用delete方法时,缓存是会自动更新的)
可以看到,记录已经删除了
但是,我们再次执行get请求,依然可以查到该条数据:
这就证明缓存生效了。
同时,我们定义的缓存时间是60000毫秒,也就是1分钟。现在,已经过了一分钟了,我们再来查查:
可以看到,缓存已经更新了。
7.二级缓存需要注意
在这里,说下二级缓存需要注意以下几点:
需要在yml文件中配置 mybatis.configuration.cache-enabled 为 true
select语句所在的mapper.xml文件中,必须配置<cache>节点
<select>语句中需要添加 userCache='true'
其实,在我们的项目中,往往不会直接使用Mybatis的二级缓存,现在比较主流的一般会使用redis去实现。
这个博主之前也有写过,以下是源码地址,大家感兴趣的可以看看:
https://github.com/zhuzhegithub/springboot-redis-mybatis
转载请务必保留此出处(原作者):https://blog.csdn.net/zhuzhezhuzhe1
版权声明:本文为原创文章,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。
https://blog.csdn.net/zhuzhezhuzhe1