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

