使用Springboot整合redis與mysql


使用layui實現前台頁面,實現用戶的增刪改查

環境參數

  • 開發工具:IDEA
  • 基礎環境:Maven+JDK8
  • 主要技術:SpringBoot、redis,mysql,swagger框架與layui前段框架
  • SpringBoot版本:2.2.6

 

實現步驟如下:

1.添加依賴

復制代碼
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- mybatisPlus 核心庫 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.6</version>
        </dependency>

        <!-- thymeleaf模板引擎 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

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

        <!--    mysql驅動包    -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>5.1.41</version>
        </dependency>

        <!-- 引入阿里數據庫連接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.6</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--mybatis-plus 代碼生成器依賴-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.1.tmp</version>
        </dependency>

        <!--  swagger 依賴   -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
復制代碼

 

2.實體層

復制代碼
package com.ckf.springboot_mysql_redis.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.stereotype.Component;

/**
 * @author 安詳的苦丁茶
 * @since 2020-05-02
 */
@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("users")
public class Users implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(type = IdType.AUTO)
    private Integer userId;

    private String userIp;

    private String userName;

    private String password;

    private String email;

    private String registerTime;

    private String updateTime;

    private Integer age;

    private String telephoneNumber;

    private String nickname;

    private Integer state;


}
復制代碼

 

3.業務service層

復制代碼
package com.ckf.springboot_mysql_redis.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ckf.springboot_mysql_redis.entity.Users;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ckf.springboot_mysql_redis.model.ResultFormat;

/**
 * <p>
 *  服務類
 * </p>
 *
 * @author 安詳的苦丁茶
 * @since 2020-05-02
 */
public interface UsersService extends IService<Users> {

    /**
     * 全查詢用戶信息
     * @return
     */
    IPage<Users> selectUsersList(Page<Users> page);
    
    /**
     * 添加用戶
     * @param users
     * @return
     */
    ResultFormat saveUsers(Users users);

    /**
     * 修改用戶
     * @param users
     * @return
     */
    ResultFormat updateUsers(Users users);
    
    /**
     * 刪除用戶
     * @param userId
     * @return
     */
    Integer deleteUsersId(Integer userId);

}
復制代碼

 

4. service實現層

復制代碼
package com.ckf.springboot_mysql_redis.service.impl;

import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
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.ckf.springboot_mysql_redis.controller.UsersController;
import com.ckf.springboot_mysql_redis.entity.Users;
import com.ckf.springboot_mysql_redis.mapper.UsersMapper;
import com.ckf.springboot_mysql_redis.model.ResultFormat;
import com.ckf.springboot_mysql_redis.service.UsersService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ckf.springboot_mysql_redis.utils.RedisUtil;
import com.ckf.springboot_mysql_redis.utils.ResultUtil;
import com.ckf.springboot_mysql_redis.utils.TimeUtitl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * <p>
 *  服務實現類
 * </p>
 *
 * @author 安詳的苦丁茶
 * @since 2020-05-02
 */
@Service
@Transactional
public class UsersServiceImpl extends ServiceImpl<UsersMapper, Users> implements UsersService {

    private Logger logger = LoggerFactory.getLogger(UsersService.class);

    @Autowired
    private UsersMapper usersMapper;

    @Autowired
    private RedisUtil redisUtil;


    /**
     * 全查詢
     * @param page
     * @return
     */
    @Override
    public IPage<Users> selectUsersList(Page<Users> page) {
        logger.info("-----------------進入service實現層 全查詢用戶信息-----------------");
        return usersMapper.selectUsersList(page);

    }

    /**
     * 添加
     * @param users
     * @return
     */
    @Override
    public ResultFormat saveUsers(Users users) {
        logger.info("-----------------進入service實現層 添加用戶信息-----------------");

        /**
         * 查詢用戶名稱是否存在
         * 如果存在那就返回提示已經存在
         * 如果不存在就執行添加
         */
        AbstractWrapper abstractWrapper = new QueryWrapper<Users>();
        abstractWrapper.eq("user_name", users.getUserName());
        Users UsersWrapperGet = usersMapper.selectOne(abstractWrapper);
        logger.info("pgLabelsWrapperGet={}", UsersWrapperGet);

        if (UsersWrapperGet != null) {
            return ResultUtil.error(101, "用戶名稱已存在");
        }
        users.setState(0);

        Integer insert = usersMapper.insert(users);

        if (insert > 0) {
            redisUtil.lSet("userId", users.getUserId());
            redisUtil.set("users:" + users.getUserIp(), users);
        }
        return ResultUtil.success();
    }

    /**
     * 修改
     * @param users
     * @return
     */
    @Override
    public ResultFormat updateUsers(Users users) {
        logger.info("-----------------進入service實現層 修改用戶信息-----------------");
        /**
         * 查詢用戶名稱是否存在
         * 如果存在那就返回提示已經存在
         * 如果不存在就執行添加
         */
        AbstractWrapper Wrapper = new QueryWrapper<Users>();
        Wrapper.eq("user_name", users.getUserName());
        Users UsersWrapperGet = usersMapper.selectOne(Wrapper);
        logger.info("pgLabelsWrapperGet={}", UsersWrapperGet);

        if (UsersWrapperGet != null) {
            return ResultUtil.error(101, "用戶名稱已存在");
        }
        users.setState(0);

        Integer updateById = usersMapper.updateById(users);

        if (updateById > 0) {
            redisUtil.set("users:" + users.getUserId(), users);
        }
        return ResultUtil.success();
    }

    /**
     * 刪除
     * @param userId
     * @return
     */
    @Override
    public Integer deleteUsersId(Integer userId) {
        logger.info("-----------------進入service實現層 刪除用戶信息-----------------");
        Integer deleteById = usersMapper.deleteById(userId);

        if (deleteById > 0) {
            Long delete = redisUtil.delete("users:" + String.valueOf(userId));
        }
        return deleteById;
    }
}
復制代碼

 

5.controller層

復制代碼
package com.ckf.springboot_mysql_redis.controller;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ckf.springboot_mysql_redis.entity.Users;
import com.ckf.springboot_mysql_redis.model.ResultFormat;
import com.ckf.springboot_mysql_redis.model.ResultFormatPaging;
import com.ckf.springboot_mysql_redis.service.UsersService;
import com.ckf.springboot_mysql_redis.utils.ResultPagingUtil;
import com.ckf.springboot_mysql_redis.utils.ResultUtil;
import com.ckf.springboot_mysql_redis.utils.TimeUtitl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;


import java.util.List;


/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 安詳的苦丁茶
 * @since 2020-05-02
 */
@Api(tags = "用戶信息管理")
@RestController
@RequestMapping("/users")
public class UsersController {

    private Logger logger = LoggerFactory.getLogger(UsersController.class);


    @Autowired
    private UsersService usersService;



    /**
     * 分頁全查詢用戶信息
     *
     * @return
     */
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "page", value = "當前頁", required = true, dataType = "Integer", defaultValue = "1"),
            @ApiImplicitParam(name = "limit", value = "每頁記錄數", required = true, dataType = "Integer", defaultValue = "5")
    })

    /**
     * 全查詢分類信息
     *
     * @return
     */
    @ApiOperation("查詢用戶信息接口")
    @GetMapping("/list")
    public ResultFormatPaging pgUsersList(Integer page, Integer limit) {
        logger.info("-------------------進入用戶查詢controller層--------------------------");
        if (page != null && limit != null) {
            logger.info("page={}", page);
            logger.info("limit={}", limit);

            System.out.println("ok");
            Page<Users> users = new Page<>(page, limit);
            System.out.println("ok");
            IPage<Users> pgUsersIPage = usersService.selectUsersList(users);
            List<Users> pgUsersList = pgUsersIPage.getRecords();

            logger.info("usersList=={}", pgUsersList);

            return ResultPagingUtil.pagingSuccess(0, (int) pgUsersIPage.getTotal(), pgUsersList);
        }

        return ResultPagingUtil.pagingError(200, 0, "系統匆忙,查詢異常");


    }


    /**
     * 添加用戶信息
     *
     * @param users
     * @return
     */
    @ApiOperation("添加用戶信息接口")
    @PostMapping("/save")
    @ResponseBody
    public ResultFormat savePgSorts(Users users) {
        users.setRegisterTime(TimeUtitl.dateTime());
        users.setUpdateTime(TimeUtitl.dateTime());

        ResultFormat insert = usersService.saveUsers(users);

        if (insert.getCode() == 200) {
            logger.info("添加成功");
            return ResultUtil.success();
        }
        if (insert.getCode() == 101) {
            logger.info("用戶名已存在");
            return ResultUtil.error(insert.getCode(), insert.getMsg());
        }

        return ResultUtil.error(100, "添加失敗");
    }


    /**
     * 修改用戶信息
     *
     * @param users
     * @return
     */
    @ApiOperation("修改用戶信息接口")
    @PutMapping("/update")
    @ResponseBody
    public ResultFormat updatePgSorts(Users users) {

        users.getRegisterTime();
        users.setUpdateTime(TimeUtitl.dateTime());

        ResultFormat insert = usersService.saveUsers(users);

        if (insert.getCode() == 200) {
            logger.info("修改成功");
            return ResultUtil.success();
        }
        if (insert.getCode() == 101) {
            logger.info("用戶名已存在");
            return ResultUtil.error(insert.getCode(), insert.getMsg());
        }

        return ResultUtil.error(100, "修改失敗");

    }


    /**
     * 修改用戶狀態
     *
     * @param users
     * @return
     */
    @ApiOperation("修改用戶狀態接口")
    @PutMapping("/delete")
    public ResultFormat deletePgSorts(Users users) {

        logger.info("users=={}", users);

        boolean flag = usersService.updateById(users);

        if (flag) {
            logger.info("修改成功");
            return ResultUtil.success();
        } else {
            logger.info("修改失敗");
            return ResultUtil.error(100, "修改失敗");
        }
    }


}
復制代碼

 

6.application.yml

復制代碼
# 服務器端口
server:
  port: 8888

# Spring Boot 的數據源配置
spring:
  redis:
    database: 0
    host: localhost         # Redis服務器地址
    port: 6379              # Redis服務器連接端口
    password:              # Redis服務器連接密碼(默認為空)
    pool:
      max-active: 200       # 連接池最大連接數(使用負值表示沒有限制)
      max-idle: 10            # 連接池中的最大空閑連接
      max-wait: -1          # 連接池最大阻塞等待時間(使用負值表示沒有限制)
      min-idle: 0           # 連接池中的最小空閑連接
    timeout: 1000         # 連接超時時間(毫秒)
  datasource:
    url: jdbc:mysql://localhost:3306/use_redis?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    # 使用druid數據源
    type: com.alibaba.druid.pool.DruidDataSource
    filters: stat
    maxActive: 20
    initialSize: 1
    maxWait: 60000
    minIdle: 1
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: select 'x'
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
    maxOpenPreparedStatements: 20


mybatis-plus:
  # xml掃描,多個目錄用逗號或者分號分隔(告訴 Mapper 所對應的 XML 文件位置)
  mapper-locations: classpath:mapper/*.xml
  global-config:
    #字段策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷"
    field-strategy: 1
  configuration:
    # 是否將sql打印到控制面板(該配置會將sql語句和查詢的結果都打印到控制台)
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

# PageHelper分頁插件
pagehelper:
  helperDialect: mysql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql
復制代碼

 

ajax的代碼就不放出來了哈,各有各的寫法。

 

這里使用是layui實現界面的

效果圖如下:

 

首頁

 

 

 

添加頁面

 

 

 

修改頁面

 

 

 

Api文檔

 

項目已托管碼雲

地址:https://gitee.com/ckfeng/springboot_mysql_redis.git


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM