Springboot整合三之Springboot整合mybatis

前言

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


猜你喜欢

转载自blog.csdn.net/zhuzhezhuzhe1/article/details/80538590