SpringBoot 系列:
【SpringBoot 框架】- 入門——環境搭建、工程熱部署、idea快捷創建SpringBoot項目
【SpringBoot 框架】- SpringBoot 原理分析
【SpringBoot 框架】- SpringBoot 配置文件
【SpringBoot 框架】- SpringBoot 整合 Mybatis、Junit、Redis
目錄
零、前言
在我們的實際開發中,使用關係型數據庫可以方便的在一個表以及多個表之間做非常複雜的數據查詢,但是其查詢速率和拓展性遠不及NOSQL,這就不適合大規模數據集合多重數據種類的應用場景,尤其是大數據應用。因此,有些時候會將關係型數據庫和 NOSQL 結合起來使用,所以就使用 SpringBoot整合 Mybatis、Redis,Junit 是測試用的。整合步驟如下:
- 快捷創建 SpringBoot 工程
- SpringBoot 整合 Mybatis
- SpringBoot 整合 Junit
- SpringBoot 整合 Redis
一、SpringBoot 整合 Mybatis
1、快捷創建 SpringBoot 工程
【1】點擊:文件--->模塊,選擇 Spring Initializr,直接點擊下一個
【2】填寫相關選項,點擊下一個
【3】選擇 Web,然後點擊下一步
【4】保存路徑,點擊完成
2、添加Mybatis的起步依賴
在 pom.xml 中添加Mybatis的起步依賴
<!--mybatis起步依賴-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
3、添加數據庫驅動座標
在 pom.xml 中添加數據庫驅動座標
<!-- MySQL連接驅動 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
4、添加數據庫連接信息
在 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
5、創建數據庫
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', '兩顆星');
6、創建實體Bean
在java目錄下創建:cn.star.domain.User
package cn.star.domain;
/**
* 〈一句話功能簡述〉<br>
* 〈實體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 + '\'' +
'}';
}
}
7、編寫Mapper
在 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;
/**
* 〈一句話功能簡述〉<br>
* 〈mapper接口〉
*
* @author OneStar
* @create 2019/11/21
* @since 1.0.0
*/
@Mapper
public interface UserMapper {
public List<User> queryUserList();
}
8、配置映射關係
在 resources 文件夾下創建 mapper 目錄,在 mapper 目錄下創建 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="cn.star.mapper.UserMapper">
<select id="queryUserList" resultType="user">
select * from user
</select>
</mapper>
9、配置 mybatis 信息
在application.properties中添加mybatis的信息
#spring集成Mybatis環境
#pojo別名掃描包
mybatis.type-aliases-package=cn.star.domain
#加載Mybatis映射文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
10、編寫測試Controller
在 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;
/**
* 〈一句話功能簡述〉<br>
* 〈測試controller〉
*
* @author OneStar
* @create 2019/11/21
* @since 1.0.0
*/
@Controller
public class MybatisController {
@Autowired
private UserMapper userMapper;
@RequestMapping("/queryUser")
@ResponseBody
public List<User> queryUser(){
List<User> users = userMapper.queryUserList();
return users;
}
}
運行工程,查詢到數據庫中數據則整合成功!
二、SpringBoot 整合 Junit
SpringBoot 工程可以通過 SpringBootApplication 來啓動,當然,也可以使用 Junit 測試來啓動,來看一下 SpringBoot 是如何整合 Junit 的
1、添加Junit的起步依賴
使用 idea 快捷創建SpringBoot工程可以不用執行這一步驟,因爲 idea 會自動給你在 pom.xml 中導入這個依賴
<!--測試的起步依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2、編寫測試類
在 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;
/**
* 〈一句話功能簡述〉<br>
* 〈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<User> users = userMapper.queryUserList();
System.out.println(users);
}
}
運行測試類可以看到數據庫數據,說明整合成功!
三、SpringBoot 整合 Redis
使用 SpringBoot 整合 Redis 可以分爲以下幾個步驟
-
添加 Redis 的起步依賴
-
配置 Redis 的連接信息
-
編寫測試類:注入RedisTemplate測試Redis操作
-
判斷 Redis 中有沒有數據
-
沒有的就查詢關係型數據庫中獲取數據
-
將數據轉換成json格式字符串
- 將數據存儲到 Redis 中,下次在查詢直接從 Redis 中獲得數據,不用在查詢數據庫
-
1、添加 Redis 的起步依賴
在 pom.xml 中添加 Redis 的起步依賴
<!-- 配置使用redis啓動器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、配置 Redis 的連接信息
在 application.properties 配置文件中添加配置 Redis 的連接信息
#Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
3、注入 RedisTemplate 測試 Redis
修改 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;
/**
* 〈一句話功能簡述〉<br>
* 〈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<String, String> redisTemplate;
@Test
public void test() throws JsonProcessingException {
//List<User> users = userMapper.queryUserList();
//System.out.println(users);
//從redis緩存中獲得指定的數據
String userListData = redisTemplate.boundValueOps("user.findAll").get();
//如果redis中沒有數據的話
if(null==userListData){
//查詢數據庫獲得數據
List<User> 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 緩存中,測試結果如下: