使用Springboot整合redis与mysql

走远了吗. 提交于 2020-05-03 17:55:26

使用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

 

    待更新....

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!