springboot整合Mybatis、JPA、Redis的示例代码

引言

在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);
  }
}

效果:

证明整合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);
  }

这样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());
  }

所以如果不想使用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);
  }

可以看到我们直接用的 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);
    }
  }

我们在看看redis 数据库。

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

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

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

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

总结

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

到此这篇关于springboot整合Mybatis、JPA、Redis的示例代码的文章就介绍到这了,更多相关springboot整合Mybatis、JPA、Redis内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot中使用Redis的完整实例

    一.在SpringBoot中使用Redis的一套军体拳 1.导包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.2.0.RELEASE</version> </dependency> 2.导入工具类 packag

  • SpringBoot中使用redis做分布式锁的方法

    一.模拟问题 最近在公司遇到一个问题,挂号系统是做的集群,比如启动了两个相同的服务,病人挂号的时候可能会出现同号的情况,比如两个病人挂出来的号都是上午2号.这就出现了问题,由于是集群部署的,所以单纯在代码中的方法中加锁是不能解决这种情况的.下面我将模拟这种情况,用redis做分布式锁来解决这个问题. 1.新建挂号明细表 2.在idea上新建项目 下图是创建好的项目结构,上面那个parent项目是其他项目不用管它,和新建的没有关系 3.开始创建controller,service,dao(mapp

  • SpringBoot如何整合redis实现过期key监听事件

    可以用于简单的过期订单取消支付.7天自动收货场景中 1.Spring Boot整合redis 参考 https://www.jb51.net/article/170687.htm 2.打开redis服务的配置文件添加notify-keyspace-events Ex 如果是注释了,就取消注释 Linux安装redis:https://www.jb51.net/article/193265.htm Windows安装redis:https://www.jb51.net/article/176040

  • springboot +redis 实现点赞、浏览、收藏、评论等数量的增减操作

    springboot +redis 实现点赞.浏览.收藏.评论等数量的增减操作 前言 第一次写博客,记录一下: 最近做了一个帖子的收藏.点赞数量的功能,其实之前也做过类似的功能,因为之前一直使用的mysql 总是感觉对于这种频繁需要改变的值,不应该给予Mysql过大的压力,本文章采用的是redis 做了持久化.下面贴出关键代码:DataResponse是项目中使用的结果封装实体类:forumDTO是此功能的参数实体,如果有需要请留言. 常量如下: private static final Str

  • 详解SpringBoot Redis自适应配置(Cluster Standalone Sentinel)

    核心代码段 提供一个JedisConnectionFactory  根据配置来判断 单点 集群 还是哨兵 @Bean @ConditionalOnMissingBean public JedisConnectionFactory jedisConnectionFactory() { JedisConnectionFactory factory = null; String[] split = node.split(","); Set<HostAndPort> nodes =

  • Springboot整合Redis最简单例子分享

    1. 编写目的 最简单的例子,Springboot整合Redis. 2. 详细过程 pom 文件添加依赖 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr

  • SpringBoot2.3整合redis缓存自定义序列化的实现

    1.引言 我们使用redis作为缓存中间件时,当我们第一次查询数据的时候,是去数据库查询,然后查到的数据封装到实体类中,实体类会被序列化存入缓存中,当第二次查数据时,会直接去缓存中查找被序列化的数据,然后反序列化被我们获取.我们在缓存中看到的序列化数据不直观,如果想看到类似json的数据格式,就需要自定义序列化规则. 2.整合redis pom.xml: <!--引入redis--> <dependency> <groupId>org.springframework.d

  • 多个SpringBoot项目采用redis实现Session共享功能

    有时我们可能有多个不同的Web应用,可以相互调用,这时如果每个应用都有自己的session,那用户跳转到另一个应用时就又需要登陆一次,这样会带来很不好的体验,因此我们需要在不同的应用中共享session.这里,我们采用redis来实现. 前置说明 由于只用到redis和springboot的整合,所以只能实现一个URL下的不同端口的应用之间的session共享,如果连应用名称都完全不同的两个应用要实现session共享,在这个基础上还需要使用到Nginx,这种方式我暂时还没有试过.(Spring

  • SpringBoot整合Shiro和Redis的示例代码

    demo源码 此demo用SpringBoot+Shiro简单实现了登陆.注册.认证.授权的功能,并用redis做分布式缓存提高性能. 1.准备工作 导入pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XM

  • SpringBoot整合Mybatis注解开发的实现代码

    官方文档: https://mybatis.org/mybatis-3/zh/getting-started.html SpringBoot整合Mybatis 引入maven依赖 (IDEA建项目的时候直接选就可以了) <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <ve

  • SpringBoot整合Netty实现WebSocket的示例代码

    目录 一.pom.xml依赖配置 二.代码 2.1.NettyServer 类 2.2.SocketHandler 类 2.3.ChannelHandlerPool 类 2.4.Application启动类 三.测试 一.pom.xml依赖配置 <!-- netty --> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <v

  • SpringBoot整合Druid、Redis的示例详解

    目录 1.整合Druid 1.1Druid简介 1.2添加上 Druid 数据源依赖 1.3使用Druid 数据源 2.整合redis 2.1添加上 redis依赖 2.2yml添加redis配置信息 2.3 redis 配置类 1.整合Druid 1.1Druid简介 Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池. Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0.DBCP 等 DB 池的优点,同时加入了日志监控. Druid

  • SpringBoot整合Elasticsearch游标查询的示例代码(scroll)

    游标查询(scroll)简介 scroll 查询 可以用来对 Elasticsearch 有效地执行大批量的文档查询,而又不用付出深度分页那种代价. 游标查询会取某个时间点的快照数据. 查询初始化之后索引上的任何变化会被它忽略. 它通过保存旧的数据文件来实现这个特性,结果就像保留初始化时的索引 视图 一样. 启用游标查询可以通过在查询的时候设置参数 scroll 的值为我们期望的游标查询的过期时间. 游标查询的过期时间会在每次做查询的时候刷新,所以这个时间只需要足够处理当前批的结果就可以了,而不

  • SpringBoot整合分布式锁redisson的示例代码

    目录 1.导入maven坐标 2.redisson配置类(如果redis没有密码就不需要private String password) 3.创建redisson的bean 4.测试,入队 5.测试,出队 6.分布式锁 1.导入maven坐标 <!-- 用redisson作为所有分布式锁,分布式对象等功能框架--> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson&

  • springBoot整合RocketMQ及坑的示例代码

    版本: JDK:1.8 springBoot:1.5.10 rocketMQ:4.2.0 pom 配置: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.10.RELEASE</version> </parent> <d

  • springboot整合Mybatis、JPA、Redis的示例代码

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

  • Springboot整合mybatis开启二级缓存的实现示例

    目录 前言 mybatis 一级缓存和二级缓存的概念 pom引入依赖 application.properties 文件配置 mapper.xml 文件配置 cache-ref 完整示例代码 踩坑 参考资料 前言 下面大部分内容来源于网上的相关帖子和官网,自己简单写了个demo体验了下,个人感觉mybatis的缓存并不是很合适 查询做缓存时,遇到更新操作就会刷新缓存,尤其是多表查询时,就会很难控制.对于那些需要缓存的热数据应该抽出来放到redis上做. mybatis 一级缓存和二级缓存的概念

  • SpringBoot整合Mybatis Generator自动生成代码

    目录 1.创建SpringBoot项目 2. mybatis-generator-maven插件的配置 3. 项目结构构建 4. application.yml配置 5. generatorConfig.xml配置 7. 选择 Mybatis Generator 启动,自动在dao.entity.mapper包下生成代码 Mybatis是目前主流的ORM框架,相比于hibernate的全自动,它是半自动化需要手写sql语句.接口.实体对象,后来推出的Generator自动生成代码,可以帮我们提高

随机推荐