前言
继前两篇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