SpringBoot 系列:
【SpringBoot 框架】- 入门——环境搭建、工程热部署、idea快捷创建SpringBoot项目
【SpringBoot 框架】- SpringBoot 原理分析
【SpringBoot 框架】- SpringBoot 配置文件
【SpringBoot 框架】- SpringBoot 整合 Mybatis、Junit、Redis
目录
零、前言
一、SpringBoot 整合 Mybatis
1、快捷创建 SpringBoot 工程
2、添加Mybatis的起步依赖
3、添加数据库驱动坐标
4、添加数据库连接信息
5、创建数据库
6、创建实体Bean
7、编写Mapper
8、配置映射关系
9、配置 mybatis 信息
10、编写测试Controller
二、SpringBoot 整合 Junit
1、添加Junit的起步依赖
2、编写测试类
三、SpringBoot 整合 Redis
1、添加 Redis 的起步依赖
2、配置 Redis 的连接信息
3、注入 RedisTemplate 测试 Redis
在我们的实际开发中,使用关系型数据库可以方便的在一个表以及多个表之间做非常复杂的数据查询,但是其查询速率和拓展性远不及NOSQL,这就不适合大规模数据集合多重数据种类的应用场景,尤其是大数据应用。因此,有些时候会将关系型数据库和 NOSQL 结合起来使用,所以就使用 SpringBoot整合 Mybatis、Redis,Junit 是测试用的。整合步骤如下:
- 快捷创建 SpringBoot 工程
- SpringBoot 整合 Mybatis
- SpringBoot 整合 Junit
- SpringBoot 整合 Redis
【1】点击:文件--->模块,选择 Spring Initializr,直接点击下一个
【2】填写相关选项,点击下一个
【3】选择 Web,然后点击下一步
【4】保存路径,点击完成
在 pom.xml 中添加Mybatis的起步依赖
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.1.1
在 pom.xml 中添加数据库驱动坐标
mysql
mysql-connector-java
在 resources 文件夹下面的 application.properties 文件里添加数据库连接信息
#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
CREATE DATABASE test;
use test;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;INSERT INTO `user` VALUES ('1', 'oneStar', '123', '一颗星');
INSERT INTO `user` VALUES ('2', 'twoStar', '123', '两颗星');
在java目录下创建:cn.star.domain.User
package cn.star.domain;
/**
* 〈一句话功能简述〉
* 〈实体bean〉
*
* @author OneStar
* @create 2019/11/21
* @since 1.0.0
*/
public class User {
// 主键
private Long id;
// 用户名
private String username;
// 密码
private String password;
// 姓名
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", name='" + name + '\'' +
'}';
}
}
在 java 目录下创建 mapper 接口:cn.star.mapper.UserMapper
package cn.star.mapper;
import cn.star.domain.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 〈一句话功能简述〉
* 〈mapper接口〉
*
* @author OneStar
* @create 2019/11/21
* @since 1.0.0
*/
@Mapper
public interface UserMapper {
public List queryUserList();
}
在 resources 文件夹下创建 mapper 目录,在 mapper 目录下创建 UserMapper.xml 文件
在application.properties中添加mybatis的信息
#spring集成Mybatis环境
#pojo别名扫描包
mybatis.type-aliases-package=cn.star.domain
#加载Mybatis映射文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
在 java 目录下创建 controller:cn.star.controller.MybatisController
package cn.star.controller;
import cn.star.domain.User;
import cn.star.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
* 〈一句话功能简述〉
* 〈测试controller〉
*
* @author OneStar
* @create 2019/11/21
* @since 1.0.0
*/
@Controller
public class MybatisController {
@Autowired
private UserMapper userMapper;
@RequestMapping("/queryUser")
@ResponseBody
public List queryUser(){
List users = userMapper.queryUserList();
return users;
}
}
运行工程,查询到数据库中数据则整合成功!
SpringBoot 工程可以通过 SpringBootApplication 来启动,当然,也可以使用 Junit 测试来启动,来看一下 SpringBoot 是如何整合 Junit 的
使用 idea 快捷创建SpringBoot工程可以不用执行这一步骤,因为 idea 会自动给你在 pom.xml 中导入这个依赖
org.springframework.boot
spring-boot-starter-test
test
在 test 目录下的 java 文件夹下创建 MybatisTest 测试类:cn.star.MybatisTest
package cn.star;
import cn.star.domain.User;
import cn.star.mapper.UserMapper;
import org.junit.jupiter.api.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;
import java.util.List;
/**
* 〈一句话功能简述〉
* 〈Junit测试类〉
*
* @author OneStar
* @create 2019/11/21
* @since 1.0.0
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootmybatisApplication.class)
public class MybatisTest {
@Autowired
private UserMapper userMapper;
@Test
public void test() {
List users = userMapper.queryUserList();
System.out.println(users);
}
}
运行测试类可以看到数据库数据,说明整合成功!
使用 SpringBoot 整合 Redis 可以分为以下几个步骤
添加 Redis 的起步依赖
配置 Redis 的连接信息
编写测试类:注入RedisTemplate测试Redis操作
判断 Redis 中有没有数据
没有的就查询关系型数据库中获取数据
将数据转换成json格式字符串
在 pom.xml 中添加 Redis 的起步依赖
org.springframework.boot
spring-boot-starter-data-redis
在 application.properties 配置文件中添加配置 Redis 的连接信息
#Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
修改 MybatisTest 测试类,修改后如下:
package cn.star;
import cn.star.domain.User;
import cn.star.mapper.UserMapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
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.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
/**
* 〈一句话功能简述〉
* 〈Junit测试类〉
*
* @author OneStar
* @create 2019/11/21
* @since 1.0.0
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootmybatisApplication.class)
public class MybatisTest {
@Autowired
private UserMapper userMapper;
@Autowired
private RedisTemplate redisTemplate;
@Test
public void test() throws JsonProcessingException {
//List users = userMapper.queryUserList();
//System.out.println(users);
//从redis缓存中获得指定的数据
String userListData = redisTemplate.boundValueOps("user.findAll").get();
//如果redis中没有数据的话
if(null==userListData){
//查询数据库获得数据
List all = userMapper.queryUserList();
//转换成json格式字符串
ObjectMapper om = new ObjectMapper();
userListData = om.writeValueAsString(all);
//将数据存储到redis中,下次在查询直接从redis中获得数据,不用在查询数据库
redisTemplate.boundValueOps("user.findAll").set(userListData);
System.out.println("===============从数据库获得数据===============");
}else{
System.out.println("===============从redis缓存中获得数据===============");
}
System.out.println(userListData);
}
}
第一次运行是从数据库中获取数据,测试结果如下:
第二次运行时,由于已经从数据库中获取了数据并存入了 Redis 缓存中,测试结果如下: