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