spring整合mybatis Redis mybiats-pluse mybist-public整合redis

<!--spring整合mybatis登录-->

pojo层

<span style="background-color:#f8f8f8"><span style="color:#333333">package com.xinzhi.pojp;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data//可以减少样板代码的编写量。(如get,set就就不用写了)
@AllArgsConstructor//强制生成一个无参构造函数,
@NoArgsConstructor//生成一个包含所有参数的构造函数
@Builder//创建对象的
public class User {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private String phone;
}</span></span>

mapper(里面写接口)

<span style="background-color:#f8f8f8"><span style="color:#333333">package com.xinzhi.mapper;
​
import com.xinzhi.pojp.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
​
import java.util.List;
​
@Mapper
public interface UserMapper {
    List<User> select (@Param("username") String username, @Param("password") String password, @Param("age") Integer age, @Param("phone") String phone);
    int insdrt (User user);
    int delete(User user);
    int update (@Param("id") Integer id,@Param("username") String usernane, @Param("password") String password, @Param("age") Integer age, @Param("phone") String phone);
}
​</span></span>

service

service接口

<span style="background-color:#f8f8f8"><span style="color:#333333">package com.xinzhi.service;
​
import com.xinzhi.pojp.User;
import com.xinzhi.utils.Result;
​
import java.util.List;
import java.util.Random;
​
public interface IUserService {
//登录
    List<User> select (String username, String password, Integer age, String phone);
    //注册
   Result insert (User user);
   //查询
   Result delete(User user);
   修改
    Result update(Integer id,String username, String password, Integer age, String phone);
}</span></span>

impl

业务层

<span style="background-color:#f8f8f8"><span style="color:#333333">package com.xinzhi.service.impl;
​
import com.xinzhi.mapper.UserMapper;
import com.xinzhi.pojp.User;
import com.xinzhi.service.IUserService;
import com.xinzhi.utils.Result;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
​
import javax.annotation.Resource;
import java.util.List;
@Service//负责处理业务逻辑
public class UserServiceImpl implements IUserService {//重写
    @Resourced//Spring框架中用于依赖注入的注解
    private UserMapper userMapper;
    @Override//Spring框架中用于依赖注入的注解
    public List<User> select(String username, String password, Integer age, String phone) {
        List<User> select = userMapper.select( username,password,age, phone);
        用userMapper.select( username,password,age, phone)接收service接口然后。var接收一下会返回一个 List<User> select
        return select;//让后返回一下接收的值selecct接收一下会返回一个
    }
​
    @Override
    public Result insert(User user) {//重写
        int insdrt = userMapper.insdrt(user);
         userMapper.mapper层去接收service里的接口insdrt(user).var接收一下会返回一个值
        return insdrt!= 0 ? Result.ok("增加成功") : Result.error("增加失败");
    }
​
    @Override
    public Result delete(User user) {//重写
        int delete = userMapper.delete(user);
        return delete !=0 ? Result.ok("删除成功") : Result.error("删除失败");
    }
​
    @Override
    public Result update( Integer id,String username, String password, Integer age, String phone) {//重写
        int update = userMapper.update(id,username,password,age, phone);
        return update !=0 ? Result.ok("修改成功") : Result.error("修改失败");
    }
}
​</span></span>

controlle

<span style="background-color:#f8f8f8"><span style="color:#333333">package com.xinzhi.controller;
​
import com.xinzhi.pojp.User;
import com.xinzhi.service.IUserService;
import com.xinzhi.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
​
import java.util.List;
@RestController使用 @PostMapping 注解来处理 POST 请求
public class UserController {
    @Autowired
    private IUserService iUserService;//调用service中的接口
    @GetMapping("/select")//路径
    public List<User> select( String username, String password, Integer age, String phone){
        List<User> select = iUserService.select( username,  password , age,phone);
        return select;
    }
    @PostMapping("/insert")//路径
    public Result insert ( @RequestBody User user){
        Result insert = iUserService.insert(user);//service中接口起的名字去接收接口然后。var接收一个值
        return insert;//返回接收的那个值
    }
    @PostMapping("/detele")//路径
    public  Result delete(User user){
        Result delete = iUserService.delete(user);
        return delete;
    }
    @PostMapping("/update")//路径
    public Result update(Integer id, String username, String password, Integer age, String phone){
        Result update = iUserService.update(id, username,  password , age,phone);
        return update;
    }
}
​</span></span>

工具类 utlis

<span style="background-color:#f8f8f8"><span style="color:#333333">package com.xinzhi.utils;
​
public class Result<T>  {
​
    private static final long serialVersionUID = 1L;
​
    /**
     * 成功标志
     */
    private boolean success = true;
​
    /**
     * 返回处理消息
     */
    private String message = "操作成功!";
​
    /**
     * 返回代码
     */
    private Integer code = 0;
    
    /**
     * 返回数据对象 data
     */
    private T result;
​
    public static long getSerialVersionUID() {
        return serialVersionUID;
    }
​
    public boolean isSuccess() {
        return success;
    }
​
    public void setSuccess(boolean success) {
        this.success = success;
    }
​
    public String getMessage() {
        return message;
    }
​
    public void setMessage(String message) {
        this.message = message;
    }
​
    public Integer getCode() {
        return code;
    }
​
    public void setCode(Integer code) {
        this.code = code;
    }
​
    public T getResult() {
        return result;
    }
​
    public void setResult(T result) {
        this.result = result;
    }
​
    public long getTimestamp() {
        return timestamp;
    }
​
    public void setTimestamp(long timestamp) {
        this.timestamp = timestamp;
    }
​
    /**
     * 时间戳
     */
    private long timestamp = System.currentTimeMillis();
​
    public Result() {
        
    }
    
    public Result<T> success(String message) {
        this.message = message;
        this.code = 200;
        this.success = true;
        return this;
    }
    
    
    public static Result<Object> ok() {
        Result<Object> r = new Result<Object>();
        r.setSuccess(true);
        r.setCode(200);
        r.setMessage("成功");
        return r;
    }
    
    public static Result<Object> ok(String msg) {
        Result<Object> r = new Result<Object>();
        r.setSuccess(true);
        r.setCode(200);
        r.setMessage(msg);
        return r;
    }
    
    public static Result<Object> ok(Object data) {
        Result<Object> r = new Result<Object>();
        r.setSuccess(true);
        r.setCode(200);
        r.setResult(data);
        return r;
    }
    
    public static Result<Object> error(String msg) {
        return error(500, msg);
    }
    
    public static Result<Object> error(int code, String msg) {
        Result<Object> r = new Result<Object>();
        r.setCode(code);
        r.setMessage(msg);
        r.setSuccess(false);
        return r;
    }
​
    public Result<T> error500(String message) {
        this.message = message;
        this.code = 500;
        this.success = false;
        return this;
    }
    /**
     * 无权限访问返回结果
     */
    public static Result<Object> noauth(String msg) {
        return error(555, msg);
    }
}
​</span></span>

sql语句

<span style="background-color:#f8f8f8"><span style="color:#333333"><?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="com.xinzhi.mapper.IRegisterMapper">
    <insert id="register">
        insert into register(id,root, password, IReginster,sex) values (0,#{root},#{password},#{IReginster},#{sex});
    </insert>
    <update id="amend">
       update register
        <set>//动态修改
            <if test="root !=null and root!=''">
                root=#{root},
            </if>
            <if test="password !=null and password!=''">
                password=#{password},
            </if>
            <if test="IReginster !=null and IReginster!=''">
                IReginster=#{IReginster},
            </if>
            <if test="age !=null and age!=''">
                age=#{age},
            </if>
            <if test="sex !=null and sex!=''">
                sex=#{sex}
            </if>
        </set>
        where id=#{id}
    </update>
 //登录
    <select id="log" resultType="com.xinzhi.pojo.Register">
        select id, root, password, IReginster,age,sex from register where root=#{root} and password=#{password};
    </select>
    //查询
    <select id="examine" resultType="com.xinzhi.pojo.Register">
        select *from register
    </select>
</mapper>
​</span></span>

<!--**mybiats-pluse**-->

pojo

<span style="background-color:#f8f8f8"><span style="color:#333333">package com.xinzhi.pojo;
​
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data//
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private String phone;
}</span></span>

mapper

<span style="background-color:#f8f8f8"><span style="color:#333333">public interface  IUserMapper extends BaseMapper<User>{
}
//extends BaseMapper<User>继承了mybiats-pluse的接口</span></span>

测试类

<span style="background-color:#f8f8f8"><span style="color:#333333">package com.xinzhi;
​
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xinzhi.mapper.IUserMapper;
import com.xinzhi.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
​
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
​
@SpringBootTest
class Public0407ApplicationTests {
    User user = new User();声明一个变量
    @Resource
    private IUserMapper iUserMapper;把mapper层和这个层连接在一起
​
    @Test
    void contextLoads() {
        user.setId(26);
        user.setUsername("李将");
        user.setPassword("1258");
        user.setAge(20);
        user.setPhone("123456");
        int insert = iUserMapper.insert(user);
        System.out.println(insert);
    }
    @Test
    void update(){
        System.out.println("修改语句");
        user.setId(22);
        user.setUsername("李宇");
        user.setPassword("1258");
        user.setAge(19);
        user.setPhone("123456");
        int i = iUserMapper.updateById(user);
        System.out.println(i);
    }
    //根据id查询
    @Test
    void  selecttest(){
        User user1 = iUserMapper.selectById(26);
        System.out.println(user1);
    }
    //查询全部
    @Test
    void  select(){
        List<User> users = iUserMapper.selectList(null);
        users.forEach(System.out::println);
    }
    @Test
    void delete(){
        int i = iUserMapper.deleteById(24);
        System.out.println(i);
    }@Test
    void select2(){
        //条件构造器
        QueryWrapper<User>wrapper = new QueryWrapper<>();
        wrapper.eq("username","李宇");
        User user1 = iUserMapper.selectOne(wrapper);
        System.out.println(user1);
    }
    @Test
    //查询2-10之间的包头也包尾
    void select3(){
  QueryWrapper<User>wrapper = new QueryWrapper<>();
  wrapper.between("id",2,10);
  List<User> users = iUserMapper.selectList(wrapper);
  users.forEach(System.out::println);
    }
    @Test
    void select4(){
        //左右模糊查询
        QueryWrapper<User>wrapper= new QueryWrapper<>();
        wrapper.like("username","李");
        List<User> users = iUserMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }
    //查多个id
    @Test
    //System.out::println lamda表达式
    void select5(){
        iUserMapper.selectBatchIds(Arrays.asList(14,15,20)).forEach(System.out::println);
    }
    @Test
    //分页查询
    void select6(){
        IPage page = new Page(10,20);
        IPage iPage = iUserMapper.selectPage(page, null);
        iPage.getRecords().forEach(System.out::println);
    }
​
}
​</span></span>

<!--Redis-->

Redis的五大基本数据类型 string list set zset hash

Redis特点

  • Redis是一个高性能key/value内存型数据库

  • Redis支持丰富的数据类型

  • Redis支持持久化

  • Redis单线程,单进程

1 opsForValue

<span style="background-color:#f8f8f8"><span style="color:#333333"> <span style="color:#770088">package</span> <span style="color:#0000ff">com</span>.<span style="color:#000000">xinzhi</span>;
​
<span style="color:#770088">import</span> <span style="color:#000000">org</span>.<span style="color:#000000">junit</span>.<span style="color:#000000">jupiter</span>.<span style="color:#000000">api</span>.<span style="color:#000000">Test</span>;
<span style="color:#770088">import</span> <span style="color:#000000">org</span>.<span style="color:#000000">mockito</span>.<span style="color:#000000">exceptions</span>.<span style="color:#000000">verification</span>.<span style="color:#000000">VerificationInOrderFailure</span>;
<span style="color:#770088">import</span> <span style="color:#000000">org</span>.<span style="color:#000000">springframework</span>.<span style="color:#000000">beans</span>.<span style="color:#000000">factory</span>.<span style="color:#000000">annotation</span>.<span style="color:#000000">Autowired</span>;
<span style="color:#770088">import</span> <span style="color:#000000">org</span>.<span style="color:#000000">springframework</span>.<span style="color:#000000">boot</span>.<span style="color:#000000">test</span>.<span style="color:#000000">context</span>.<span style="color:#000000">SpringBootTest</span>;
<span style="color:#770088">import</span> <span style="color:#000000">org</span>.<span style="color:#000000">springframework</span>.<span style="color:#000000">data</span>.<span style="color:#000000">redis</span>.<span style="color:#000000">core</span>.<span style="color:#000000">RedisTemplate</span>;
<span style="color:#770088">import</span> <span style="color:#000000">org</span>.<span style="color:#000000">springframework</span>.<span style="color:#000000">data</span>.<span style="color:#000000">redis</span>.<span style="color:#000000">core</span>.<span style="color:#000000">ValueOperations</span>;
​
<span style="color:#770088">import</span> <span style="color:#000000">javax</span>.<span style="color:#000000">lang</span>.<span style="color:#000000">model</span>.<span style="color:#000000">element</span>.<span style="color:#000000">Name</span>;
<span style="color:#770088">import</span> <span style="color:#000000">java</span>.<span style="color:#000000">time</span>.<span style="color:#000000">Duration</span>;
<span style="color:#770088">import</span> <span style="color:#000000">java</span>.<span style="color:#000000">util</span>.<span style="color:#000000">List</span>;
<span style="color:#770088">import</span> <span style="color:#000000">java</span>.<span style="color:#000000">util</span>.<span style="color:#000000">Set</span>;
​
<span style="color:#555555">@SpringBootTest</span>
<span style="color:#770088">class</span> <span style="color:#0000ff">RedisdemoApplicationTests</span> {
    <span style="color:#555555">@Autowired</span>
    <span style="color:#770088">private</span> <span style="color:#000000">RedisTemplate</span> <span style="color:#000000">redisTemplate</span>;<span style="color:#000000">直接把</span>
​
    <span style="color:#555555">@Test</span>
    <span style="color:#008855">void</span> <span style="color:#000000">contextLoads</span>() {
    }
​
​
<span style="color:#555555">@Test</span>
    <span style="color:#008855">void</span> <span style="color:#000000">testString</span>() {
        <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForValue</span>().<span style="color:#000000">set</span>(<span style="color:#aa1111">"name"</span>,<span style="color:#aa1111">"张三"</span>);
        <span style="color:#008855">Object</span> <span style="color:#000000">name</span> <span style="color:#981a1a">=</span> <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForValue</span>().<span style="color:#000000">get</span>(<span style="color:#aa1111">"name"</span>);
        <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#000000">name</span>);
    }
<span style="color:#008855">String</span>   <span style="color:#000000">opsForValue</span>()  <span style="color:#000000">set放</span>  <span style="color:#000000">get拿</span></span></span>

2 opsForHash

Hash

特点: value 是一个map结构 存在key value key 无序的

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@Test</span>
    <span style="color:#008855">void</span> <span style="color:#0000ff">testHash</span>() {
        <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForHash</span>().<span style="color:#000000">put</span>(<span style="color:#aa1111">"person"</span>,<span style="color:#aa1111">"name"</span>,<span style="color:#aa1111">"老韩"</span>);
        <span style="color:#008855">Object</span> <span style="color:#000000">name</span> <span style="color:#981a1a">=</span> <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForHash</span>().<span style="color:#000000">get</span>(<span style="color:#aa1111">"person"</span>, <span style="color:#aa1111">"name"</span>);
        <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#000000">name</span>);
    }
<span style="color:#000000">Hash类型</span>   <span style="color:#0000ff">opsForHash</span>()  <span style="color:#000000">put放</span>   <span style="color:#000000">get拿</span></span></span>

3 opsForSet

set

特点: Set类型 Set集合 元素无序 不可以重复

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@Test</span>
    <span style="color:#008855">void</span> <span style="color:#0000ff">testSet</span>(){
        <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForSet</span>().<span style="color:#000000">add</span>(<span style="color:#aa1111">"myFriend"</span>, <span style="color:#aa1111">"李航"</span>, <span style="color:#aa1111">"李昭"</span>, <span style="color:#aa1111">"李虎"</span>, <span style="color:#aa1111">"李鹏"</span>, <span style="color:#aa1111">"李刚"</span>);
        <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForSet</span>().<span style="color:#000000">add</span>(<span style="color:#aa1111">"yourFriend"</span>, <span style="color:#aa1111">"王玉龙"</span>, <span style="color:#aa1111">"龙日一"</span>, <span style="color:#aa1111">"李明"</span>, <span style="color:#aa1111">"江南"</span>, <span style="color:#aa1111">"王欢"</span>);
        <span style="color:#000000">Set</span><span style="color:#981a1a"><</span><span style="color:#008855">Object</span><span style="color:#981a1a">></span> <span style="color:#000000">myFriend</span> <span style="color:#981a1a">=</span> <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForSet</span>().<span style="color:#000000">members</span>(<span style="color:#aa1111">"myFriend"</span>);
        <span style="color:#000000">Set</span><span style="color:#981a1a"><</span><span style="color:#008855">Object</span><span style="color:#981a1a">></span> <span style="color:#000000">difference</span> <span style="color:#981a1a">=</span> <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForSet</span>().<span style="color:#000000">difference</span>( <span style="color:#aa1111">"yourFriend"</span>,<span style="color:#aa1111">"myFriend"</span>);
        <span style="color:#000000">Set</span><span style="color:#981a1a"><</span><span style="color:#008855">Object</span><span style="color:#981a1a">></span> <span style="color:#000000">intersect</span> <span style="color:#981a1a">=</span> <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForSet</span>().<span style="color:#000000">intersect</span>(<span style="color:#aa1111">"myFriend"</span>, <span style="color:#aa1111">"yourFriend"</span>);
        <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"我的好友:"</span><span style="color:#981a1a">+</span><span style="color:#000000">myFriend</span>);
        <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"你可能也认识:"</span><span style="color:#981a1a">+</span><span style="color:#000000">difference</span>);
        <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"你两共同的好友:"</span><span style="color:#981a1a">+</span><span style="color:#000000">intersect</span>);
    }
<span style="color:#000000">set</span>  <span style="color:#0000ff">opsForSet</span>()  <span style="color:#000000">add放</span>  <span style="color:#000000">myFriend我的</span>     <span style="color:#000000">yourFriend</span> <span style="color:#000000">你的</span>     <span style="color:#000000">members全部</span>  <span style="color:#000000">difference</span> <span style="color:#000000">交集</span>     <span style="color:#000000">intersect共同的</span>  <span style="color:#981a1a"><></span><span style="color:#000000">泛型</span></span></span>

4 opsForZSet

zset

可排序的set集合 排序 不可重复 ,因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。底层的实现是一个跳表(SkipList)加 hash表。

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@Test</span>
    <span style="color:#008855">void</span> <span style="color:#0000ff">testZset</span>(){
        <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForZSet</span>().<span style="color:#000000">add</span>(<span style="color:#aa1111">"leaderboard"</span>, <span style="color:#aa1111">"李玉"</span>,<span style="color:#116644">100</span>);
        <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForZSet</span>().<span style="color:#000000">add</span>(<span style="color:#aa1111">"leaderboard"</span>, <span style="color:#aa1111">"张含"</span>,<span style="color:#116644">70</span>);
        <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForZSet</span>().<span style="color:#000000">add</span>(<span style="color:#aa1111">"leaderboard"</span>, <span style="color:#aa1111">"冯漠"</span>,<span style="color:#116644">90</span>);
        <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForZSet</span>().<span style="color:#000000">add</span>(<span style="color:#aa1111">"leaderboard"</span>, <span style="color:#aa1111">"李诚铭"</span>,<span style="color:#116644">55</span>);
        <span style="color:#000000">Set</span><span style="color:#981a1a"><</span><span style="color:#008855">Object</span><span style="color:#981a1a">></span> <span style="color:#000000">leaderboard</span> <span style="color:#981a1a">=</span> <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForZSet</span>().<span style="color:#000000">range</span>(<span style="color:#aa1111">"leaderboard"</span>, <span style="color:#116644">0</span>, <span style="color:#981a1a">-</span><span style="color:#116644">1</span>);
        <span style="color:#008855">Long</span> <span style="color:#000000">num</span> <span style="color:#981a1a">=</span> <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForZSet</span>().<span style="color:#000000">zCard</span>(<span style="color:#aa1111">"leaderboard"</span>);
        <span style="color:#000000">Set</span><span style="color:#981a1a"><</span><span style="color:#008855">Object</span><span style="color:#981a1a">></span> <span style="color:#000000">leaderboard1</span> <span style="color:#981a1a">=</span> <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForZSet</span>().<span style="color:#000000">reverseRange</span>(<span style="color:#aa1111">"leaderboard"</span>, <span style="color:#116644">0</span>, <span style="color:#981a1a">-</span><span style="color:#116644">1</span>);
        <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForZSet</span>().<span style="color:#000000">incrementScore</span>(<span style="color:#aa1111">"leaderboard"</span>, <span style="color:#aa1111">"李诚铭"</span>, <span style="color:#116644">50</span>);
        <span style="color:#000000">Set</span><span style="color:#981a1a"><</span><span style="color:#008855">Object</span><span style="color:#981a1a">></span> <span style="color:#000000">leaderboard2</span> <span style="color:#981a1a">=</span> <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForZSet</span>().<span style="color:#000000">reverseRange</span>(<span style="color:#aa1111">"leaderboard"</span>, <span style="color:#116644">0</span>, <span style="color:#981a1a">-</span><span style="color:#116644">1</span>);
        <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"参与选美的选手有:"</span><span style="color:#981a1a">+</span><span style="color:#000000">leaderboard</span><span style="color:#981a1a">+</span><span style="color:#aa1111">","</span><span style="color:#981a1a">+</span><span style="color:#000000">num</span><span style="color:#981a1a">+</span><span style="color:#aa1111">"个人"</span>);
        <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"倒排:"</span><span style="color:#981a1a">+</span><span style="color:#000000">leaderboard1</span>);
        <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"加分后倒排:"</span><span style="color:#981a1a">+</span><span style="color:#000000">leaderboard2</span>);
    }
<span style="color:#000000">zset类型</span>   <span style="color:#000000">add放</span>    <span style="color:#0000ff">range</span>(<span style="color:#aa1111">"leaderboard"</span>, <span style="color:#116644">0</span>, <span style="color:#981a1a">-</span><span style="color:#116644">1</span>);<span style="color:#000000">查看全部</span>  <span style="color:#000000">leaderboard</span> <span style="color:#000000">类名</span>  <span style="color:#0000ff">zCard</span>(<span style="color:#aa1111">"leaderboard"</span>);<span style="color:#000000">查看个数</span>  <span style="color:#000000">reverseRange倒排</span>   <span style="color:#0000ff">incrementScore</span>(<span style="color:#aa1111">"leaderboard"</span>, <span style="color:#aa1111">"曹璟昊"</span>, <span style="color:#116644">50</span>);<span style="color:#000000">后期加</span></span></span>

5 opsForList

list

list 列表 相当于java中list 集合 特点 元素有序 且 可以重复

ArrayList list = new ArrayList<>()

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@Test</span>
    <span style="color:#008855">void</span> <span style="color:#0000ff">testList</span>(){
        <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForList</span>().<span style="color:#000000">leftPush</span>(<span style="color:#aa1111">"lists"</span>, <span style="color:#aa1111">"苹果"</span>);
        <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForList</span>().<span style="color:#000000">leftPushAll</span>(<span style="color:#aa1111">"lists"</span>, <span style="color:#aa1111">"香蕉"</span>,<span style="color:#aa1111">"葡萄"</span>);
        <span style="color:#000000">List</span><span style="color:#981a1a"><</span><span style="color:#008855">Object</span><span style="color:#981a1a">></span> <span style="color:#000000">lists</span> <span style="color:#981a1a">=</span> <span style="color:#000000">redisTemplate</span>.<span style="color:#000000">opsForList</span>().<span style="color:#000000">range</span>(<span style="color:#aa1111">"lists"</span>, <span style="color:#116644">0</span>, <span style="color:#981a1a">-</span><span style="color:#116644">1</span>);
        <span style="color:#000000">lists</span>.<span style="color:#000000">forEach</span>(<span style="color:#000000">s</span><span style="color:#981a1a">-></span> <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#000000">s</span>));
    }
<span style="color:#000000">list类型</span>   <span style="color:#000000">leftPush放</span>   <span style="color:#000000">range往出拿</span></span></span>

string类型常用命令

命令 说明
set 设置一个key/value
get 根据key获得对应的value
mset 一次设置多个key value
mget 一次获得多个key的value
getset 获得原始key的值,同时设置新值
strlen 获得对应key存储value的长度
append 为对应key的value追加内容
setex 设置一个key存活的有效期(秒)
setnx 存在不做任何操作,不存在添加
msetnx原子操作(只要有一个存在不做任何操作) 可以同时设置多个key,只有有一个存在都不保存
decr 进行数值类型的-1操作
decrby 根据提供的数据进行减法操作
Incr 进行数值类型的+1操作
incrby 根据提供的数据进行加法操作

List类型常用命令

命令 说明
lpush 将某个值加入到一个key列表头部
lpushx 同lpush,但是必须要保证这个key存在
rpush 将某个值加入到一个key列表末尾
rpushx 同rpush,但是必须要保证这个key存在
lpop 返回和移除列表左边的第一个元素
rpop 返回和移除列表右边的第一个元素
lrange 获取某一个下标区间内的元素,从0开始
llen 获取列表元素个数
lset 设置某一个指定索引的值(索引必须存在)
lindex 获取某一个指定索引位置的元素
lrem 删除重复元素
ltrim 保留列表中特定区间内的元素
linsert 在某一个元素之前,之后插入新元素

set常用命令

sadd 为集合添加元素
smembers 显示集合中所有元素 无序
scard 返回集合中元素的个数
spop 随机返回一个元素 并将元素在集合中删除
smove 从一个集合中向另一个集合移动元素 必须是同一种类型
srem 从集合中删除一个元素
sismember 判断一个集合中是否含有这个元素
srandmember 随机返回元素
sdiff 求差集
sinter 求交集
sunion 求和集

zset常用命令

zadd 添加一个有序集合元素
zcard 返回集合的元素个数
zrange 升序 zrevrange 降序 返回一个范围内的元素
zrangebyscore 按照分数查找一个范围内的元素
zrank 返回排名
zrevrank 倒序排名
zscore 显示某一个元素的分数
zrem 移除某一个元素
zincrby 给某个特定元素加分

Hash常用命令

hset 设置一个key/value对
hget 获得一个key对应的value
hgetall 获得所有的key/value对
hdel 删除某一个key/value对
hexists 判断一个key是否存在
hkeys 获得所有的key
hvals 获得所有的value
hmset 设置多个key/value
hmget 获得多个key的value
hsetnx 设置一个不存在的key的值
hincrby 为value进行加法运算
hincrbyfloat 为value加入浮点值

<!--泛型类-->

  泛型类是使用泛型类型参数的类。允许类中某些字段、方法或构造函数接受特定类型的数据,而这些类型在类被实例化时才确定。

  泛型标识(也称为类型参数):在Java中指定泛型类,接口或方法的参数类型。允许在编写代码时使用占位符来表示数据类型,而不需提前确定具体的参数类型;当使用时,再用确定的数据类型替换我们的标识。

  在定义泛型类、接口或方法时,使用尖括号<T><E>或其他标识符来声明参数类型;这些标识符可以是任何合法的Java标识符,通常用单个大写字母表示,以表它们是参数类型。

  • <T>:通用泛型类型,通常表示任意类型;

  • <E>:集合元素泛型类型,通常表示集合中的元素类型;如List、Set

  • <K,V>:映射键,值:表示键值对中键和值的参数类型;如Map

!--@RestController和@Controller注解--

@RestController和@Controller是Spring框架中用于定义控制器的两个注解;

@RestConteroller注解:

  • @RestController是@Controller的特殊形式,是用于创建 RESTful Web 服务的控制器类,而非传统的Web形式;

  • 控制器方法使用@RequstMapping或其他衍生注解来映射url路径,这些数据返回的是数据对象,却不是视图名称。这些数据对象会被自动序列化成JOSN和XML格式,并作为HTTP响应的一部分发送给客户端。

  • @RestController相当于@Controller+@ResponseBody;

@Controller注解:

  • @Controller是一个SpringMVC定义控制器的注解,处理传统的Web请求/响应模型——HTTP请求,处理请求中的逻辑,返回一个视图(即HTML页面)给客户端;

  • 控制器方法使用@RequstMapping或其他衍生注解来映射url路径,会返回一个视图名称。(常见的有jsp)

  • 在使用@Controller时需使用@ResponseBody注解(每个方法)

总结:

  简单来说,@Controller用于Web/返回网页,而@RestController返回数据

<!--mybist-public整合redis-->

mapper层

<span style="background-color:#f8f8f8"><span style="color:#333333">package com.xhizhi.mapper;
​
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xhizhi.pojo.User;
import org.apache.ibatis.annotations.Mapper;
​
@Mapper
public interface IUserMapper  extends BaseMapper<User> {
    //IUserMapper里的所有的方法对user进行。
    int updateuser(User user);
}
​</span></span>

pojo层

<span style="background-color:#f8f8f8"><span style="color:#333333">package com.xhizhi.pojo;
​
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data//可以减少样板代码的编写量。(如get,set就就不用写了)
@NoArgsConstructor//强制生成一个无参构造函数,
@Builder//创建对象的
@AllArgsConstructor//生成一个包含所有参数的构造函数
public class User {
    private  Integer id;
    private  String username;
    private  String password;
    private  Integer age;
    private  String phone;
    private  String identity;
}
​</span></span>

service层

<span style="background-color:#f8f8f8"><span style="color:#333333">package com.xhizhi.service;
​
import com.xhizhi.pojo.User;
import com.xhizhi.utlic.Result;
​
import java.util.List;
​
public interface IUserService {
​
    /**
     * 登录
     */
​
    Result login( String password,String phone);
    /**
     * 注册
     */
    Result register(User user);
    /**
     * 修改
     */
    Result amend(User user);
​
​
}</span></span>

service实体类

<span style="background-color:#f8f8f8"><span style="color:#333333">package com.xhizhi.service.Impl;
​
import com.xhizhi.mapper.IUserMapper;
import com.xhizhi.pojo.User;
import com.xhizhi.service.IUserService;
import com.xhizhi.utlic.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
​
​
@Service//负责处理业务逻辑
public class UserServiceImpl implements IUserService {
    @Autowired//Spring框架中用于依赖注入的注解
    private IUserMapper iUserMapper;
    @Autowired//Spring框架中用于依赖注入的注解
    private RedisTemplate redisTemplate;
//登录
    @Override//方法重写了父类中的方法。
    public Result login(String password, String phone) {
        // 对密码进行加密
        String encryptedPassword = DigestUtils.md5DigestAsHex(password.getBytes());
        // 密码格式
        if (!password.matches("\\w{8,12}")) {
            return Result.error("密码格式错误");
        }
        // 手机号格式
        if (!phone.matches("\\d{11}")) {
            return Result.error("手机号格式错误");
        }
        // 从 Redis 中获取密码信息
        String storedPassword = (String) redisTemplate.opsForHash().get("name1", password);
        String storedPhone = (String) redisTemplate.opsForHash().get("name", phone);
​
        // 校验密码和手机号是否匹配
        if (!password.equals(storedPassword) && !phone.equals(storedPhone)) {
            return Result.error("手机号或密码错误");
        }
        return Result.ok("正确");
    }
//注册
    @Override
    public Result register(User user) {
        // 密码格式
        if (user.getPassword() == null || !user.getPassword().matches("\\w{8,12}")) {
            return Result.error("密码错误,请重新输入");
        }
        // 手机号格式
        if (user.getPhone() == null || !user.getPhone().matches("\\d{11}")) {
            return Result.error("手机号错误,请重新输入");
        }
        // 身份证格式
        if (user.getIdentity() == null || !user.getIdentity().matches("\\d{18}")) {
            return Result.error("身份证错误,请重新输入");
        }
        // 对密码、手机号和身份证进行加密存储
        user.setPassword(DigestUtils.md5DigestAsHex(user.getPassword().getBytes()));
        user.setPhone(DigestUtils.md5DigestAsHex(user.getPhone().getBytes()));
        user.setIdentity(DigestUtils.md5DigestAsHex(user.getIdentity().getBytes()));
​
        // 将用户信息存储到 Redis 中
        redisTemplate.opsForHash().put("user:", "password", user.getPassword());
        redisTemplate.opsForHash().put("user:", "phone", user.getPhone());
        redisTemplate.opsForHash().put("user:", "identity", user.getIdentity());
        // 将用户信息插入到数据库中
        int insert = iUserMapper.insert(user);
        return insert > 0 ? Result.ok("注册成功") : Result.error("注册失败");
    }
//修改
    @Override
    public Result amend(User user) {
        if (user == null) {
            return Result.error("用户信息为空,请重新输入");
        }
        String password = user.getPassword();//密码不为空
        if (password == null || !password.matches("\\w{8,12}")) {
            return Result.error("密码错误,请重新输入");
        }
        String phone = user.getPhone();//手机号不为空
        if (phone == null || !phone.matches("\\d{11}")) {
            return Result.error("手机号错误,请重新输入");
        }
        String identity = user.getIdentity();//身份证不为空
        if (identity == null || !identity.matches("\\d{18}")) {
            return Result.error("身份证错误,请重新输入");
        }
        String key = "user:" + user.getId(); // 拿id去修改
        //修改后的信息存在redia里
        redisTemplate.opsForHash().put(key, "password", password);
        redisTemplate.opsForHash().put(key, "phone", phone);
        redisTemplate.opsForHash().put(key, "identity", identity);
​
        return Result.ok("用户信息修改成功");
    }
​
}</span></span>

controller层

<span style="background-color:#f8f8f8"><span style="color:#333333">package com.xhizhi.controller;
​
import com.xhizhi.pojo.User;
import com.xhizhi.service.IUserService;
import com.xhizhi.utlic.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
​
import java.util.Map;
​
@RestController
public class UserConller {
   @Autowired使用 @PostMapping 注解来处理 POST 请求
   private IUserService iUserService;
    @PostMapping("/login")
    public Result login(@RequestBody Map<String, String> requestBody) {
        String password = requestBody.get("password");
        String phone = requestBody.get("phone");
​
        if (password == null || phone == null) {
            return Result.error(400, "Bad Request: Missing 'password' or 'phone' parameter.");
        }
​
        Result login = iUserService.login(password, phone);
        return login;
    }
    @PostMapping("/insert")
     public Result register(User user){
         Result register = iUserService.register(user);
         return register;
     }
     @PostMapping("/amend")
     public Result amend(User user){
         Result amend = iUserService.amend(user);
         return amend;
     }
}</span></span>

工具类

mybist-public的工具类

<span style="background-color:#f8f8f8"><span style="color:#333333">package com.xhizhi.utlic;
​
​
​
import java.io.Serializable;
​
​
public class Result<T> implements Serializable {
​
    private static final long serialVersionUID = 1L;
​
    /**
     * 成功标志
     */
    private boolean success = true;
​
    /**
     * 返回处理消息
     */
    private String message = "操作成功!";
​
    /**
     * 返回代码
     */
    private Integer code = 0;
    
    /**
     * 返回数据对象 data
     */
    private T result;
​
    public static long getSerialVersionUID() {
        return serialVersionUID;
    }
​
    public boolean isSuccess() {
        return success;
    }
​
    public void setSuccess(boolean success) {
        this.success = success;
    }
​
    public String getMessage() {
        return message;
    }
​
    public void setMessage(String message) {
        this.message = message;
    }
​
    public Integer getCode() {
        return code;
    }
​
    public void setCode(Integer code) {
        this.code = code;
    }
​
    public T getResult() {
        return result;
    }
​
    public void setResult(T result) {
        this.result = result;
    }
​
    public long getTimestamp() {
        return timestamp;
    }
​
    public void setTimestamp(long timestamp) {
        this.timestamp = timestamp;
    }
​
    /**
     * 时间戳
     */
    private long timestamp = System.currentTimeMillis();
​
    public Result() {
        
    }
    
    public Result<T> success(String message) {
        this.message = message;
        this.code = 200;
        this.success = true;
        return this;
    }
    
    
    public static Result<Object> ok() {
        Result<Object> r = new Result<Object>();
        r.setSuccess(true);
        r.setCode(200);
        r.setMessage("成功");
        return r;
    }
    
    public static Result<Object> ok(String msg) {
        Result<Object> r = new Result<Object>();
        r.setSuccess(true);
        r.setCode(200);
        r.setMessage(msg);
        return r;
    }
    
    public static Result<Object> ok(Object data) {
        Result<Object> r = new Result<Object>();
        r.setSuccess(true);
        r.setCode(200);
        r.setResult(data);
        return r;
    }
    
    public static Result<Object> error(String msg) {
        return error(500, msg);
    }
    
    public static Result<Object> error(int code, String msg) {
        Result<Object> r = new Result<Object>();
        r.setCode(code);
        r.setMessage(msg);
        r.setSuccess(false);
        return r;
    }
​
    public Result<T> error500(String message) {
        this.message = message;
        this.code = 500;
        this.success = false;
        return this;
    }
    /**
     * 无权限访问返回结果
     */
    public static Result<Object> noauth(String msg) {
        return error(555, msg);
    }
}</span></span>

Result返回结果类

<span style="background-color:#f8f8f8"><span style="color:#333333">package com.xhizhi.utlic;
​
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
​
@Configuration//配置了
public class Redisconfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        // 创建Template
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        // 设置连接工厂
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        // 设置序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        // key和 hashKey采用 string序列化
        redisTemplate.setKeySerializer(RedisSerializer.string());
        redisTemplate.setHashKeySerializer(RedisSerializer.string());
        // value和 hashValue采用 JSON序列化
        redisTemplate.setValueSerializer(jsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jsonRedisSerializer);
        return redisTemplate;
    }
}
​</span></span>

MD5加密工具类

<span style="background-color:#f8f8f8"><span style="color:#333333">package com.xhizhi.utlic;
​
import java.security.MessageDigest;
import java.util.Formatter;
​
public class MD5 {
​
        private static final String MD5_ALGORITHM = "MD5";
        public static String encrypt(String data) throws Exception {
            // 获取MD5算法实例
            MessageDigest messageDigest = MessageDigest.getInstance(MD5_ALGORITHM);
            // 计算散列值
            byte[] digest = messageDigest.digest(data.getBytes());
            Formatter formatter = new Formatter();
            // 补齐前导0,并格式化
            for (byte b : digest) {
                formatter.format("%02x", b);
            }
            return formatter.toString();
​
        }
​
//        public static void main(String[] args) throws Exception {
//            String data = "f78dd8b63135789cb12a3af3dd57f28c";
//
//            String encryptedData = encrypt(data);
//            System.out.println("加密后的数据:" + encryptedData);
//
//        }
​
​
}
​</span></span>

猜你喜欢

转载自blog.csdn.net/qq_70786441/article/details/138135025