feat: 用户管理模块开发

This commit is contained in:
2024-02-19 14:36:53 +08:00
parent 065ec97aa2
commit 04af7fca2a
98 changed files with 3258 additions and 97 deletions

View File

@@ -27,11 +27,6 @@
<artifactId>spring-boot-starter-web</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>com.landaiqing</groupId>
<artifactId>jc-club-auth-infra</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.landaiqing</groupId>
<artifactId>jc-club-auth-domain</artifactId>

View File

@@ -0,0 +1,36 @@
package com.landaiqing.auth.application.config;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.util.List;
/**
* @Classname GlobalConfig
* @BelongsProject: jc-club
* @BelongsPackage: com.landaiqing.subject.application.config
* @Author: landaiqing
* @CreateTime: 2024-02-16 15:57
* @Description: MVC全局处理
* @Version: 1.0
*/
@Configuration
public class GlobalConfig extends WebMvcConfigurationSupport {
@Override
protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
converters.add(mappingJackson2HttpMessageConverter());
}
private MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){
ObjectMapper objectMapper=new ObjectMapper();
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false);
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
MappingJackson2HttpMessageConverter converter=new MappingJackson2HttpMessageConverter(objectMapper);
return converter;
}
}

View File

@@ -1,42 +1,59 @@
package com.landaiqing.auth.application.controller;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Preconditions;
import com.landaiqing.auth.application.convert.AuthUserDTOConverter;
import com.landaiqing.auth.application.dto.AuthUserDTO;
import com.landaiqing.auth.common.entity.Result;
import com.landaiqing.auth.domain.entity.AuthUserBO;
import com.landaiqing.auth.domain.service.AuthUserDomainService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @Classname UserController
* @BelongsProject: jc-club
* @BelongsPackage: com.landaiqing.auth.application.controller
* @Author: landaiqing
* @CreateTime: 2024-02-18 14:24
* @CreateTime: 2024-02-19 13:46
* @Description: TODO
* @Version: 1.0
*/
@RestController
@RequestMapping("/user/")
@Slf4j
public class UserController {
// 测试登录,浏览器访问: http://localhost:3001/user/doLogin?username=zhang&password=123456
@RequestMapping("doLogin")
public SaResult doLogin(String username, String password) {
// 此处仅作模拟示例,真实项目需要从数据库中查询数据进行比对
if("zhang".equals(username) && "123456".equals(password)) {
StpUtil.login(10001);
SaTokenInfo tokenInfo = StpUtil.getTokenInfo();
// 第3步返回给前端
return SaResult.data(tokenInfo);
@Resource
private AuthUserDomainService authUserDomainService;
/**
* @description: 用户注册
* @param: []
* @return: com.landaiqing.auth.common.entity.Result<java.lang.Boolean>
* @author landaiqing
* @date: 2024/2/19 13:57
*/
@PostMapping("register")
public Result<Boolean> register(@RequestBody AuthUserDTO authUserDTO){
try {
if (log.isInfoEnabled()) {
log.info("UserController.register.dto:{}", JSON.toJSONString(authUserDTO));
}
Preconditions.checkArgument(!StringUtils.isBlank(authUserDTO.getUserName()),"用户名不能为空");
Preconditions.checkArgument(!StringUtils.isBlank(authUserDTO.getEmail()),"邮箱不能为空");
Preconditions.checkArgument(!StringUtils.isBlank(authUserDTO.getPassword()),"密码不能为空");
AuthUserBO authUserBO = AuthUserDTOConverter.INSTANCE.convertDTOToBO(authUserDTO);
return Result.ok(authUserDomainService.register(authUserBO));
} catch (Exception e) {
log.error("UserController.register.error:{}", e.getMessage(), e);
return Result.fail("注册用户失败");
}
return SaResult.error("登录失败");
}
// 查询登录状态,浏览器访问: http://localhost:3001/user/isLogin
@RequestMapping("isLogin")
public String isLogin() {
return "当前会话是否登录:" + StpUtil.isLogin();
}
}

View File

@@ -0,0 +1,23 @@
package com.landaiqing.auth.application.convert;
import com.landaiqing.auth.application.dto.AuthUserDTO;
import com.landaiqing.auth.domain.entity.AuthUserBO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* 用户dto转换器
*
* @author: landaiqing
* @date: 2023/10/8
*/
@Mapper
public interface AuthUserDTOConverter {
AuthUserDTOConverter INSTANCE = Mappers.getMapper(AuthUserDTOConverter.class);
AuthUserBO convertDTOToBO(AuthUserDTO authUserDTO);
AuthUserDTO convertBOToDTO(AuthUserBO authUserBO);
}

View File

@@ -0,0 +1,34 @@
package com.landaiqing.auth.application.dto;
import lombok.Data;
import java.io.Serializable;
/**
* 权限dto
*
* @author: landaiqing
* @date: 2023/11/3
*/
@Data
public class AuthPermissionDTO implements Serializable {
private Long id;
private String name;
private Long parentId;
private Integer type;
private String menuUrl;
private Integer status;
private Integer show;
private String icon;
private String permissionKey;
}

View File

@@ -0,0 +1,23 @@
package com.landaiqing.auth.application.dto;
import lombok.Data;
import java.io.Serializable;
/**
* 角色dto
*
* @author: landaiqing
* @date: 2023/11/2
*/
@Data
public class AuthRoleDTO implements Serializable {
private Long id;
private String roleName;
private String roleKey;
}

View File

@@ -0,0 +1,26 @@
package com.landaiqing.auth.application.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* (AuthRolePermission)实体类
*
* @author landaiqing
* @since 2023-11-04 22:16:00
*/
@Data
public class AuthRolePermissionDTO implements Serializable {
private static final long serialVersionUID = 459343371709166261L;
private Long id;
private Long roleId;
private Long permissionId;
private List<Long> permissionIdList;
}

View File

@@ -0,0 +1,39 @@
package com.landaiqing.auth.application.dto;
import lombok.Data;
import java.io.Serializable;
/**
* (AuthUser)DTO
*/
@Data
public class AuthUserDTO implements Serializable {
private Long id;
private String userName;
private String nickName;
private String email;
private String phone;
private String password;
private Integer sex;
private String avatar;
private Integer status;
private String introduce;
private String extJson;
private Integer isDeleted;
}

View File

@@ -1,13 +0,0 @@
package com.landaiqing;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}

View File

@@ -0,0 +1,30 @@
package com.landaiqing.auth.common.entity;
/**
* 分页请求实体
*
* @author: landaiqing
* @date: 2023/10/5
*/
public class PageInfo {
private Integer pageNo = 1;
private Integer pageSize = 20;
public Integer getPageNo() {
if (pageNo == null || pageNo < 1) {
return 1;
}
return pageNo;
}
public Integer getPageSize() {
if (pageSize == null || pageSize < 1 || pageSize > Integer.MAX_VALUE) {
return 20;
}
return pageSize;
}
}

View File

@@ -0,0 +1,58 @@
package com.landaiqing.auth.common.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
/**
* 分页返回实体
*
* @author: landaiqing
* @date: 2023/10/5
*/
@Data
public class PageResult<T> implements Serializable {
private Integer pageNo = 1;
private Integer pageSize = 20;
private Integer total = 0;
private Integer totalPages = 0;
private List<T> result = Collections.emptyList();
private Integer start = 1;
private Integer end = 0;
public void setRecords(List<T> result) {
this.result = result;
if (result != null && result.size() > 0) {
setTotal(result.size());
}
}
public void setTotal(Integer total) {
this.total = total;
if (this.pageSize > 0) {
this.totalPages = (total / this.pageSize) + (total % this.pageSize == 0 ? 0 : 1);
} else {
this.totalPages = 0;
}
this.start = (this.pageSize > 0 ? (this.pageNo - 1) * this.pageSize : 0) + 1;
this.end = (this.start - 1 + this.pageSize * (this.pageNo > 0 ? 1 : 0));
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public void setPageNo(Integer pageNo) {
this.pageNo = pageNo;
}
}

View File

@@ -0,0 +1,51 @@
package com.landaiqing.auth.common.entity;
import com.landaiqing.auth.common.enums.ResultCodeEnum;
import lombok.Data;
@Data
public class Result<T> {
private Boolean success;
private Integer code;
private String message;
private T data;
public static Result ok(){
Result result = new Result();
result.setSuccess(true);
result.setCode(ResultCodeEnum.SUCCESS.getCode());
result.setMessage(ResultCodeEnum.SUCCESS.getDesc());
return result;
}
public static <T> Result ok(T data){
Result result = new Result();
result.setSuccess(true);
result.setCode(ResultCodeEnum.SUCCESS.getCode());
result.setMessage(ResultCodeEnum.SUCCESS.getDesc());
result.setData(data);
return result;
}
public static Result fail(){
Result result = new Result();
result.setSuccess(false);
result.setCode(ResultCodeEnum.FAIL.getCode());
result.setMessage(ResultCodeEnum.FAIL.getDesc());
return result;
}
public static <T> Result fail(T data){
Result result = new Result();
result.setSuccess(false);
result.setCode(ResultCodeEnum.FAIL.getCode());
result.setMessage(ResultCodeEnum.FAIL.getDesc());
result.setData(data);
return result;
}
}

View File

@@ -0,0 +1,35 @@
package com.landaiqing.auth.common.enums;
import lombok.Getter;
/**
* 用户状态枚举
*
* @author: landaiqing
* @date: 2023/10/3
*/
@Getter
public enum AuthUserStatusEnum {
OPEN(0,"启用"),
CLOSE(1,"禁用");
public int code;
public String desc;
AuthUserStatusEnum(int code, String desc){
this.code = code;
this.desc = desc;
}
public static AuthUserStatusEnum getByCode(int codeVal){
for(AuthUserStatusEnum resultCodeEnum : AuthUserStatusEnum.values()){
if(resultCodeEnum.code == codeVal){
return resultCodeEnum;
}
}
return null;
}
}

View File

@@ -0,0 +1,35 @@
package com.landaiqing.auth.common.enums;
import lombok.Getter;
/**
* 删除状态枚举
*
* @author: landaiqing
* @date: 2023/10/3
*/
@Getter
public enum IsDeletedFlagEnum {
DELETED(1,"已删除"),
UN_DELETED(0,"未删除");
public int code;
public String desc;
IsDeletedFlagEnum(int code, String desc){
this.code = code;
this.desc = desc;
}
public static IsDeletedFlagEnum getByCode(int codeVal){
for(IsDeletedFlagEnum resultCodeEnum : IsDeletedFlagEnum.values()){
if(resultCodeEnum.code == codeVal){
return resultCodeEnum;
}
}
return null;
}
}

View File

@@ -0,0 +1,24 @@
package com.landaiqing.auth.common.enums;
import lombok.Getter;
@Getter
public enum ResultCodeEnum {
SUCCESS(200,"成功"),
FAIL(500,"失败");
private int code;
private String desc;
ResultCodeEnum(int code, String desc){
this.code=code;
this.desc=desc;
}
public static ResultCodeEnum getByCode(int codeVal){
for(ResultCodeEnum resultCodeEnum:ResultCodeEnum.values()){
if(resultCodeEnum.code==codeVal){
return resultCodeEnum;
}
}
return null;
}
}

View File

@@ -35,5 +35,20 @@
<artifactId>jc-club-auth-infra</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.landaiqing</groupId>
<artifactId>jc-club-auth-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.7</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
</dependencies>
</project>

View File

@@ -1,13 +0,0 @@
package com.landaiqing;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}

View File

@@ -0,0 +1,21 @@
package com.landaiqing.auth.domain.convert;
import com.landaiqing.auth.domain.entity.AuthPermissionBO;
import com.landaiqing.auth.infra.basic.entity.AuthPermission;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* 权限bo转换器
*
* @author: landaiqing
* @date: 2024/2/19
*/
@Mapper
public interface AuthPermissionBOConverter {
AuthPermissionBOConverter INSTANCE = Mappers.getMapper(AuthPermissionBOConverter.class);
AuthPermission convertBOToEntity(AuthPermissionBO authPermissionBO);
}

View File

@@ -0,0 +1,21 @@
package com.landaiqing.auth.domain.convert;
import com.landaiqing.auth.domain.entity.AuthRoleBO;
import com.landaiqing.auth.infra.basic.entity.AuthRole;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* 角色bo转换器
*
* @author: landaiqing
* @date: 2024/2/19
*/
@Mapper
public interface AuthRoleBOConverter {
AuthRoleBOConverter INSTANCE = Mappers.getMapper(AuthRoleBOConverter.class);
AuthRole convertBOToEntity(AuthRoleBO authRoleBO);
}

View File

@@ -0,0 +1,23 @@
package com.landaiqing.auth.domain.convert;
import com.landaiqing.auth.domain.entity.AuthUserBO;
import com.landaiqing.auth.infra.basic.entity.AuthUser;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* 用户bo转换器
*
* @author: landaiqing
* @date: 2024/2/19
*/
@Mapper
public interface AuthUserBOConverter {
AuthUserBOConverter INSTANCE = Mappers.getMapper(AuthUserBOConverter.class);
AuthUser convertBOToEntity(AuthUserBO authUserBO);
AuthUserBO convertEntityToBO(AuthUser authUser);
}

View File

@@ -0,0 +1,34 @@
package com.landaiqing.auth.domain.entity;
import lombok.Data;
import java.io.Serializable;
/**
* 权限dto
*
* @author: landaiqing
* @date: 2023/11/3
*/
@Data
public class AuthPermissionBO implements Serializable {
private Long id;
private String name;
private Long parentId;
private Integer type;
private String menuUrl;
private Integer status;
private Integer show;
private String icon;
private String permissionKey;
}

View File

@@ -0,0 +1,23 @@
package com.landaiqing.auth.domain.entity;
import lombok.Data;
import java.io.Serializable;
/**
* 角色bo
*
* @author: landaiqing
* @date: 2023/11/2
*/
@Data
public class AuthRoleBO implements Serializable {
private Long id;
private String roleName;
private String roleKey;
}

View File

@@ -0,0 +1,26 @@
package com.landaiqing.auth.domain.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* (AuthRolePermission)实体类
*
* @author landaiqing
* @since 2023-11-04 22:16:00
*/
@Data
public class AuthRolePermissionBO implements Serializable {
private static final long serialVersionUID = 459343371709166261L;
private Long id;
private Long roleId;
private Long permissionId;
private List<Long> permissionIdList;
}

View File

@@ -0,0 +1,39 @@
package com.landaiqing.auth.domain.entity;
import lombok.Data;
import java.io.Serializable;
/**
* 用戶信息dto
*
* @author: landaiqing
* @date: 2023/11/1
*/
@Data
public class AuthUserBO implements Serializable {
private Long id;
private String userName;
private String nickName;
private String email;
private String phone;
private String password;
private Integer sex;
private String avatar;
private Integer status;
private String introduce;
private String extJson;
}

View File

@@ -0,0 +1,21 @@
package com.landaiqing.auth.domain.service;
import com.landaiqing.auth.domain.entity.AuthUserBO;
/**
* 用户领域service
*
* @author: landaiqing
* @date: 2024/2/19
*/
public interface AuthUserDomainService {
/**
* 注册
*/
Boolean register(AuthUserBO authUserBO);
}

View File

@@ -0,0 +1,31 @@
package com.landaiqing.auth.domain.service.impl;
import com.landaiqing.auth.common.enums.AuthUserStatusEnum;
import com.landaiqing.auth.common.enums.IsDeletedFlagEnum;
import com.landaiqing .auth.domain.convert.AuthUserBOConverter;
import com.landaiqing.auth.domain.entity.AuthUserBO;
import com.landaiqing.auth.domain.service.AuthUserDomainService;
import com.landaiqing.auth.infra.basic.entity.AuthUser;
import com.landaiqing.auth.infra.basic.service.AuthUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
@Slf4j
public class AuthUserDomainServiceImpl implements AuthUserDomainService {
@Resource
private AuthUserService authUserService;
@Override
public Boolean register(AuthUserBO authUserBO) {
AuthUser authUser = AuthUserBOConverter.INSTANCE.convertBOToEntity(authUserBO);
authUser.setStatus(AuthUserStatusEnum.OPEN.getCode());
authUser.setIsDeleted(IsDeletedFlagEnum.UN_DELETED.getCode());
Integer count = authUserService.insert(authUser);
return count > 0;
}
}

View File

@@ -0,0 +1,52 @@
package com.landaiqing.auth.infra.basic.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* (AuthPermission)实体类
*/
@Data
public class AuthPermission implements Serializable {
private Long id;
private String name;
private Long parentId;
private Integer type;
private String menuUrl;
private Integer status;
private Integer show;
private String icon;
private String permissionKey;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updateBy;
/**
* 更新时间
*/
private Date updateTime;
private Integer isDeleted;
}

View File

@@ -0,0 +1,38 @@
package com.landaiqing.auth.infra.basic.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* (AuthRole)实体类
*/
@Data
public class AuthRole implements Serializable {
private Long id;
private String roleName;
private String roleKey;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updateBy;
/**
* 更新时间
*/
private Date updateTime;
private Integer isDeleted;
}

View File

@@ -0,0 +1,40 @@
package com.landaiqing.auth.infra.basic.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* (AuthRolePermission)实体类
*/
@Data
public class AuthRolePermission implements Serializable {
private Long id;
private Long roleId;
private Long permissionId;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updateBy;
/**
* 更新时间
*/
private Date updateTime;
private Integer isDeleted;
}

View File

@@ -0,0 +1,56 @@
package com.landaiqing.auth.infra.basic.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* (AuthUser)实体类
*/
@Data
public class AuthUser implements Serializable {
private Long id;
private String userName;
private String nickName;
private String email;
private String phone;
private String password;
private Integer sex;
private String avatar;
private Integer status;
private String introduce;
private String extJson;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updateBy;
/**
* 更新时间
*/
private Date updateTime;
private Integer isDeleted;
}

View File

@@ -0,0 +1,39 @@
package com.landaiqing.auth.infra.basic.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* (AuthUserRole)实体类
*/
@Data
public class AuthUserRole implements Serializable {
private Long id;
private Long userId;
private Long roleId;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updateBy;
/**
* 更新时间
*/
private Date updateTime;
private Integer isDeleted;
}

View File

@@ -0,0 +1,84 @@
package com.landaiqing.auth.infra.basic.mapper;
import com.landaiqing.auth.infra.basic.entity.AuthPermission;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* (AuthPermission)表数据库访问层
*
* @author landaiqing
* @since 2024-2-18 18:55:50
*/
public interface AuthPermissionDao {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
AuthPermission queryById(Long id);
/**
* 查询指定行数据
*
* @param authPermission 查询条件
* @return 对象列表
*/
List<AuthPermission> queryAllByLimit(AuthPermission authPermission);
/**
* 统计总行数
*
* @param authPermission 查询条件
* @return 总行数
*/
long count(AuthPermission authPermission);
/**
* 新增数据
*
* @param authPermission 实例对象
* @return 影响行数
*/
int insert(AuthPermission authPermission);
/**
* 批量新增数据MyBatis原生foreach方法
*
* @param entities List<AuthPermission> 实例对象列表
* @return 影响行数
*/
int insertBatch(@Param("entities") List<AuthPermission> entities);
/**
* 批量新增或按主键更新数据MyBatis原生foreach方法
*
* @param entities List<AuthPermission> 实例对象列表
* @return 影响行数
* @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常请自行校验入参
*/
int insertOrUpdateBatch(@Param("entities") List<AuthPermission> entities);
/**
* 修改数据
*
* @param authPermission 实例对象
* @return 影响行数
*/
int update(AuthPermission authPermission);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 影响行数
*/
int deleteById(Long id);
List<AuthPermission> queryByRoleList(@Param("list") List<Long> roleIdList);
}

View File

@@ -0,0 +1,84 @@
package com.landaiqing.auth.infra.basic.mapper;
import com.landaiqing.auth.infra.basic.entity.AuthRole;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* (AuthRole)表数据库访问层
*
* @author landaiqing
* @since 2024-2-18 18:55:50
*/
public interface AuthRoleDao {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
AuthRole queryById(Long id);
/**
* 查询指定行数据
*
* @param authRole 查询条件
* @return 对象列表
*/
AuthRole queryAllByLimit(AuthRole authRole);
/**
* 统计总行数
*
* @param authRole 查询条件
* @return 总行数
*/
long count(AuthRole authRole);
/**
* 新增数据
*
* @param authRole 实例对象
* @return 影响行数
*/
int insert(AuthRole authRole);
/**
* 批量新增数据MyBatis原生foreach方法
*
* @param entities List<AuthRole> 实例对象列表
* @return 影响行数
*/
int insertBatch(@Param("entities") List<AuthRole> entities);
/**
* 批量新增或按主键更新数据MyBatis原生foreach方法
*
* @param entities List<AuthRole> 实例对象列表
* @return 影响行数
* @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常请自行校验入参
*/
int insertOrUpdateBatch(@Param("entities") List<AuthRole> entities);
/**
* 修改数据
*
* @param authRole 实例对象
* @return 影响行数
*/
int update(AuthRole authRole);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 影响行数
*/
int deleteById(Long id);
List<AuthRole> queryByRoleList(@Param("list") List<Long> roleIdList);
}

View File

@@ -0,0 +1,82 @@
package com.landaiqing.auth.infra.basic.mapper;
import com.landaiqing.auth.infra.basic.entity.AuthRolePermission;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* (AuthRolePermission)表数据库访问层
*
* @author landaiqing
* @since 2024-2-18 18:55:50
*/
public interface AuthRolePermissionDao {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
AuthRolePermission queryById(Long id);
/**
* 查询指定行数据
*
* @param authRolePermission 查询条件
* @return 对象列表
*/
List<AuthRolePermission> queryAllByLimit(AuthRolePermission authRolePermission);
/**
* 统计总行数
*
* @param authRolePermission 查询条件
* @return 总行数
*/
long count(AuthRolePermission authRolePermission);
/**
* 新增数据
*
* @param authRolePermission 实例对象
* @return 影响行数
*/
int insert(AuthRolePermission authRolePermission);
/**
* 批量新增数据MyBatis原生foreach方法
*
* @param entities List<AuthRolePermission> 实例对象列表
* @return 影响行数
*/
int insertBatch(@Param("entities") List<AuthRolePermission> entities);
/**
* 批量新增或按主键更新数据MyBatis原生foreach方法
*
* @param entities List<AuthRolePermission> 实例对象列表
* @return 影响行数
* @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常请自行校验入参
*/
int insertOrUpdateBatch(@Param("entities") List<AuthRolePermission> entities);
/**
* 修改数据
*
* @param authRolePermission 实例对象
* @return 影响行数
*/
int update(AuthRolePermission authRolePermission);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 影响行数
*/
int deleteById(Long id);
}

View File

@@ -0,0 +1,84 @@
package com.landaiqing.auth.infra.basic.mapper;
import com.landaiqing.auth.infra.basic.entity.AuthUser;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* (AuthUser)表数据库访问层
*
* @author landaiqing
* @since 2024-2-18 18:55:50
*/
public interface AuthUserDao {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
AuthUser queryById(Long id);
/**
* 查询指定行数据
*
* @param authUser 查询条件
* @return 对象列表
*/
List<AuthUser> queryAllByLimit(AuthUser authUser);
/**
* 统计总行数
*
* @param authUser 查询条件
* @return 总行数
*/
long count(AuthUser authUser);
/**
* 新增数据
*
* @param authUser 实例对象
* @return 影响行数
*/
int insert(AuthUser authUser);
/**
* 批量新增数据MyBatis原生foreach方法
*
* @param entities List<AuthUser> 实例对象列表
* @return 影响行数
*/
int insertBatch(@Param("entities") List<AuthUser> entities);
/**
* 批量新增或按主键更新数据MyBatis原生foreach方法
*
* @param entities List<AuthUser> 实例对象列表
* @return 影响行数
* @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常请自行校验入参
*/
int insertOrUpdateBatch(@Param("entities") List<AuthUser> entities);
/**
* 修改数据
*
* @param authUser 实例对象
* @return 影响行数
*/
int update(AuthUser authUser);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 影响行数
*/
int deleteById(Long id);
Integer updateByUserName(AuthUser authUser);
}

View File

@@ -0,0 +1,82 @@
package com.landaiqing.auth.infra.basic.mapper;
import com.landaiqing.auth.infra.basic.entity.AuthUserRole;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* (AuthUserRole)表数据库访问层
*
* @author landaiqing
* @since 2024-2-18 18:55:50
*/
public interface AuthUserRoleDao {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
AuthUserRole queryById(Long id);
/**
* 查询指定行数据
*
* @param authUserRole 查询条件
* @return 对象列表
*/
List<AuthUserRole> queryAllByLimit(AuthUserRole authUserRole);
/**
* 统计总行数
*
* @param authUserRole 查询条件
* @return 总行数
*/
long count(AuthUserRole authUserRole);
/**
* 新增数据
*
* @param authUserRole 实例对象
* @return 影响行数
*/
int insert(AuthUserRole authUserRole);
/**
* 批量新增数据MyBatis原生foreach方法
*
* @param entities List<AuthUserRole> 实例对象列表
* @return 影响行数
*/
int insertBatch(@Param("entities") List<AuthUserRole> entities);
/**
* 批量新增或按主键更新数据MyBatis原生foreach方法
*
* @param entities List<AuthUserRole> 实例对象列表
* @return 影响行数
* @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常请自行校验入参
*/
int insertOrUpdateBatch(@Param("entities") List<AuthUserRole> entities);
/**
* 修改数据
*
* @param authUserRole 实例对象
* @return 影响行数
*/
int update(AuthUserRole authUserRole);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 影响行数
*/
int deleteById(Long id);
}

View File

@@ -0,0 +1,50 @@
package com.landaiqing.auth.infra.basic.service;
import com.landaiqing.auth.infra.basic.entity.AuthPermission;
import java.util.List;
/**
* (AuthPermission)表服务接口
*
* @author landaiqing
* @since 2024-2-18 18:55:50
*/
public interface AuthPermissionService {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
AuthPermission queryById(Long id);
/**
* 新增数据
*
* @param authPermission 实例对象
* @return 实例对象
*/
int insert(AuthPermission authPermission);
/**
* 修改数据
*
* @param authPermission 实例对象
* @return 实例对象
*/
int update(AuthPermission authPermission);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
boolean deleteById(Long id);
List<AuthPermission> queryByRoleList(List<Long> roleIdList);
}

View File

@@ -0,0 +1,52 @@
package com.landaiqing.auth.infra.basic.service;
import com.landaiqing.auth.infra.basic.entity.AuthRolePermission;
import java.util.List;
/**
* (AuthRolePermission)表服务接口
*
* @author landaiqing
* @since 2024-2-18 18:55:50
*/
public interface AuthRolePermissionService {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
AuthRolePermission queryById(Long id);
/**
* 新增数据
*
* @param authRolePermission 实例对象
* @return 实例对象
*/
AuthRolePermission insert(AuthRolePermission authRolePermission);
int batchInsert(List<AuthRolePermission> authRolePermissionList);
/**
* 修改数据
*
* @param authRolePermission 实例对象
* @return 实例对象
*/
AuthRolePermission update(AuthRolePermission authRolePermission);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
boolean deleteById(Long id);
List<AuthRolePermission> queryByCondition(AuthRolePermission authRolePermission);
}

View File

@@ -0,0 +1,55 @@
package com.landaiqing.auth.infra.basic.service;
import com.landaiqing.auth.infra.basic.entity.AuthRole;
import java.util.List;
/**
* (AuthRole)表服务接口
*
* @author landaiqing
* @since 2024-2-18 18:55:50
*/
public interface AuthRoleService {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
AuthRole queryById(Long id);
/**
* 新增数据
*
* @param authRole 实例对象
* @return 实例对象
*/
int insert(AuthRole authRole);
/**
* 修改数据
*
* @param authRole 实例对象
* @return 实例对象
*/
int update(AuthRole authRole);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
boolean deleteById(Long id);
/**
* 根据条件查询角色
*/
AuthRole queryByCondition(AuthRole authRole);
List<AuthRole> queryByRoleList(List<Long> roleIdList);
}

View File

@@ -0,0 +1,45 @@
package com.landaiqing.auth.infra.basic.service;
import com.landaiqing.auth.infra.basic.entity.AuthUserRole;
/**
* (AuthUserRole)表服务接口
*
* @author landaiqing
* @since 2024-2-18 18:55:50
*/
public interface AuthUserRoleService {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
AuthUserRole queryById(Long id);
/**
* 新增数据
*
* @param authUserRole 实例对象
* @return 实例对象
*/
AuthUserRole insert(AuthUserRole authUserRole);
/**
* 修改数据
*
* @param authUserRole 实例对象
* @return 实例对象
*/
AuthUserRole update(AuthUserRole authUserRole);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
boolean deleteById(Long id);
}

View File

@@ -0,0 +1,54 @@
package com.landaiqing.auth.infra.basic.service;
import com.landaiqing.auth.infra.basic.entity.AuthUser;
import java.util.List;
/**
* (AuthUser)表服务接口
*
* @author landaiqing
* @since 2024-2-18 18:55:50
*/
public interface AuthUserService {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
AuthUser queryById(Long id);
/**
* 新增数据
*
* @param authUser 实例对象
* @return 实例对象
*/
Integer insert(AuthUser authUser);
/**
* 修改数据
*
* @param authUser 实例对象
* @return 实例对象
*/
Integer update(AuthUser authUser);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
boolean deleteById(Long id);
/**
* 根据条件查询数量
*/
List<AuthUser> queryByCondition(AuthUser authUser);
Integer updateByUserName(AuthUser authUser);
}

View File

@@ -0,0 +1,70 @@
package com.landaiqing.auth.infra.basic.service.impl;
import com.landaiqing.auth.infra.basic.entity.AuthPermission;
import com.landaiqing.auth.infra.basic.mapper.AuthPermissionDao;
import com.landaiqing.auth.infra.basic.service.AuthPermissionService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* (AuthPermission)表服务实现类
*
* @author landaiqing
* @since 2023-11-03 00:45:50
*/
@Service("authPermissionService")
public class AuthPermissionServiceImpl implements AuthPermissionService {
@Resource
private AuthPermissionDao authPermissionDao;
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
@Override
public AuthPermission queryById(Long id) {
return this.authPermissionDao.queryById(id);
}
/**
* 新增数据
*
* @param authPermission 实例对象
* @return 实例对象
*/
@Override
public int insert(AuthPermission authPermission) {
return this.authPermissionDao.insert(authPermission);
}
/**
* 修改数据
*
* @param authPermission 实例对象
* @return 实例对象
*/
@Override
public int update(AuthPermission authPermission) {
return this.authPermissionDao.update(authPermission);
}
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
@Override
public boolean deleteById(Long id) {
return this.authPermissionDao.deleteById(id) > 0;
}
@Override
public List<AuthPermission> queryByRoleList(List<Long> roleIdList) {
return this.authPermissionDao.queryByRoleList(roleIdList);
}
}

View File

@@ -0,0 +1,78 @@
package com.landaiqing.auth.infra.basic.service.impl;
import com.landaiqing.auth.infra.basic.entity.AuthRolePermission;
import com.landaiqing.auth.infra.basic.mapper.AuthRolePermissionDao;
import com.landaiqing.auth.infra.basic.service.AuthRolePermissionService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* (AuthRolePermission)表服务实现类
*
* @author landaiqing
* @since 2023-11-04 22:16:00
*/
@Service("authRolePermissionService")
public class AuthRolePermissionServiceImpl implements AuthRolePermissionService {
@Resource
private AuthRolePermissionDao authRolePermissionDao;
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
@Override
public AuthRolePermission queryById(Long id) {
return this.authRolePermissionDao.queryById(id);
}
/**
* 新增数据
*
* @param authRolePermission 实例对象
* @return 实例对象
*/
@Override
public AuthRolePermission insert(AuthRolePermission authRolePermission) {
this.authRolePermissionDao.insert(authRolePermission);
return authRolePermission;
}
@Override
public int batchInsert(List<AuthRolePermission> authRolePermissionList) {
return this.authRolePermissionDao.insertBatch(authRolePermissionList);
}
/**
* 修改数据
*
* @param authRolePermission 实例对象
* @return 实例对象
*/
@Override
public AuthRolePermission update(AuthRolePermission authRolePermission) {
this.authRolePermissionDao.update(authRolePermission);
return this.queryById(authRolePermission.getId());
}
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
@Override
public boolean deleteById(Long id) {
return this.authRolePermissionDao.deleteById(id) > 0;
}
@Override
public List<AuthRolePermission> queryByCondition(AuthRolePermission authRolePermission) {
return this.authRolePermissionDao.queryAllByLimit(authRolePermission);
}
}

View File

@@ -0,0 +1,75 @@
package com.landaiqing.auth.infra.basic.service.impl;
import com.landaiqing.auth.infra.basic.entity.AuthRole;
import com.landaiqing.auth.infra.basic.mapper.AuthRoleDao;
import com.landaiqing.auth.infra.basic.service.AuthRoleService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* (AuthRole)表服务实现类
*
* @author landaiqing
* @since 2024-2-18 18:55:50
*/
@Service("authRoleService")
public class AuthRoleServiceImpl implements AuthRoleService {
@Resource
private AuthRoleDao authRoleDao;
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
@Override
public AuthRole queryById(Long id) {
return this.authRoleDao.queryById(id);
}
/**
* 新增数据
*
* @param authRole 实例对象
* @return 实例对象
*/
@Override
public int insert(AuthRole authRole) {
return this.authRoleDao.insert(authRole);
}
/**
* 修改数据
*
* @param authRole 实例对象
* @return 实例对象
*/
@Override
public int update(AuthRole authRole) {
return this.authRoleDao.update(authRole);
}
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
@Override
public boolean deleteById(Long id) {
return this.authRoleDao.deleteById(id) > 0;
}
@Override
public AuthRole queryByCondition(AuthRole authRole) {
return authRoleDao.queryAllByLimit(authRole);
}
@Override
public List<AuthRole> queryByRoleList(List<Long> roleIdList) {
return authRoleDao.queryByRoleList(roleIdList);
}
}

View File

@@ -0,0 +1,66 @@
package com.landaiqing.auth.infra.basic.service.impl;
import com.landaiqing.auth.infra.basic.entity.AuthUserRole;
import com.landaiqing.auth.infra.basic.mapper.AuthUserRoleDao;
import com.landaiqing.auth.infra.basic.service.AuthUserRoleService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* (AuthUserRole)表服务实现类
*
* @author landaiqing
* @since 2023-11-03 00:18:09
*/
@Service("authUserRoleService")
public class AuthUserRoleServiceImpl implements AuthUserRoleService {
@Resource
private AuthUserRoleDao authUserRoleDao;
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
@Override
public AuthUserRole queryById(Long id) {
return this.authUserRoleDao.queryById(id);
}
/**
* 新增数据
*
* @param authUserRole 实例对象
* @return 实例对象
*/
@Override
public AuthUserRole insert(AuthUserRole authUserRole) {
this.authUserRoleDao.insert(authUserRole);
return authUserRole;
}
/**
* 修改数据
*
* @param authUserRole 实例对象
* @return 实例对象
*/
@Override
public AuthUserRole update(AuthUserRole authUserRole) {
this.authUserRoleDao.update(authUserRole);
return this.queryById(authUserRole.getId());
}
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
@Override
public boolean deleteById(Long id) {
return this.authUserRoleDao.deleteById(id) > 0;
}
}

View File

@@ -0,0 +1,76 @@
package com.landaiqing.auth.infra.basic.service.impl;
import com.landaiqing.auth.infra.basic.entity.AuthUser;
import com.landaiqing.auth.infra.basic.mapper.AuthUserDao;
import com.landaiqing.auth.infra.basic.service.AuthUserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* (AuthUser)表服务实现类
*
* @author landaiqing
* @since 2023-11-01 01:25:23
*/
@Service("authUserService")
public class AuthUserServiceImpl implements AuthUserService {
@Resource
private AuthUserDao authUserDao;
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
@Override
public AuthUser queryById(Long id) {
return this.authUserDao.queryById(id);
}
/**
* 新增数据
*
* @param authUser 实例对象
* @return 实例对象
*/
@Override
public Integer insert(AuthUser authUser) {
return this.authUserDao.insert(authUser);
}
/**
* 修改数据
*
* @param authUser 实例对象
* @return 实例对象
*/
@Override
public Integer update(AuthUser authUser) {
return this.authUserDao.update(authUser);
}
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
@Override
public boolean deleteById(Long id) {
return this.authUserDao.deleteById(id) > 0;
}
@Override
public List<AuthUser> queryByCondition(AuthUser authUser) {
return this.authUserDao.queryAllByLimit(authUser);
}
@Override
public Integer updateByUserName(AuthUser authUser) {
return this.authUserDao.updateByUserName(authUser);
}
}

View File

@@ -0,0 +1,51 @@
package com.landaiqing.auth.infra.basic.utils;
import com.alibaba.druid.filter.config.ConfigTools;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
/**
* 数据库加密util
*
* @author: landaiqing
* @date: 2024-2-18 18:55:50
*/
public class DruidEncryptUtil {
private static String publicKey;
private static String privateKey;
static {
try {
String[] keyPair = ConfigTools.genKeyPair(512);
privateKey = keyPair[0];
System.out.println("privateKey:" + privateKey);
publicKey = keyPair[1];
System.out.println("publicKey:" + publicKey);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchProviderException e) {
e.printStackTrace();
}
}
public static String encrypt(String plainText) throws Exception {
String encrypt = ConfigTools.encrypt(privateKey, plainText);
System.out.println("encrypt:" + encrypt);
return encrypt;
}
public static String decrypt(String encryptText) throws Exception {
String decrypt = ConfigTools.decrypt(publicKey, encryptText);
System.out.println("decrypt:" + decrypt);
return decrypt;
}
public static void main(String[] args) throws Exception {
String encrypt = encrypt("123456");
System.out.println("encrypt:" + encrypt);
}
}

View File

@@ -0,0 +1,17 @@
package com.landaiqing.auth.infra.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisConfiguration {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new MybatisPlusAllSqlLog());
return mybatisPlusInterceptor;
}
}

View File

@@ -0,0 +1,116 @@
package com.landaiqing.auth.infra.config;
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.type.TypeHandlerRegistry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;
import java.sql.SQLException;
import java.text.DateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.regex.Matcher;
public class MybatisPlusAllSqlLog implements InnerInterceptor {
public static final Logger log = LoggerFactory.getLogger("sys-sql");
@Override
public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
logInfo(boundSql, ms, parameter);
}
@Override
public void beforeUpdate(Executor executor, MappedStatement ms, Object parameter) throws SQLException {
BoundSql boundSql = ms.getBoundSql(parameter);
logInfo(boundSql, ms, parameter);
}
private static void logInfo(BoundSql boundSql, MappedStatement ms, Object parameter) {
try {
log.info("parameter = " + parameter);
// 获取到节点的id,即sql语句的id
String sqlId = ms.getId();
log.info("sqlId = " + sqlId);
// 获取节点的配置
Configuration configuration = ms.getConfiguration();
// 获取到最终的sql语句
String sql = getSql(configuration, boundSql, sqlId);
log.info("完整的sql:{}", sql);
} catch (Exception e) {
log.error("异常:{}", e.getLocalizedMessage(), e);
}
}
// 封装了一下sql语句使得结果返回完整xml路径下的sql语句节点id + sql语句
public static String getSql(Configuration configuration, BoundSql boundSql, String sqlId) {
return sqlId + ":" + showSql(configuration, boundSql);
}
// 进行?的替换
public static String showSql(Configuration configuration, BoundSql boundSql) {
// 获取参数
Object parameterObject = boundSql.getParameterObject();
List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
// sql语句中多个空格都用一个空格代替
String sql = boundSql.getSql().replaceAll("[\\s]+", " ");
if (!CollectionUtils.isEmpty(parameterMappings) && parameterObject != null) {
// 获取类型处理器注册器类型处理器的功能是进行java类型和数据库类型的转换
TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();
// 如果根据parameterObject.getClass()可以找到对应的类型,则替换
if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {
sql = sql.replaceFirst("\\?",
Matcher.quoteReplacement(getParameterValue(parameterObject)));
} else {
// MetaObject主要是封装了originalObject对象提供了get和set的方法用于获取和设置originalObject的属性值,主要支持对JavaBean、Collection、Map三种类型对象的操作
MetaObject metaObject = configuration.newMetaObject(parameterObject);
for (ParameterMapping parameterMapping : parameterMappings) {
String propertyName = parameterMapping.getProperty();
if (metaObject.hasGetter(propertyName)) {
Object obj = metaObject.getValue(propertyName);
sql = sql.replaceFirst("\\?",
Matcher.quoteReplacement(getParameterValue(obj)));
} else if (boundSql.hasAdditionalParameter(propertyName)) {
// 该分支是动态sql
Object obj = boundSql.getAdditionalParameter(propertyName);
sql = sql.replaceFirst("\\?",
Matcher.quoteReplacement(getParameterValue(obj)));
} else {
// 打印出缺失,提醒该参数缺失并防止错位
sql = sql.replaceFirst("\\?", "缺失");
}
}
}
}
return sql;
}
// 如果参数是String则添加单引号 如果是日期,则转换为时间格式器并加单引号; 对参数是null和不是null的情况作了处理
private static String getParameterValue(Object obj) {
String value;
if (obj instanceof String) {
value = "'" + obj.toString() + "'";
} else if (obj instanceof Date) {
DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.DEFAULT,
DateFormat.DEFAULT, Locale.CHINA);
value = "'" + formatter.format(new Date()) + "'";
} else {
if (obj != null) {
value = obj.toString();
} else {
value = "";
}
}
return value;
}
}

View File

@@ -0,0 +1,52 @@
package com.landaiqing.auth.infra.config;
import org.apache.ibatis.cache.CacheKey;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Properties;
@Intercepts({
@Signature(type = Executor.class, method = "update", args = {MappedStatement.class,
Object.class}),
@Signature(type = Executor.class, method = "query", args = {MappedStatement.class,
Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class})})
public class SqlStatementInterceptor implements Interceptor {
public static final Logger log = LoggerFactory.getLogger("sys-sql");
@Override
public Object intercept(Invocation invocation) throws Throwable {
long startTime = System.currentTimeMillis();
try {
return invocation.proceed();
} finally {
long timeConsuming = System.currentTimeMillis() - startTime;
log.info("执行SQL:{}ms", timeConsuming);
if (timeConsuming > 999 && timeConsuming < 5000) {
log.info("执行SQL大于1s:{}ms", timeConsuming);
} else if (timeConsuming >= 5000 && timeConsuming < 10000) {
log.info("执行SQL大于5s:{}ms", timeConsuming);
} else if (timeConsuming >= 10000) {
log.info("执行SQL大于10s:{}ms", timeConsuming);
}
}
}
@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
@Override
public void setProperties(Properties properties) {
}
}

View File

@@ -0,0 +1,232 @@
<?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.landaiqing.auth.infra.basic.mapper.AuthPermissionDao">
<resultMap type="com.landaiqing.auth.infra.basic.entity.AuthPermission" id="AuthPermissionMap">
<result property="id" column="id" jdbcType="INTEGER"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="parentId" column="parent_id" jdbcType="INTEGER"/>
<result property="type" column="type" jdbcType="INTEGER"/>
<result property="menuUrl" column="menu_url" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="INTEGER"/>
<result property="show" column="show" jdbcType="INTEGER"/>
<result property="icon" column="icon" jdbcType="VARCHAR"/>
<result property="permissionKey" column="permission_key" jdbcType="VARCHAR"/>
<result property="createdBy" column="created_by" jdbcType="VARCHAR"/>
<result property="createdTime" column="created_time" jdbcType="TIMESTAMP"/>
<result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="isDeleted" column="is_deleted" jdbcType="INTEGER"/>
</resultMap>
<!--查询单个-->
<select id="queryById" resultMap="AuthPermissionMap">
select id,
name,
parent_id,
type,
menu_url,
status, `show`, icon, permission_key, created_by, created_time, update_by, update_time, is_deleted
from auth_permission
where id = #{id}
</select>
<!--查询指定行数据-->
<select id="queryAllByLimit" resultMap="AuthPermissionMap">
select
id, name, parent_id, type, menu_url, status, `show`, icon, permission_key, created_by, created_time, update_by,
update_time, is_deleted
from auth_permission
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="name != null and name != ''">
and name = #{name}
</if>
<if test="parentId != null">
and parent_id = #{parentId}
</if>
<if test="type != null">
and type = #{type}
</if>
<if test="menuUrl != null and menuUrl != ''">
and menu_url = #{menuUrl}
</if>
<if test="status != null">
and status = #{status}
</if>
<if test="show != null">
and show = #{show}
</if>
<if test="icon != null and icon != ''">
and icon = #{icon}
</if>
<if test="permissionKey != null and permissionKey != ''">
and permission_key = #{permissionKey}
</if>
<if test="createdBy != null and createdBy != ''">
and created_by = #{createdBy}
</if>
<if test="createdTime != null">
and created_time = #{createdTime}
</if>
<if test="updateBy != null and updateBy != ''">
and update_by = #{updateBy}
</if>
<if test="updateTime != null">
and update_time = #{updateTime}
</if>
<if test="isDeleted != null">
and is_deleted = #{isDeleted}
</if>
</where>
</select>
<!--统计总行数-->
<select id="count" resultType="java.lang.Long">
select count(1)
from auth_permission
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="name != null and name != ''">
and name = #{name}
</if>
<if test="parentId != null">
and parent_id = #{parentId}
</if>
<if test="type != null">
and type = #{type}
</if>
<if test="menuUrl != null and menuUrl != ''">
and menu_url = #{menuUrl}
</if>
<if test="status != null">
and status = #{status}
</if>
<if test="show != null">
and show = #{show}
</if>
<if test="icon != null and icon != ''">
and icon = #{icon}
</if>
<if test="permissionKey != null and permissionKey != ''">
and permission_key = #{permissionKey}
</if>
<if test="createdBy != null and createdBy != ''">
and created_by = #{createdBy}
</if>
<if test="createdTime != null">
and created_time = #{createdTime}
</if>
<if test="updateBy != null and updateBy != ''">
and update_by = #{updateBy}
</if>
<if test="updateTime != null">
and update_time = #{updateTime}
</if>
<if test="isDeleted != null">
and is_deleted = #{isDeleted}
</if>
</where>
</select>
<select id="queryByRoleList" resultMap="AuthPermissionMap">
select * from auth_permission
where id in
<foreach open="(" close=")" collection="list" item="id" separator=",">
#{id}
</foreach>
</select>
<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into auth_permission(name, parent_id, `type`, menu_url, status, `show`, icon, permission_key, created_by, created_time, update_by, update_time, is_deleted)
values (#{name}, #{parentId}, #{type}, #{menuUrl}, #{status}, #{show}, #{icon}, #{permissionKey}, #{createdBy}, #{createdTime}, #{updateBy}, #{updateTime}, #{isDeleted})
</insert>
<insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
insert into auth_permission(name, parent_id, `type`, menu_url, status, `show`, icon, permission_key, created_by, created_time, update_by, update_time, is_deleted)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.name}, #{entity.parentId}, #{entity.type}, #{entity.menuUrl}, #{entity.status}, #{entity.show}, #{entity.icon}, #{entity.permissionKey}, #{entity.createdBy}, #{entity.createdTime}, #{entity.updateBy}, #{entity.updateTime}, #{entity.isDeleted})
</foreach>
</insert>
<insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
insert into auth_permission(name, parent_id, `type`, menu_url, status, `show`, icon, permission_key, created_by, created_time, update_by, update_time, is_deleted)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.name}, #{entity.parentId}, #{entity.type}, #{entity.menuUrl}, #{entity.status}, #{entity.show}, #{entity.icon}, #{entity.permissionKey}, #{entity.createdBy}, #{entity.createdTime}, #{entity.updateBy}, #{entity.updateTime}, #{entity.isDeleted})
</foreach>
on duplicate key update
name = values(name),
parent_id = values(parent_id),
`type` = values(type),
menu_url = values(menu_url),
status = values(status),
`show` = values(show),
icon = values(icon),
permission_key = values(permission_key),
created_by = values(created_by),
created_time = values(created_time),
update_by = values(update_by),
update_time = values(update_time),
is_deleted = values(is_deleted)
</insert>
<!--通过主键修改数据-->
<update id="update">
update auth_permission
<set>
<if test="name != null and name != ''">
name = #{name},
</if>
<if test="parentId != null">
parent_id = #{parentId},
</if>
<if test="type != null">
`type` = #{type},
</if>
<if test="menuUrl != null and menuUrl != ''">
menu_url = #{menuUrl},
</if>
<if test="status != null">
status = #{status},
</if>
<if test="show != null">
`show` = #{show},
</if>
<if test="icon != null and icon != ''">
icon = #{icon},
</if>
<if test="permissionKey != null and permissionKey != ''">
permission_key = #{permissionKey},
</if>
<if test="createdBy != null and createdBy != ''">
created_by = #{createdBy},
</if>
<if test="createdTime != null">
created_time = #{createdTime},
</if>
<if test="updateBy != null and updateBy != ''">
update_by = #{updateBy},
</if>
<if test="updateTime != null">
update_time = #{updateTime},
</if>
<if test="isDeleted != null">
is_deleted = #{isDeleted},
</if>
</set>
where id = #{id}
</update>
<!--通过主键删除-->
<delete id="deleteById">
delete from auth_permission where id = #{id}
</delete>
</mapper>

View File

@@ -0,0 +1,173 @@
<?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.landaiqing.auth.infra.basic.mapper.AuthRoleDao">
<resultMap type="com.landaiqing.auth.infra.basic.entity.AuthRole" id="AuthRoleMap">
<result property="id" column="id" jdbcType="INTEGER"/>
<result property="roleName" column="role_name" jdbcType="VARCHAR"/>
<result property="roleKey" column="role_key" jdbcType="VARCHAR"/>
<result property="createdBy" column="created_by" jdbcType="VARCHAR"/>
<result property="createdTime" column="created_time" jdbcType="TIMESTAMP"/>
<result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="isDeleted" column="is_deleted" jdbcType="INTEGER"/>
</resultMap>
<!--查询单个-->
<select id="queryById" resultMap="AuthRoleMap">
select id,
role_name,
role_key,
created_by,
created_time,
update_by,
update_time,
is_deleted
from auth_role
where id = #{id}
</select>
<!--查询指定行数据-->
<select id="queryAllByLimit" resultMap="AuthRoleMap">
select
id, role_name, role_key, created_by, created_time, update_by, update_time, is_deleted
from auth_role
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="roleName != null and roleName != ''">
and role_name = #{roleName}
</if>
<if test="roleKey != null and roleKey != ''">
and role_key = #{roleKey}
</if>
<if test="createdBy != null and createdBy != ''">
and created_by = #{createdBy}
</if>
<if test="createdTime != null">
and created_time = #{createdTime}
</if>
<if test="updateBy != null and updateBy != ''">
and update_by = #{updateBy}
</if>
<if test="updateTime != null">
and update_time = #{updateTime}
</if>
<if test="isDeleted != null">
and is_deleted = #{isDeleted}
</if>
</where>
</select>
<!--统计总行数-->
<select id="count" resultType="java.lang.Long">
select count(1)
from auth_role
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="roleName != null and roleName != ''">
and role_name = #{roleName}
</if>
<if test="roleKey != null and roleKey != ''">
and role_key = #{roleKey}
</if>
<if test="createdBy != null and createdBy != ''">
and created_by = #{createdBy}
</if>
<if test="createdTime != null">
and created_time = #{createdTime}
</if>
<if test="updateBy != null and updateBy != ''">
and update_by = #{updateBy}
</if>
<if test="updateTime != null">
and update_time = #{updateTime}
</if>
<if test="isDeleted != null">
and is_deleted = #{isDeleted}
</if>
</where>
</select>
<select id="queryByRoleList" resultMap="AuthRoleMap">
select *
from auth_role
where id in
<foreach open="(" close=")" collection="list" item="id" separator=",">
#{id}
</foreach>
</select>
<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into auth_role(role_name, role_key, created_by, created_time, update_by, update_time, is_deleted)
values (#{roleName}, #{roleKey}, #{createdBy}, #{createdTime}, #{updateBy}, #{updateTime}, #{isDeleted})
</insert>
<insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
insert into auth_role(role_name, role_key, created_by, created_time, update_by, update_time, is_deleted)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.roleName}, #{entity.roleKey}, #{entity.createdBy}, #{entity.createdTime}, #{entity.updateBy},
#{entity.updateTime}, #{entity.isDeleted})
</foreach>
</insert>
<insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
insert into auth_role(role_name, role_key, created_by, created_time, update_by, update_time, is_deleted)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.roleName}, #{entity.roleKey}, #{entity.createdBy}, #{entity.createdTime}, #{entity.updateBy},
#{entity.updateTime}, #{entity.isDeleted})
</foreach>
on duplicate key update
role_name = values(role_name),
role_key = values(role_key),
created_by = values(created_by),
created_time = values(created_time),
update_by = values(update_by),
update_time = values(update_time),
is_deleted = values(is_deleted)
</insert>
<!--通过主键修改数据-->
<update id="update">
update auth_role
<set>
<if test="roleName != null and roleName != ''">
role_name = #{roleName},
</if>
<if test="roleKey != null and roleKey != ''">
role_key = #{roleKey},
</if>
<if test="createdBy != null and createdBy != ''">
created_by = #{createdBy},
</if>
<if test="createdTime != null">
created_time = #{createdTime},
</if>
<if test="updateBy != null and updateBy != ''">
update_by = #{updateBy},
</if>
<if test="updateTime != null">
update_time = #{updateTime},
</if>
<if test="isDeleted != null">
is_deleted = #{isDeleted},
</if>
</set>
where id = #{id}
</update>
<!--通过主键删除-->
<delete id="deleteById">
delete
from auth_role
where id = #{id}
</delete>
</mapper>

View File

@@ -0,0 +1,156 @@
<?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.landaiqing.auth.infra.basic.mapper.AuthRolePermissionDao">
<resultMap type="com.landaiqing.auth.infra.basic.entity.AuthRolePermission" id="AuthRolePermissionMap">
<result property="id" column="id" jdbcType="INTEGER"/>
<result property="roleId" column="role_id" jdbcType="INTEGER"/>
<result property="permissionId" column="permission_id" jdbcType="INTEGER"/>
<result property="createdBy" column="created_by" jdbcType="VARCHAR"/>
<result property="createdTime" column="created_time" jdbcType="TIMESTAMP"/>
<result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="isDeleted" column="is_deleted" jdbcType="INTEGER"/>
</resultMap>
<!--查询单个-->
<select id="queryById" resultMap="AuthRolePermissionMap">
select
id, role_id, permission_id, created_by, created_time, update_by, update_time, is_deleted
from auth_role_premission
where id = #{id}
</select>
<!--查询指定行数据-->
<select id="queryAllByLimit" resultMap="AuthRolePermissionMap">
select
id, role_id, permission_id, created_by, created_time, update_by, update_time, is_deleted
from auth_role_permission
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="roleId != null">
and role_id = #{roleId}
</if>
<if test="permissionId != null">
and permission_id = #{permissionId}
</if>
<if test="createdBy != null and createdBy != ''">
and created_by = #{createdBy}
</if>
<if test="createdTime != null">
and created_time = #{createdTime}
</if>
<if test="updateBy != null and updateBy != ''">
and update_by = #{updateBy}
</if>
<if test="updateTime != null">
and update_time = #{updateTime}
</if>
<if test="isDeleted != null">
and is_deleted = #{isDeleted}
</if>
</where>
</select>
<!--统计总行数-->
<select id="count" resultType="java.lang.Long">
select count(1)
from auth_role_permission
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="roleId != null">
and role_id = #{roleId}
</if>
<if test="permissionId != null">
and permission_id = #{permissionId}
</if>
<if test="createdBy != null and createdBy != ''">
and created_by = #{createdBy}
</if>
<if test="createdTime != null">
and created_time = #{createdTime}
</if>
<if test="updateBy != null and updateBy != ''">
and update_by = #{updateBy}
</if>
<if test="updateTime != null">
and update_time = #{updateTime}
</if>
<if test="isDeleted != null">
and is_deleted = #{isDeleted}
</if>
</where>
</select>
<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into auth_role_premission(role_id, permission_id, created_by, created_time, update_by, update_time, is_deleted)
values (#{roleId}, #{permissionId}, #{createdBy}, #{createdTime}, #{updateBy}, #{updateTime}, #{isDeleted})
</insert>
<insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
insert into auth_role_permission(role_id, permission_id, created_by, created_time, update_by, update_time,
is_deleted)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.roleId}, #{entity.permissionId}, #{entity.createdBy}, #{entity.createdTime}, #{entity.updateBy},
#{entity.updateTime}, #{entity.isDeleted})
</foreach>
</insert>
<insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
insert into auth_role_permission(role_id, permission_id, created_by, created_time, update_by, update_time, is_deleted)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.roleId}, #{entity.permissionId}, #{entity.createdBy}, #{entity.createdTime}, #{entity.updateBy}, #{entity.updateTime}, #{entity.isDeleted})
</foreach>
on duplicate key update
role_id = values(role_id),
permission_id = values(permission_id),
created_by = values(created_by),
created_time = values(created_time),
update_by = values(update_by),
update_time = values(update_time),
is_deleted = values(is_deleted)
</insert>
<!--通过主键修改数据-->
<update id="update">
update auth_role_permission
<set>
<if test="roleId != null">
role_id = #{roleId},
</if>
<if test="permissionId != null">
permission_id = #{permissionId},
</if>
<if test="createdBy != null and createdBy != ''">
created_by = #{createdBy},
</if>
<if test="createdTime != null">
created_time = #{createdTime},
</if>
<if test="updateBy != null and updateBy != ''">
update_by = #{updateBy},
</if>
<if test="updateTime != null">
update_time = #{updateTime},
</if>
<if test="isDeleted != null">
is_deleted = #{isDeleted},
</if>
</set>
where id = #{id}
</update>
<!--通过主键删除-->
<delete id="deleteById">
delete from auth_role_premission where id = #{id}
</delete>
</mapper>

View File

@@ -0,0 +1,294 @@
<?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.landaiqing.auth.infra.basic.mapper.AuthUserDao">
<resultMap type="com.landaiqing.auth.infra.basic.entity.AuthUser" id="AuthUserMap">
<result property="id" column="id" jdbcType="INTEGER"/>
<result property="userName" column="user_name" jdbcType="VARCHAR"/>
<result property="nickName" column="nick_name" jdbcType="VARCHAR"/>
<result property="email" column="email" jdbcType="VARCHAR"/>
<result property="phone" column="phone" jdbcType="VARCHAR"/>
<result property="password" column="password" jdbcType="VARCHAR"/>
<result property="sex" column="sex" jdbcType="INTEGER"/>
<result property="avatar" column="avatar" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="INTEGER"/>
<result property="introduce" column="introduce" jdbcType="VARCHAR"/>
<result property="extJson" column="ext_json" jdbcType="VARCHAR"/>
<result property="createdBy" column="created_by" jdbcType="VARCHAR"/>
<result property="createdTime" column="created_time" jdbcType="TIMESTAMP"/>
<result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="isDeleted" column="is_deleted" jdbcType="INTEGER"/>
</resultMap>
<!--查询单个-->
<select id="queryById" resultMap="AuthUserMap">
select
id, user_name, nick_name, email, phone, password, sex, avatar, status, introduce, ext_json, created_by, created_time, update_by, update_time, is_deleted
from auth_user
where id = #{id}
</select>
<!--查询指定行数据-->
<select id="queryAllByLimit" resultMap="AuthUserMap">
select
id, user_name, nick_name, email, phone, password, sex, avatar, status, introduce, ext_json, created_by, created_time, update_by, update_time, is_deleted
from auth_user
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="userName != null and userName != ''">
and user_name = #{userName}
</if>
<if test="nickName != null and nickName != ''">
and nick_name = #{nickName}
</if>
<if test="email != null and email != ''">
and email = #{email}
</if>
<if test="phone != null and phone != ''">
and phone = #{phone}
</if>
<if test="password != null and password != ''">
and password = #{password}
</if>
<if test="sex != null">
and sex = #{sex}
</if>
<if test="avatar != null and avatar != ''">
and avatar = #{avatar}
</if>
<if test="status != null">
and status = #{status}
</if>
<if test="introduce != null and introduce != ''">
and introduce = #{introduce}
</if>
<if test="extJson != null and extJson != ''">
and ext_json = #{extJson}
</if>
<if test="createdBy != null and createdBy != ''">
and created_by = #{createdBy}
</if>
<if test="createdTime != null">
and created_time = #{createdTime}
</if>
<if test="updateBy != null and updateBy != ''">
and update_by = #{updateBy}
</if>
<if test="updateTime != null">
and update_time = #{updateTime}
</if>
<if test="isDeleted != null">
and is_deleted = #{isDeleted}
</if>
</where>
</select>
<!--统计总行数-->
<select id="count" resultType="java.lang.Long">
select count(1)
from auth_user
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="userName != null and userName != ''">
and user_name = #{userName}
</if>
<if test="nickName != null and nickName != ''">
and nick_name = #{nickName}
</if>
<if test="email != null and email != ''">
and email = #{email}
</if>
<if test="phone != null and phone != ''">
and phone = #{phone}
</if>
<if test="password != null and password != ''">
and password = #{password}
</if>
<if test="sex != null">
and sex = #{sex}
</if>
<if test="avatar != null and avatar != ''">
and avatar = #{avatar}
</if>
<if test="status != null">
and status = #{status}
</if>
<if test="introduce != null and introduce != ''">
and introduce = #{introduce}
</if>
<if test="extJson != null and extJson != ''">
and ext_json = #{extJson}
</if>
<if test="createdBy != null and createdBy != ''">
and created_by = #{createdBy}
</if>
<if test="createdTime != null">
and created_time = #{createdTime}
</if>
<if test="updateBy != null and updateBy != ''">
and update_by = #{updateBy}
</if>
<if test="updateTime != null">
and update_time = #{updateTime}
</if>
<if test="isDeleted != null">
and is_deleted = #{isDeleted}
</if>
</where>
</select>
<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
<selectKey resultType="java.lang.Long" keyProperty="id" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
insert into auth_user(user_name, nick_name, email, phone, password, sex, avatar, status, introduce, ext_json, created_by, created_time, update_by, update_time, is_deleted)
values (#{userName}, #{nickName}, #{email}, #{phone}, #{password}, #{sex}, #{avatar}, #{status}, #{introduce}, #{extJson}, #{createdBy}, #{createdTime}, #{updateBy}, #{updateTime}, #{isDeleted})
</insert>
<insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
insert into auth_user(user_name, nick_name, email, phone, password, sex, avatar, status, introduce, ext_json, created_by, created_time, update_by, update_time, is_deleted)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.userName}, #{entity.nickName}, #{entity.email}, #{entity.phone}, #{entity.password}, #{entity.sex}, #{entity.avatar}, #{entity.status}, #{entity.introduce}, #{entity.extJson}, #{entity.createdBy}, #{entity.createdTime}, #{entity.updateBy}, #{entity.updateTime}, #{entity.isDeleted})
</foreach>
</insert>
<insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
insert into auth_user(user_name, nick_name, email, phone, password, sex, avatar, status, introduce, ext_json, created_by, created_time, update_by, update_time, is_deleted)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.userName}, #{entity.nickName}, #{entity.email}, #{entity.phone}, #{entity.password}, #{entity.sex}, #{entity.avatar}, #{entity.status}, #{entity.introduce}, #{entity.extJson}, #{entity.createdBy}, #{entity.createdTime}, #{entity.updateBy}, #{entity.updateTime}, #{entity.isDeleted})
</foreach>
on duplicate key update
user_name = values(user_name),
nick_name = values(nick_name),
email = values(email),
phone = values(phone),
password = values(password),
sex = values(sex),
avatar = values(avatar),
status = values(status),
introduce = values(introduce),
ext_json = values(ext_json),
created_by = values(created_by),
created_time = values(created_time),
update_by = values(update_by),
update_time = values(update_time),
is_deleted = values(is_deleted)
</insert>
<!--通过主键修改数据-->
<update id="update">
update auth_user
<set>
<if test="userName != null and userName != ''">
user_name = #{userName},
</if>
<if test="nickName != null and nickName != ''">
nick_name = #{nickName},
</if>
<if test="email != null and email != ''">
email = #{email},
</if>
<if test="phone != null and phone != ''">
phone = #{phone},
</if>
<if test="password != null and password != ''">
password = #{password},
</if>
<if test="sex != null">
sex = #{sex},
</if>
<if test="avatar != null and avatar != ''">
avatar = #{avatar},
</if>
<if test="status != null">
status = #{status},
</if>
<if test="introduce != null and introduce != ''">
introduce = #{introduce},
</if>
<if test="extJson != null and extJson != ''">
ext_json = #{extJson},
</if>
<if test="createdBy != null and createdBy != ''">
created_by = #{createdBy},
</if>
<if test="createdTime != null">
created_time = #{createdTime},
</if>
<if test="updateBy != null and updateBy != ''">
update_by = #{updateBy},
</if>
<if test="updateTime != null">
update_time = #{updateTime},
</if>
<if test="isDeleted != null">
is_deleted = #{isDeleted},
</if>
</set>
where id = #{id}
</update>
<update id="updateByUserName">
update auth_user
<set>
<if test="nickName != null and nickName != ''">
nick_name = #{nickName},
</if>
<if test="email != null and email != ''">
email = #{email},
</if>
<if test="phone != null and phone != ''">
phone = #{phone},
</if>
<if test="password != null and password != ''">
password = #{password},
</if>
<if test="sex != null">
sex = #{sex},
</if>
<if test="avatar != null and avatar != ''">
avatar = #{avatar},
</if>
<if test="status != null">
status = #{status},
</if>
<if test="introduce != null and introduce != ''">
introduce = #{introduce},
</if>
<if test="extJson != null and extJson != ''">
ext_json = #{extJson},
</if>
<if test="createdBy != null and createdBy != ''">
created_by = #{createdBy},
</if>
<if test="createdTime != null">
created_time = #{createdTime},
</if>
<if test="updateBy != null and updateBy != ''">
update_by = #{updateBy},
</if>
<if test="updateTime != null">
update_time = #{updateTime},
</if>
<if test="isDeleted != null">
is_deleted = #{isDeleted},
</if>
</set>
where user_name = #{userName}
</update>
<!--通过主键删除-->
<delete id="deleteById">
delete from auth_user where id = #{id}
</delete>
</mapper>

View File

@@ -0,0 +1,154 @@
<?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.landaiqing.auth.infra.basic.mapper.AuthUserRoleDao">
<resultMap type="com.landaiqing.auth.infra.basic.entity.AuthUserRole" id="AuthUserRoleMap">
<result property="id" column="id" jdbcType="INTEGER"/>
<result property="userId" column="user_id" jdbcType="INTEGER"/>
<result property="roleId" column="role_id" jdbcType="INTEGER"/>
<result property="createdBy" column="created_by" jdbcType="VARCHAR"/>
<result property="createdTime" column="created_time" jdbcType="TIMESTAMP"/>
<result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="isDeleted" column="is_deleted" jdbcType="INTEGER"/>
</resultMap>
<!--查询单个-->
<select id="queryById" resultMap="AuthUserRoleMap">
select
id, user_id, role_id, created_by, created_time, update_by, update_time, is_deleted
from auth_user_role
where id = #{id}
</select>
<!--查询指定行数据-->
<select id="queryAllByLimit" resultMap="AuthUserRoleMap">
select
id, user_id, role_id, created_by, created_time, update_by, update_time, is_deleted
from auth_user_role
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="userId != null">
and user_id = #{userId}
</if>
<if test="roleId != null">
and role_id = #{roleId}
</if>
<if test="createdBy != null and createdBy != ''">
and created_by = #{createdBy}
</if>
<if test="createdTime != null">
and created_time = #{createdTime}
</if>
<if test="updateBy != null and updateBy != ''">
and update_by = #{updateBy}
</if>
<if test="updateTime != null">
and update_time = #{updateTime}
</if>
<if test="isDeleted != null">
and is_deleted = #{isDeleted}
</if>
</where>
</select>
<!--统计总行数-->
<select id="count" resultType="java.lang.Long">
select count(1)
from auth_user_role
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="userId != null">
and user_id = #{userId}
</if>
<if test="roleId != null">
and role_id = #{roleId}
</if>
<if test="createdBy != null and createdBy != ''">
and created_by = #{createdBy}
</if>
<if test="createdTime != null">
and created_time = #{createdTime}
</if>
<if test="updateBy != null and updateBy != ''">
and update_by = #{updateBy}
</if>
<if test="updateTime != null">
and update_time = #{updateTime}
</if>
<if test="isDeleted != null">
and is_deleted = #{isDeleted}
</if>
</where>
</select>
<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into auth_user_role(user_id, role_id, created_by, created_time, update_by, update_time, is_deleted)
values (#{userId}, #{roleId}, #{createdBy}, #{createdTime}, #{updateBy}, #{updateTime}, #{isDeleted})
</insert>
<insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
insert into auth_user_role(user_id, role_id, created_by, created_time, update_by, update_time, is_deleted)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.userId}, #{entity.roleId}, #{entity.createdBy}, #{entity.createdTime}, #{entity.updateBy}, #{entity.updateTime}, #{entity.isDeleted})
</foreach>
</insert>
<insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
insert into auth_user_role(user_id, role_id, created_by, created_time, update_by, update_time, is_deleted)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.userId}, #{entity.roleId}, #{entity.createdBy}, #{entity.createdTime}, #{entity.updateBy}, #{entity.updateTime}, #{entity.isDeleted})
</foreach>
on duplicate key update
user_id = values(user_id),
role_id = values(role_id),
created_by = values(created_by),
created_time = values(created_time),
update_by = values(update_by),
update_time = values(update_time),
is_deleted = values(is_deleted)
</insert>
<!--通过主键修改数据-->
<update id="update">
update auth_user_role
<set>
<if test="userId != null">
user_id = #{userId},
</if>
<if test="roleId != null">
role_id = #{roleId},
</if>
<if test="createdBy != null and createdBy != ''">
created_by = #{createdBy},
</if>
<if test="createdTime != null">
created_time = #{createdTime},
</if>
<if test="updateBy != null and updateBy != ''">
update_by = #{updateBy},
</if>
<if test="updateTime != null">
update_time = #{updateTime},
</if>
<if test="isDeleted != null">
is_deleted = #{isDeleted},
</if>
</set>
where id = #{id}
</update>
<!--通过主键删除-->
<delete id="deleteById">
delete from auth_user_role where id = #{id}
</delete>
</mapper>

View File

@@ -6,7 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
/**
* 刷题微服务启动类
* 鉴权微服务启动类
*
* @author: landaiqing
* @date: 2024/2/7

View File

@@ -10,7 +10,7 @@ import org.springframework.context.annotation.Configuration;
/**
* 权限认证的配置器
*
* @author: ChickenWing
* @author: landaiqing
* @date: 2023/10/28
*/
@Configuration

View File

@@ -18,7 +18,7 @@ import java.util.stream.Collectors;
/**
* 自定义权限验证接口扩展
*
* @author: ChickenWing
* @author: landaiqing
* @date: 2023/10/28
*/
@Component

View File

@@ -6,7 +6,7 @@ import java.util.Date;
/**
* (AuthPermission)实体类
*
* @author makejava
* @author landaiqing
* @since 2023-11-03 00:45:50
*/
public class AuthPermission implements Serializable {

View File

@@ -6,8 +6,8 @@ import java.util.Date;
/**
* (AuthRole)实体类
*
* @author makejava
* @since 2023-11-02 23:55:19
* @author landaiqing
* @since 2024-2-18 18:55:50
*/
public class AuthRole implements Serializable {
private static final long serialVersionUID = 422256240999600735L;

View File

@@ -13,7 +13,7 @@ import java.util.stream.Stream;
/**
* RedisUtil工具类
*
* @author: ChickenWing
* @author: landaiqing
* @date: 2023/10/28
*/
@Component

View File

@@ -5,7 +5,7 @@ import lombok.Getter;
/**
* 题目类型枚举
* 1单选 2多选 3判断 4简答
* @author: ChickenWing
* @author: landaiqing
* @date: 2023/10/3
*/
@Getter

View File

@@ -5,7 +5,7 @@ import lombok.Getter;
/**
* 题目点赞枚举
*
* @author: ChickenWing
* @author: landaiqing
* @date: 2023/10/3
*/
@Getter

View File

@@ -8,7 +8,7 @@ import java.util.Date;
/**
* 题目分类(SubjectCategory)实体类
*
* @author makejava
* @author landaiqing
* @since 2024-02-07 16:17:17
*/
@Data

View File

@@ -7,7 +7,7 @@ import java.io.Serializable;
/**
* 题目标签Bo
*
* @author makejava
* @author landaiqing
* @since 2024-02-14 17:08:06
*/
@Data

View File

@@ -8,7 +8,7 @@ import java.util.List;
/**
* 题目dto
*
* @author: ChickenWing
* @author: landaiqing
* @date: 2023/10/5
*/
@Data

View File

@@ -8,7 +8,7 @@ import java.io.Serializable;
/**
* 简答题(SubjectBrief)实体类
*
* @author makejava
* @author landaiqing
* @since 2024-02-15 14:29:44
*/
@Data

View File

@@ -8,7 +8,7 @@ import java.io.Serializable;
/**
* 题目分类(SubjectCategory)实体类
*
* @author makejava
* @author landaiqing
* @since 2024-02-07 16:17:17
*/
@Data

View File

@@ -8,7 +8,7 @@ import java.io.Serializable;
/**
* 题目信息表(SubjectInfo)实体类
*
* @author makejava
* @author landaiqing
* @since 2024-02-14 16:59:04
*/
@Data

View File

@@ -8,7 +8,7 @@ import java.io.Serializable;
/**
* 判断题(SubjectJudge)实体类
*
* @author makejava
* @author landaiqing
* @since 2024-02-15 14:32:25
*/
@Data

View File

@@ -8,7 +8,7 @@ import java.io.Serializable;
/**
* 题目标签表(SubjectLabel)实体类
*
* @author makejava
* @author landaiqing
* @since 2024-02-14 17:08:06
*/
@Data

View File

@@ -6,7 +6,7 @@ import java.io.Serializable;
/**
* 题目分类关系表(SubjectMapping)实体类
*
* @author makejava
* @author landaiqing
* @since 2024-02-14 18:44:42
*/
public class SubjectMapping implements Serializable {

View File

@@ -8,7 +8,7 @@ import java.io.Serializable;
/**
* 多选题信息表(SubjectMultiple)实体类
*
* @author makejava
* @author landaiqing
* @since 2024-02-15 14:32:48
*/
@Data

View File

@@ -8,7 +8,7 @@ import java.io.Serializable;
/**
* 单选题信息表(SubjectRadio)实体类
*
* @author makejava
* @author landaiqing
* @since 2024-02-15 14:33:07
*/
@Data

View File

@@ -9,7 +9,7 @@ import java.util.List;
/**
* 简答题(SubjectBrief)表数据库访问层
*
* @author makejava
* @author landaiqing
* @since 2024-02-15 14:29:42
*/
public interface SubjectBriefDao {

View File

@@ -7,7 +7,7 @@ import java.util.List;
/**
* 题目分类(SubjectCategory)表数据库访问层
*
* @author makejava
* @author landaiqing
* @since 2024-02-07 16:17:16
*/
public interface SubjectCategoryDao {

View File

@@ -8,7 +8,7 @@ import java.util.List;
/**
* 题目信息表(SubjectInfo)表数据库访问层
*
* @author makejava
* @author landaiqing
* @since 2024-02-14 16:59:02
*/
public interface SubjectInfoDao {

View File

@@ -9,7 +9,7 @@ import java.util.List;
/**
* 判断题(SubjectJudge)表数据库访问层
*
* @author makejava
* @author landaiqing
* @since 2024-02-15 14:32:25
*/
public interface SubjectJudgeDao {

View File

@@ -8,7 +8,7 @@ import java.util.List;
/**
* 题目标签表(SubjectLabel)表数据库访问层
*
* @author makejava
* @author landaiqing
* @since 2024-02-14 17:08:06
*/
public interface SubjectLabelDao {

View File

@@ -9,7 +9,7 @@ import java.util.List;
/**
* 题目分类关系表(SubjectMapping)表数据库访问层
*
* @author makejava
* @author landaiqing
* @since 2024-02-14 18:44:41
*/
public interface SubjectMappingDao {

View File

@@ -8,7 +8,7 @@ import java.util.List;
/**
* 多选题信息表(SubjectMultiple)表数据库访问层
*
* @author makejava
* @author landaiqing
* @since 2024-02-15 14:32:48
*/
public interface SubjectMultipleDao {

View File

@@ -8,7 +8,7 @@ import java.util.List;
/**
* 单选题信息表(SubjectRadio)表数据库访问层
*
* @author makejava
* @author landaiqing
* @since 2024-02-15 14:33:07
*/
public interface SubjectRadioDao {

View File

@@ -6,7 +6,7 @@ import com.landaiqing.subject.infra.basic.entity.SubjectBrief;
/**
* 简答题(SubjectBrief)表服务接口
*
* @author makejava
* @author landaiqing
* @since 2024-02-15 14:29:45
*/
public interface SubjectBriefService {

View File

@@ -7,7 +7,7 @@ import java.util.List;
/**
* 题目分类(SubjectCategory)表服务接口
*
* @author makejava
* @author landaiqing
* @since 2024-02-07 16:17:20
*/
public interface SubjectCategoryService {

View File

@@ -7,7 +7,7 @@ import java.util.List;
/**
* 题目信息表(SubjectInfo)表服务接口
*
* @author makejava
* @author landaiqing
* @since 2024-02-14 16:59:04
*/
public interface SubjectInfoService {

View File

@@ -7,7 +7,7 @@ import java.util.List;
/**
* 判断题(SubjectJudge)表服务接口
*
* @author makejava
* @author landaiqing
* @since 2024-02-15 14:32:25
*/
public interface SubjectJudgeService {

View File

@@ -9,7 +9,7 @@ import java.util.List;
/**
* 题目标签表(SubjectLabel)表服务接口
*
* @author makejava
* @author landaiqing
* @since 2024-02-14 17:08:07
*/
public interface SubjectLabelService {

View File

@@ -8,7 +8,7 @@ import java.util.List;
/**
* 题目分类关系表(SubjectMapping)表服务接口
*
* @author makejava
* @author landaiqing
* @since 2024-02-14 18:44:42
*/
public interface SubjectMappingService {

View File

@@ -7,7 +7,7 @@ import java.util.List;
/**
* 多选题信息表(SubjectMultiple)表服务接口
*
* @author makejava
* @author landaiqing
* @since 2024-02-15 14:32:48
*/
public interface SubjectMultipleService {

View File

@@ -7,7 +7,7 @@ import java.util.List;
/**
* 单选题信息表(SubjectRadio)表服务接口
*
* @author makejava
* @author landaiqing
* @since 2024-02-15 14:33:07
*/
public interface SubjectRadioService {

View File

@@ -10,7 +10,7 @@ import javax.annotation.Resource;
/**
* 简答题(SubjectBrief)表服务实现类
*
* @author makejava
* @author landaiqing
* @since 2024-02-15 14:29:45
*/
@Service("subjectBriefService")

View File

@@ -13,7 +13,7 @@ import java.util.List;
/**
* 题目分类(SubjectCategory)表服务实现类
*
* @author makejava
* @author landaiqing
* @since 2024-02-07 16:17:20
*/
@Service("subjectCategoryService")

View File

@@ -11,7 +11,7 @@ import java.util.List;
/**
* 题目信息表(SubjectInfo)表服务实现类
*
* @author makejava
* @author landaiqing
* @since 2024-02-14 16:59:04
*/
@Service("subjectInfoService")

View File

@@ -12,7 +12,7 @@ import java.util.List;
/**
* 判断题(SubjectJudge)表服务实现类
*
* @author makejava
* @author landaiqing
* @since 2024-02-15 14:32:25
*/
@Service("subjectJudgeService")

View File

@@ -12,7 +12,7 @@ import java.util.List;
/**
* 题目标签表(SubjectLabel)表服务实现类
*
* @author makejava
* @author landaiqing
* @since 2024-02-14 17:08:07
*/
@Service("subjectLabelService")

View File

@@ -11,7 +11,7 @@ import java.util.List;
/**
* 题目分类关系表(SubjectMapping)表服务实现类
*
* @author makejava
* @author landaiqing
* @since 2024-02-14 18:44:42
*/
@Service("subjectMappingService")

View File

@@ -11,7 +11,7 @@ import java.util.List;
/**
* 多选题信息表(SubjectMultiple)表服务实现类
*
* @author makejava
* @author landaiqing
* @since 2024-02-15 14:32:49
*/
@Service("subjectMultipleService")

View File

@@ -11,7 +11,7 @@ import java.util.List;
/**
* 单选题信息表(SubjectRadio)表服务实现类
*
* @author makejava
* @author landaiqing
* @since 2024-02-15 14:33:07
*/
@Service("subjectRadioService")