springboot 整合 Mybatis、JPA、Redis「建议收藏」

springboot 整合 Mybatis、JPA、Redis「建议收藏」引言在springboot项目中,我们是用ORM框架来操作数据库变的非常方便。下面我们分别整合mysql,springdatajpa以及redis。让我们感受下快车道。我们首先创建一个springboot项目,创建好之后,我们来一步步的实践。使用mybatis引入依赖:<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

引言

在springboot 项目中,我们是用ORM 框架来操作数据库变的非常方便。下面我们分别整合mysql ,spring data jpa 以及redis 。让我们感受下快车道。

我们首先创建一个springboot 项目,创建好之后,我们来一步步的实践。

使用mybatis

引入依赖

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.1</version>
</dependency>

增加配置

application.properties 中增加连接数据库的配置。

# Mysql数据库连接配置 : com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456

创建sql

接下来,我们创建sql 语句。方便我们后面测试吧。

# 创建数据库
CREATE DATABASE springbootdata;
# 选择使用数据库
USE springbootdata;
# 创建表t_article并插入相关数据
DROP TABLE IF EXISTS t_article;
CREATE TABLE t_article (
id int(20) NOT NULL AUTO_INCREMENT COMMENT '文章id',
title varchar(200) DEFAULT NULL COMMENT '文章标题',
content longtext COMMENT '文章内容',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
INSERT INTO t_article VALUES ('1', 'Spring Boot基础入门', '从入门到精通讲解...');
INSERT INTO t_article VALUES ('2', 'Spring Cloud基础入门', '从入门到精通讲解...');
# 创建表t_comment并插入相关数据
DROP TABLE IF EXISTS t_comment;
CREATE TABLE t_comment (
id int(20) NOT NULL AUTO_INCREMENT COMMENT '评论id',
content longtext COMMENT '评论内容',
author varchar(200) DEFAULT NULL COMMENT '评论作者',
a_id int(20) DEFAULT NULL COMMENT '关联的文章id',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
INSERT INTO t_comment VALUES ('1', '很全、很详细', 'luccy', '1');
INSERT INTO t_comment VALUES ('2', '赞一个', 'tom', '1');
INSERT INTO t_comment VALUES ('3', '很详细', 'eric', '1');
INSERT INTO t_comment VALUES ('4', '很好,非常详细', '张三', '1');
INSERT INTO t_comment VALUES ('5', '很不错', '李四', '2');

创建实体

再接下来,我们需要创建 一个实体类,我们就创建一个 t_comment 表对应的实体类吧。


public class Comment {
private Integer id;  //评论id
private String content; //评论内容
private String author; //评论作者
private Integer aId; //外键:表示当前这条评论是属于那篇文章
//getter()/setter()

创建mapper

上面都做好后,我们当然是来创建一个mapper 接口,来操作数据库啦,这里我们来一个最简单的,使用注解的方式。

//标识该接口是mybatis的接口文件,并且让springboot能够扫描到该接口,生成该接口的代理对象,存到容器中
@Mapper
public interface CommentMapper {
//根据id查询对应评论信息
@Select("select * from t_comment where id = #{id}")
Comment findById(Integer id);
}

创建测试

上面这样其实就已经完成了springboot 与mybatis 的整合,我们接下来测试一下。

在pom.xml 文件中引入:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<scope>test</scope>
</dependency>

在测试类中编写:

@RunWith(SpringRunner.class)
@SpringBootTest
class SpringbootQuickstartApplicationTests {
@Autowired
private CommentMapper commentMapper;
@Test
void contextLoads() {
Comment comment = commentMapper.findById(1);
System.out.println(comment);
}
}

效果:

springboot 整合 Mybatis、JPA、Redis「建议收藏」
证明整合mybatis 是成功的。是不是很简单,只用引入一个starter 就可以正常使用mybatis 的功能。

基于xml 方式

上面的是基于注解的,我们也可以基于xml。我们在mapper 中不写sql ,而放到xml 中编写。这里 ArticleMapper 为例

@Mapper
public interface ArticleMapper {
//根据id查询对应的文章
public Article selectArticle(Integer id);
}

对应的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.quellanan.springbootquickstart.mapper.ArticleMapper">
<select id="selectArticle" parameterType="int" resultType="article">
select * from t_article where id = #{id}
</select>
</mapper>

这里我们需要在配置文件中指定我们mapper.xml 的位置,如果不指定,就需要和mapper 同目录才行。resultType 可以在配置文件中指定别名。

#开启驼峰命名匹配映射mapper
mybatis.configuration.map-underscore-to-camel-case=true
#配置mybatis的xml映射配置文件路径
mybatis.mapper-locations=classpath:mapper/*.xml
#配置mybatis映射配置文件中实体类别名
mybatis.type-aliases-package=cn.quellanan.springbootquickstart.pojo

我们再写个测试方法测试下。

@Autowired
private ArticleMapper articleMapper;
@Test
public void selectArticle(){
Article article = articleMapper.selectArticle(1);
System.out.println(article);
}

image-20200617155958167

这样springboot 整合mybatis 基本的就ok 啦。

使用jpa

上面我们springboot整个mybatis 需要自己写sql ,接下来我们偷偷懒,整合一下springData JPA。之前说过,springboot data jpa 是一种规范,必须使用实现这种规范的框架,所以前面用了 hibernate 。但是在springboot 中就不用这么麻烦啦,也不用引入 hibernate 相关的jar .我们也可以使用。下面我们来看看。

引入依赖

第一步还是需要在pom 文件中引入依赖。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

建立实体类和表的关系

引入依赖后,我们需要将实体类和表以及表属性建立联系。我们还是以 Comment 这个类。进行修改。

@Entity
@Table(name = "t_comment")
public class Comment {
@Id //表明映射主键id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;  //评论id
private String content; //评论内容
private String author; //评论作者
@Column(name = "a_id")
private Integer aId; //外键:表示当前这条评论是属于那篇文章
//getter()/setter()
}
  • 首先需要 @Entity 标识这个实体类,可以被处理
  • @Table() 注解指定数据库对应的表名
  • @Id 用来指定表的主键。
  • @GeneratedValue() 用来指定主键的类型
  • @Column 用来指定这个属性对应的表的列名,如果类属性和表列名一致可不指定,不一致就需要指定。

创建一个接口

我们接下来创建一个接口来使用它,继承JpaRepository 。有两个参数,第一个参数是是对应的实体类对象,第二个参数主键数据类型。

public interface CommentRepository extends JpaRepository<Comment, Integer> {
}

测试

接下来,我们就可以进行测试啦

@Autowired
private CommentRepository commentRepository;
@Test
public void selectComment(){
Optional<Comment> byId = commentRepository.findById(1);
System.out.println(byId.get());
}

springboot 整合 Mybatis、JPA、Redis「建议收藏」

所以如果不想使用mybatis ,那springboot 整合jpa 也是一种不错的选择。

使用redis

上面不管是mybatis 还是 springdatajpa 都是基于关系型数据库操作的,我们上面操作的就是mysql 数据库。现在redis 也经常在项目中使用,那springboot 整合使用redis 也很方便。

引入依赖

一样的,我们首先需要引入依赖。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置redis 连接信息

在application.propertis 中增加redis 的相关配置

#redis服务器地址
spring.redis.host=127.0.0.1
#redis服务器连接端口
spring.redis.port=6379
#redis服务器连接密码
spring.redis.password=

其实到现在,我们就已经整合好了,可以在项目中操作redis 数据库啦。

我们来写一个测试方法,分别是插入和查找。

@Autowired
private StringRedisTemplate redisTemplate;
@Test
public void insert(){
redisTemplate.opsForValue().set("quellanan","程序员爱酸奶");
}
@Test
public void select(){
String quellanan = redisTemplate.opsForValue().get("quellanan");
System.out.println(quellanan);
}

springboot 整合 Mybatis、JPA、Redis「建议收藏」

springboot 整合 Mybatis、JPA、Redis「建议收藏」
可以看到我们直接用的 StringRedisTemplate 。这个就相当于 JdbcTemplate 操作数据库一样。兄弟们现在明白了吧,相当于是没有使用mybatis 或者jpa 这些框架,而是简单粗暴的操作数据库了。

现在很多公司使用数据库也是直接使用 StringRedisTemplate 或者 RedisTemplate 来操作的redis 的数据库的,因为基于redis 的持久层框架还不流行。当然我们也可以使用,接下来我们来点骚的。

创建一个实体类。

@RedisHash(value = "persons") //指定实体类对象在redis中的存储空间
public class Person {
@Id // 用来标识实体类主键  字符串形式的hashkey标识唯一的实体类对象id
private String id;
@Indexed // 用来标识对应属性在redis中生成二级索引
private String firstname;
@Indexed
private String lastname;
private Address address;
}
  • @RedisHash 用来指定类的储存类型,这里使用的的是RedisHash 表示在数据库中使用hash 存储。值得注意的是只有@RedisHash 这个注解来作用于实体类上,这个persons 更像是文件夹,key 的前缀。
  • @Id 表明主键,其实就是redis 中hash 结构的和前缀组成 key
  • @Indexed,用来标识redis 数据库生成二级索引,方便条件查询,一样的和前缀以及属性名组成key。

创建一个接口。

这里继承的是CrudRepository 。并且也是基于jpa 范式的,感兴趣的可以试试。

public interface PersonRepository extends CrudRepository<Person, String> {
// 根据城市信息查询对应的人
List<Person> findByAddress_City(String name);
}

测试方法。

我们接下来,写一个测试方法。

	@Autowired
private PersonRepository personRepository;
@Test
public void savePerson(){
Person person = new Person();
person.setFirstname("张");
person.setLastname("三");
Address address = new Address();
address.setCity("北京");
address.setCountry("中国");
person.setAddress(address);
// 向redis数据库中添加了数据
personRepository.save(person);
}
@Test
public void selectPerson(){
List<Person> list = personRepository.findByAddress_City("北京");
for (Person person : list) {
System.out.println(person);
}
}

image-20200617170016290

我们在看看redis 数据库。

image-20200617170128929

springboot 整合 Mybatis、JPA、Redis「建议收藏」

我们在来看下。这些key 都是什么类型存储的。除了key 为persons:916b5570-5c7f-4a96-b25f-98c9a2f1f43e 是hash 其他的都是set

image-20200617172445543

springboot 整合 Mybatis、JPA、Redis「建议收藏」

说明我们创建的索引,都是使用set 来存储的,并且这些索引只是存放了一个key 值,也就是我们真正存数据的地方。

而 persons:916b5570-5c7f-4a96-b25f-98c9a2f1f43e:idx 存放的是其他索引的key .

image-20200617172723012

这样我们也可以通过jpa 这种操作特别是比较负责的对象,我们也能很好的处理啦。

总结

到这就结束啦,知道在springboot 中怎么是用mybatis,spring data jpa,redis 就可以啦。

image-20200611183827618

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/179845.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • CSS行高line-height的理解建议收藏

    一、行高的字面意思“行高“顾名思义指一行文子的高度。具体来说是指两行文子间基线间的距离。基线是在英文字母中用到的一个概念,我们刚学英语的时候使用到的那个英语本子每行有4条线,其中底部第二条线就是基线,

    2021年12月20日
  • idea热部署(JRebel实现)

    idea热部署(JRebel实现)idea热部署(JRebel实现)1.安装JRebel插件//1.File->Settings->Plugins->搜索JRebel插件//2.搜索的时候可能任何插件都搜索不到,可以百度查找设置httpProxy配置配置JRebel插件//1.在左下角的JRebel菜单栏找到JRebel插件然后将需要热更新的项目打上对勾即可。启动项目//1.配置完成后使用JRebel按钮进行启动项目,配置成功日志框中会显示JRebel相关的日志信息。

  • BurpSuite系列(五)—-Intruder模块(暴力激活成功教程)「建议收藏」

    BurpSuite系列(五)—-Intruder模块(暴力激活成功教程)「建议收藏」一、简介BurpIntruder是一个强大的工具,用于自动对Web应用程序自定义的攻击,BurpIntruder是高度可配置的,并被用来在广范围内进行自动化攻击。你可以使用BurpIntruder方便地执行许多任务,包括枚举标识符,获取有用数据,漏洞模糊测试。合适的攻击类型取决于应用程序的情况,可能包括:缺陷测试:SQL注入,跨站点脚本,缓冲区溢出,路径遍历;暴力攻击认证

  • Python之namedtuple源码分析建议收藏

    namedtuple函数源码通过函数模板字符串_class_template.format()会生成我们需要的实例类:eg:people=namedtuple("person&qu

    2021年12月19日
  • php反射类ReflectionClass用法实例详解

    php反射类ReflectionClass用法实例详解这篇文章主要介绍了php反射类ReflectionClass用法,结合实例形式较为详细的分析了php反射类的概念、功能与具体使用方法,需要的朋友可以参考下本文实例讲述了php反射类Reflectio

  • [4G+5G专题-137]: 终端 – 射频前端(滤波器、功率放大器)详解

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客本文网址:目录第1章射频前端FEM概述第2章滤波器2.1滤波概述2.2SAW:成熟且仍在发展2.3高性能BAW2.4器件市场分析第3章功率放大器3.1功率放大器概述3.2市场格局第1章射频前端FEM概述射频前端聚焦的是调制后的高频(射频)电磁波的功率和带宽。带宽的控制是由滤波器完成的。功率的控制是由PA完成的第2章…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号