最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot 2和Redis例子實(shí)現(xiàn)過(guò)程解析

 更新時(shí)間:2019年11月16日 16:02:14   作者:gdjlc  
這篇文章主要介紹了Spring Boot2發(fā)布與調(diào)用REST服務(wù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了Spring Boot2發(fā)布與調(diào)用REST服務(wù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Redis是一個(gè)key-value數(shù)據(jù)庫(kù),支持存儲(chǔ)的value類型包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。在Java中,使用較為廣泛的客戶端有Redisson、Jedis。Spring Data Redis模塊默認(rèn)使用Jedis。

開(kāi)發(fā)環(huán)境:IntelliJ IDEA 2019.2.2

Spring Boot版本:2.1.8

一、項(xiàng)目構(gòu)建

1、新建一個(gè)名稱為demo的Spring Boot項(xiàng)目。

2、pom.xml

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

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

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

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
    </dependency>

3、application.yml

配置Redis的相關(guān)屬性。

spring:
 redis:
  port: 6379
  password: 123456
  host: localhost

二、實(shí)體類

1、User.java

映射Redis的數(shù)據(jù):

(1) 類使用@RedisHash注解表示User對(duì)象會(huì)以hash類型保存;

(2) 字段id使用@Id注解表示自動(dòng)生成guid;

(3) 字段使用@Indexed表示建立索引,在方法名查詢時(shí)需要設(shè)置此注解;

package com.example.demo.entity;

import org.springframework.data.annotation.Id;
import org.springframework.data.redis.core.RedisHash;
import org.springframework.data.redis.core.index.Indexed;


@RedisHash("user")
public class User {
  @Id
  private String id;
  @Indexed
  private String name;
  @Indexed
  private Integer age;

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public Integer getAge() {
    return age;
  }

  public void setAge(Integer age) {
    this.age = age;
  }
}

三、數(shù)據(jù)訪問(wèn)層

1、數(shù)據(jù)訪問(wèn)層 UserRepository.java

繼承CrudRepository可以不需要任何實(shí)現(xiàn),擁有基本的CRUD操作。也可以手動(dòng)添加代碼實(shí)現(xiàn)方法名查詢。

package com.example.demo.repository;

import com.example.demo.entity.User;
import org.springframework.data.repository.CrudRepository;

import java.util.List;

public interface UserRepository extends CrudRepository<User,String> {

  //方法名查詢:根據(jù)字段name查詢
  List<User> findByName(String name);

  //方法名查詢:根據(jù)字段name和age的And查詢
  List<User> findByNameAndAge(String name, Integer age);

  //方法名查詢:根據(jù)字段name和age的Or查詢
  List<User> findByNameOrAge(String name, Integer age);
}

四、業(yè)務(wù)層

1、UserRepository.java

package com.example.demo.service;

import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

@Service
public class UserService {
  @Autowired
  UserRepository userRepository;

  public List<User> getUsers(){
    Iterable<User> users = userRepository.findAll();
    List<User> datas = new ArrayList<User>();
    for(Iterator<User> it = users.iterator(); it.hasNext();){
      User u = it.next();
      datas.add(u);
    }
    return datas;
  }

  public void save(User user) {
    userRepository.save(user);
  }

  public List<User> findByName(String name){
    return userRepository.findByName(name);
  }

  public List<User> findByNameAndAge(String name, Integer age){
    return userRepository.findByNameAndAge(name, age);
  }

  public List<User> findByNameOrAge(String name, Integer age){
    return userRepository.findByNameOrAge(name, age);
  }
}

五、控制器

1、UserController.java

package com.example.demo;

import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

@RestController
public class UserController {
  @Resource
  UserService userService;

  @RequestMapping("/save")
  public String save(){
    for(int i=1;i<=20;i++){
      User user = new User();
      user.setName("a" + i);
      user.setAge(i);
      userService.save(user);
    }
    return "添加成功";
  }

  @RequestMapping("/getUsers")
  public List<User> getUsers(){
    List<User> users = userService.getUsers();
    return users;
  }

  @RequestMapping("/findByName")
  public List<User> findByName(String name){
    return userService.findByName(name);
  }

  @RequestMapping("/findByNameAndAge")
  public List<User> findByNameAndAge(String name, Integer age){
    return userService.findByNameAndAge(name, age);
  }

  @RequestMapping("/findByNameOrAge")
  public List<User> findByNameOrAge(String name, Integer age){
    return userService.findByNameOrAge(name, age);
  }
}

啟動(dòng)服務(wù)器,瀏覽器訪問(wèn):http://localhost:8080/save 生成20條測(cè)試數(shù)據(jù),訪問(wèn)http://localhost:8080/getUsers,頁(yè)面顯示如下:

[{"id":"8da6f5ad-b24c-4725-9c69-4d709369eac7","name":"a14","age":14},{"id":"b62b2028-4d41-41be-aeff-e2b56776dd87","name":"a10","age":10},{"id":"c8330a2a-902b-4db9-b262-65d182027eac","name":"a6","age":6},{"id":"cc7b5a91-0ca6-4577-891a-835a1cebef6f","name":"a11","age":11},{"id":"09f8f2e3-2cf8-48f7-a535-1897b7cc0f35","name":"a1","age":1},{"id":"3344413f-8128-42ad-8343-304005c87e5f","name":"a7","age":7},{"id":"db74f020-f3e3-4422-8013-c515b9d8551d","name":"a5","age":5},{"id":"7fc46621-ecaf-47c6-bae3-f2061104d802","name":"a2","age":2},{"id":"dcdcdda0-bab0-450a-b6e6-fdce410b01fd","name":"a8","age":8},{"id":"b456f4fd-158f-43e9-86cf-0340b809ffab","name":"a12","age":12},{"id":"4ffb6019-21b1-4880-8ec3-2703f561d028","name":"a15","age":15},{"id":"7e45d738-7a31-4b24-928e-a9da3583ef6d","name":"a4","age":4},{"id":"7992e502-4049-4d40-bc35-aab72adbe335","name":"a19","age":19},{"id":"3df7b2ac-6bb0-496d-91d2-05ac763e5f68","name":"a13","age":13},{"id":"7c94edba-f91e-42fe-b8b4-7c6a9ba82747","name":"a3","age":3},{"id":"39402099-17ba-4368-ac23-dd5e9fe1d8ae","name":"a17","age":17},{"id":"e49750d6-ce80-4764-87d3-1566d9263360","name":"a18","age":18},{"id":"499e1a9a-b947-4eec-8d37-d1cdf7ac1179","name":"a16","age":16},{"id":"04f0cb4e-c17b-4b4e-b135-e6c222aace21","name":"a9","age":9},{"id":"ac48ce35-5a38-48b8-90b9-6b999c3fd242","name":"a20","age":20}]

其它控制器方法略。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot跨域Jsonp和Cors的方法

    SpringBoot跨域Jsonp和Cors的方法

    這篇文章主要介紹了SpringBoot跨域Jsonp和Cors的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • java判斷中文字符串長(zhǎng)度的簡(jiǎn)單實(shí)例

    java判斷中文字符串長(zhǎng)度的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇java判斷中文字符串長(zhǎng)度的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • 使用IDEA進(jìn)行安卓開(kāi)發(fā)的詳細(xì)圖文教程

    使用IDEA進(jìn)行安卓開(kāi)發(fā)的詳細(xì)圖文教程

    安卓開(kāi)發(fā)本身就是Java開(kāi)發(fā)的一個(gè)分支,我們要確保計(jì)算機(jī)已經(jīng)安裝好JDK并做好了相關(guān)的配置,下面這篇文章主要給大家介紹了關(guān)于如何使用IDEA進(jìn)行安卓開(kāi)發(fā)的詳細(xì)圖文教程,需要的朋友可以參考下
    2023-04-04
  • 一篇文章帶你詳解Spring的概述

    一篇文章帶你詳解Spring的概述

    這篇文章主要為大家介紹了Spring的概述,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • Logback配置文件這么寫(xiě),還說(shuō)你不會(huì)整理日志?

    Logback配置文件這么寫(xiě),還說(shuō)你不會(huì)整理日志?

    logback框架會(huì)默認(rèn)加載classpath下命名為logback-spring.xml或logback.xml的配置文件。這篇文章主要介紹了Logback配置文件寫(xiě)法,需要的朋友可以參考下
    2020-07-07
  • SpringBoot+MyBatis+AOP實(shí)現(xiàn)讀寫(xiě)分離的示例代碼

    SpringBoot+MyBatis+AOP實(shí)現(xiàn)讀寫(xiě)分離的示例代碼

    高并發(fā)這個(gè)階段,肯定是需要做MySQL讀寫(xiě)分離的。本文主要介紹了SpringBoot+MyBatis+AOP實(shí)現(xiàn)讀寫(xiě)分離的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 深入理解JVM之Class類文件結(jié)構(gòu)詳解

    深入理解JVM之Class類文件結(jié)構(gòu)詳解

    這篇文章主要介紹了深入理解JVM之Class類文件結(jié)構(gòu),結(jié)合實(shí)例形式詳細(xì)分析了Class類文件結(jié)構(gòu)相關(guān)概念、原理、結(jié)構(gòu)、常用方法與屬性,需要的朋友可以參考下
    2019-09-09
  • SpringBoot整合Thymeleaf的方法

    SpringBoot整合Thymeleaf的方法

    這篇文章主要介紹了SpringBoot整合Thymeleaf的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下,希望能夠幫助到你
    2021-07-07
  • Java多線程編程中的線程死鎖的問(wèn)題解決

    Java多線程編程中的線程死鎖的問(wèn)題解決

    線程死鎖是多線程編程中的一個(gè)常見(jiàn)問(wèn)題,它發(fā)生在多個(gè)線程互相等待對(duì)方釋放資源的情況下,導(dǎo)致程序無(wú)法繼續(xù)執(zhí)行,本文就來(lái)介紹一下Java多線程編程中的線程死鎖的問(wèn)題解決,感興趣的可以了解一下
    2023-08-08
  • Java類加載之Class對(duì)象到Klass模型詳解

    Java類加載之Class對(duì)象到Klass模型詳解

    這篇文章主要介紹了Java類加載之Class對(duì)象到Klass模型詳解,每一個(gè)Java類在JVM中都會(huì)對(duì)應(yīng)創(chuàng)建一個(gè)C++類實(shí)例,我們稱這個(gè)C++類為Klass實(shí)例,Klass實(shí)例里面存儲(chǔ)了java類中所描述的方法、字段、屬性等,需要的朋友可以參考下
    2023-08-08

最新評(píng)論

淳安县| 黑河市| 诸城市| 定陶县| 景洪市| 秦安县| 临武县| 将乐县| 司法| 兰考县| 利辛县| 嵊州市| 荔波县| 宜兴市| 江津市| 阿图什市| 柳河县| 大连市| 施秉县| 金川县| 延庆县| 玛曲县| 玉林市| 红原县| 富锦市| 柏乡县| 磴口县| 梅河口市| 丰台区| 东阳市| 梅河口市| 陆河县| 连州市| 措美县| 上犹县| 新和县| 灵山县| 历史| 房产| 宁武县| 洪洞县|