【java】【MyBatisPlus】【四】【完】MyBatisPlus一些实战总结(枚举、翻页、sql、组合条件、自增主键、逻辑删除)

目录

一、枚举

1、数据库type字段是Integer 类型枚举

2、创建一个该字段的枚举类 TypeEnum

 3、修改实体类

4、配置文件新增mybatis-plus的配置

5、检验:

5.1 查询显示

5.3 库里验证 

二、自增主键不是id字段处理

三、逻辑删除字段不是delete字段处理

1、实体加注解

2、yml配置文件新增配置

四、单表查询 

1、使用mybatis-plus自带的lambdaQueryWrapper条件进行查询

1.1 controller

1.2 servcie

1.3 serviceImpl

1.4 mapper

2、使用mybatis-plus自带的lambdaQueryWrapper条件进行+page进行分页查询

2.1 PageBean

2.2 controller

 2.3 service

2.4 servicrImpl

2.5 mapper

五、多表查询

1、使用sql语句进行多表查询

1.1 UserRoleDto接收返回数据

1.2 controller

1.3 service

1.4 servcieImpl

1.5 mapper

1.6 xml

2、翻页+组合条件查询

2.1 controller

2.2 service

2.3 serviceImpl

2.4 mapper

2.5 xml

六、事务处理

1、serviceImpl

2、yml配置事务日志

七、判重

1、数据库设置唯一判重

2、代码判重 

2.1 新增判重

2.2 修改判重

八、日期范围查询 

1、controller

2、service

3、serviceImpl

4、mapper

九、POST请求封装DTO查询

1、POST接口请求传参

 2、封装DTO

3、controller

4、service

5、serviceImpl

6、mapper


前言:项目实战过程当中,一些总结,例如枚举应用、翻页、单表、多表查询、翻页、自增主键、逻辑删除、判重等

一、枚举

1、数据库type字段是Integer 类型枚举

type字段 枚举用热类型:1-高温水;2-低温水;3-蒸汽;

2、创建一个该字段的枚举类 TypeEnum

package com.bocai.enums;import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.*;/*** a表的type字段 枚举用热类型:1-高温水;2-低温水;3-蒸汽;* 注意配置文件yml有配置*/
@AllArgsConstructor
@NoArgsConstructor
@Getter
public enum TypeEnum {HIGHTEMPERATUREWATER(1,"高温水"),LOWTEMPERATUREWATER(2,"低温水"),STEAM(3,"蒸汽");@EnumValue //将注解标注的数值存储到数据库中private  Integer hottype;@JsonValueprivate  String desc;}

上面2个注解很重要:@EnumValue //将注解标注的数值存储到数据库中

@JsonValue //在页面显示,不写这个就先森上面的枚举STEAM、LOWTEMPERATUREWATER、HIGHTEMPERATUREWATER

 3、修改实体类

package com.bocai.pojo;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;import com.bocai.enums.TypeEnum;
import lombok.Data;/*** * @TableName inhousing*/
@TableName(value ="inhousing")
@Data
public class Inhousing implements Serializable {/*** */@TableId(type = IdType.AUTO)private Integer uniqueid;/*** 用热类型:1-高温水;2-低温水;3-蒸汽;*/private TypeEnum hottype;@TableField(exist = false)private static final long serialVersionUID = 1L;
}

4、配置文件新增mybatis-plus的配置

mybatis-plus:configuration:map-underscore-to-camel-case: true # 在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # ?????sqldefault-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler  # 配置全局枚举处理器,好像还有说json的global-config:db-config:id-type: auto   # 数据库id生产规则全局 配置 # ASSIGN_ID雪花算法,数据库id建议使用Long类型logic-delete-field: deleted # 全局配置逻辑删除字段名logic-delete-value: 0 # 全局配置# 逻辑已删除值(默认为 1)这里因为我是反的所以改成0logic-not-delete-value: 1  # 逻辑未删除值(默认为 0)这里因为我是反的所以改成1# table-prefix: tbl_    # 数据库表前缀全局配置banner: false   # 关闭控制台mybatis-plus的logo
#  type-enums-package: com.bocai.enums   # 扫描通用枚举包 或者使用上面那个枚举全局配置

有两种方式:1、 default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler  # 配置全局枚举处理器,好像还有说json的

2、#  type-enums-package: com.bocai.enums   # 扫描通用枚举包 或者使用上面那个枚举全局配置

5、检验:

5.1 查询显示

5.3 库里验证 

二、自增主键不是id字段处理

@TableName(value ="user")
@Data
public class User implements Serializable {/*** 自增主键*/@TableId(type = IdType.AUTO)private Integer uniqueid;

三、逻辑删除字段不是delete字段处理

1、实体加注解

   /*** 0不启用 1启用*/@TableLogicprivate Boolean isenable;

2、yml配置文件新增配置

mybatis-plus:configuration:map-underscore-to-camel-case: true # 在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # ?????sqldefault-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler  # 配置全局枚举处理器,好像还有说json的global-config:db-config:id-type: auto   # 数据库id生产规则全局 配置 # ASSIGN_ID雪花算法,数据库id建议使用Long类型logic-delete-field: deleted # 全局配置逻辑删除字段名logic-delete-value: 0 # 全局配置# 逻辑已删除值(默认为 1)这里因为我是反的所以改成0logic-not-delete-value: 1  # 逻辑未删除值(默认为 0)这里因为我是反的所以改成1# table-prefix: tbl_    # 数据库表前缀全局配置banner: false   # 关闭控制台mybatis-plus的logo
#  type-enums-package: com.bocai.enums   # 扫描通用枚举包 或者使用上面那个枚举全局配置

四、单表查询 

1、使用mybatis-plus自带的lambdaQueryWrapper条件进行查询

1.1 controller

package com.bocai.controller;import com.bocai.common.Result;import com.bocai.dto.UserRoleDto;
import com.bocai.pojo.PageBean;
import com.bocai.pojo.User;
import com.bocai.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/niubi")
@Slf4j
public class UserController {@Autowiredprivate UserService userService;/*** 查询全部用户--无翻页* @return*/@GetMappingpublic Result list(){log.info("查询全部启用用户信息!");List<User> list = userService.userList();return Result.success(list);}
}

1.2 servcie

package com.bocai.service;import com.bocai.dto.UserRoleDto;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bocai.pojo.PageBean;
import com.bocai.pojo.User;import java.util.List;/**
* @author cheng
* @description 针对表【user】的数据库操作Service
* @createDate 2023-11-07 14:52:28
*/
public interface UserService extends IService<User> {/*** 查询全部启用用户 ==无翻页* @return*/List<User> userList();
}

1.3 serviceImpl

package com.bocai.service.impl;import com.aliyun.oss.ServiceException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bocai.dto.UserRoleDto;import com.bocai.mapper.UserRoleMapper;
import com.bocai.pojo.Emp;
import com.bocai.pojo.PageBean;
import com.bocai.pojo.Role;
import com.bocai.pojo.User;
import com.bocai.service.UserService;
import com.bocai.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.HashMap;
import java.util.List;
import java.util.Map;/**
* @author cheng
* @description 针对表【user】的数据库操作Service实现
* @createDate 2023-11-07 14:52:28
*/
@Service
@Slf4j
public class UserServiceImpl extends ServiceImpl<UserMapper, User>implements UserService{@Autowiredprivate UserMapper userMapper;@Autowiredprivate UserRoleMapper userRoleMapper;/*** 启用用户* @return*/@Overridepublic List<User> userList() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.select(User::getLoginname, User::getRealname, User::getIsenable);List<User> users = userMapper.selectList(lambdaQueryWrapper);return users;}

1.4 mapper

package com.bocai.mapper;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bocai.dto.UserRoleDto;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bocai.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;/**
* @author cheng
* @description 针对表【user】的数据库操作Mapper
* @createDate 2023-11-07 14:52:28
* @Entity com.bocai.pojo.User
*/
@Mapper
public interface UserMapper extends BaseMapper<User> {}

2、使用mybatis-plus自带的lambdaQueryWrapper条件进行+page进行分页查询

2.1 PageBean

package com.bocai.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;/*** 分页查询结果封装类*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {private Long total;//总记录数private List rows;//数据列表}

新增一个PageBean来装载返回数据

2.2 controller

package com.bocai.controller;import com.bocai.pojo.Emp;
import com.bocai.pojo.PageBean;
import com.bocai.common.Result;
import com.bocai.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;import java.time.LocalDate;
import java.util.List;@RestController
@RequestMapping("/emps")
@Slf4j
public class EmpController {@Autowiredprivate EmpService empService;/*** 条件分页查询* @param page* @param pageSize* @param name* @param gender* @param begin* @param end* @return*/@GetMappingpublic Result page(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize,String name, Short gender,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){log.info("分页查询参数:{}  {} {}  {}  {}  {}",page,pageSize,name,gender,begin,end);PageBean pageBean = empService.pageList(page,pageSize,name,gender,begin,end);return Result.success(pageBean);}
}

 2.3 service

package com.bocai.service;import com.bocai.pojo.Emp;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bocai.pojo.PageBean;import java.time.LocalDate;
import java.util.List;/**
* @author cheng
* @description 针对表【emp(员工表)】的数据库操作Service
* @createDate 2023-10-31 10:44:06
*/
public interface EmpService extends IService<Emp> {/*** 分页查询* @param page* @param pageSize* @return*/PageBean pageList(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end);
}

2.4 servicrImpl

package com.bocai.service.impl;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bocai.pojo.Emp;
import com.bocai.pojo.PageBean;
import com.bocai.service.EmpService;
import com.bocai.mapper.EmpMapper;
import com.bocai.utils.JwtUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/**
* @author cheng
* @description 针对表【emp(员工表)】的数据库操作Service实现
* @createDate 2023-10-31 10:44:06
*/
@Service
public class EmpServiceImpl extends ServiceImpl<EmpMapper, Emp>implements EmpService{@Autowiredprivate EmpMapper empMapper;/*** 分页查询* @param page* @param pageSize* @param name* @param gender* @param begin* @param end* @return*/@Overridepublic PageBean pageList(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {LambdaQueryWrapper<Emp> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.like(StringUtils.isNotBlank(name),Emp::getName,name).eq(gender != null,Emp::getGender,gender).ge(begin != null,Emp::getEntrydate,begin).le(end != null,Emp::getEntrydate,end);Page<Emp> pageEmp = new Page<>(page,pageSize);empMapper.selectPage(pageEmp,lambdaQueryWrapper);PageBean pageBean = new PageBean(pageEmp.getTotal(),pageEmp.getRecords());return pageBean;}
}

2.5 mapper

package com.bocai.mapper;import com.bocai.pojo.Emp;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;/**
* @author cheng
* @description 针对表【emp(员工表)】的数据库操作Mapper
* @createDate 2023-10-31 10:44:06
* @Entity com.bocai.pojo.Emp
*/
@Mapper
public interface EmpMapper extends BaseMapper<Emp> {}

五、多表查询

1、使用sql语句进行多表查询

1.1 UserRoleDto接收返回数据

package com.bocai.dto;import com.bocai.pojo.User;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserRoleDto extends User {private String roleName;  //非user表字段
}

1.2 controller

package com.bocai.controller;import com.bocai.common.Result;import com.bocai.dto.UserRoleDto;
import com.bocai.pojo.PageBean;
import com.bocai.pojo.User;
import com.bocai.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/niubi")
@Slf4j
public class UserController {@Autowiredprivate UserService userService;/*** 查询全部用户--无翻页--- 使用sql以及指定显示字段* @return*/@GetMapping("/sql")public Result listSql(){log.info("查询全部启用用户信息显示+sql多表!");List<UserRoleDto> list = userService.userSqlList();return Result.success(list);}

1.3 service

package com.bocai.service;import com.bocai.dto.UserRoleDto;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bocai.pojo.PageBean;
import com.bocai.pojo.User;import java.util.List;/**
* @author cheng
* @description 针对表【user】的数据库操作Service
* @createDate 2023-11-07 14:52:28
*/
public interface UserService extends IService<User> {/*** 查询全部用户无翻页--("查询全部启用用户信息显示+sql多表!");* @return*/List<UserRoleDto> userSqlList();
}

1.4 servcieImpl

package com.bocai.service.impl;import com.aliyun.oss.ServiceException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bocai.dto.UserRoleDto;import com.bocai.mapper.UserRoleMapper;
import com.bocai.pojo.Emp;
import com.bocai.pojo.PageBean;
import com.bocai.pojo.Role;
import com.bocai.pojo.User;
import com.bocai.service.UserService;
import com.bocai.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.HashMap;
import java.util.List;
import java.util.Map;/**
* @author cheng
* @description 针对表【user】的数据库操作Service实现
* @createDate 2023-11-07 14:52:28
*/
@Service
@Slf4j
public class UserServiceImpl extends ServiceImpl<UserMapper, User>implements UserService{@Autowiredprivate UserMapper userMapper;@Autowiredprivate UserRoleMapper userRoleMapper;/*** 查询全部用户无翻页--("查询全部启用用户信息显示+sql多表!");* @return*/@Overridepublic List<UserRoleDto> userSqlList() {List<UserRoleDto> UserRoleDto = userMapper.selectSqlList();return UserRoleDto;}
}

1.5 mapper

package com.bocai.mapper;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bocai.dto.UserRoleDto;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bocai.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;/**
* @author cheng
* @description 针对表【user】的数据库操作Mapper
* @createDate 2023-11-07 14:52:28
* @Entity com.bocai.pojo.User
*/
@Mapper
public interface UserMapper extends BaseMapper<User> {/*** 使用sql多表联查* @return*/List<UserRoleDto> selectSqlList();
}

1.6 xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bocai.mapper.UserMapper"><resultMap id="BaseResultMap" type="com.bocai.pojo.User"><result property="uniqueid" column="uniqueId" jdbcType="INTEGER"/><result property="administrationcode" column="administrationCode" jdbcType="VARCHAR"/><result property="fixgroupid" column="fixGroupId" jdbcType="INTEGER"/><result property="loginname" column="loginName" jdbcType="VARCHAR"/><result property="password" column="password" jdbcType="CHAR"/><result property="realname" column="realName" jdbcType="VARCHAR"/>     <result property="isspecial" column="isSpecial" jdbcType="BIT"/><result property="isenable" column="isEnable" jdbcType="BIT"/></resultMap><sql id="Base_Column_List">uniqueId,loginName,password,realName,</sql><select id="selectSqlList" resultType="com.bocai.dto.UserRoleDto">SELECT a.`realName`,a.`loginName`,c.`name` as roleNameFROM USER aJOIN user_role b ON a.`uniqueId`=b.`userId`JOIN role c ON b.`roleId`=c.`uniqueId`WHERE a.`isEnable`='1';</select></mapper>

2、翻页+组合条件查询

2.1 controller

package com.bocai.controller;import com.bocai.common.Result;import com.bocai.dto.UserRoleDto;
import com.bocai.pojo.PageBean;
import com.bocai.pojo.User;
import com.bocai.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/niubi")
@Slf4j
public class UserController {@Autowiredprivate UserService userService;/***  使用sql多表查询分页,带条件*      * @param page 第几页*      * @param pageSize 每页条数*      * @param realName 真实姓名*      * @param userLevel 用户级别* @return*/@GetMapping("/sql/page")public Result listSqlPage(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize,String realName,Integer userLevel){log.info("查询全部启用用户信息显示+sql多表!翻页当前第{}页,每页{},姓名{},用户级别{}",page,pageSize,realName,userLevel);PageBean pageBean = userService.userSqlPageList(page,pageSize,realName,userLevel);return Result.success(pageBean);}
}

2.2 service

package com.bocai.service;import com.bocai.dto.UserRoleDto;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bocai.pojo.PageBean;
import com.bocai.pojo.User;import java.util.List;/**
* @author cheng
* @description 针对表【user】的数据库操作Service
* @createDate 2023-11-07 14:52:28
*/
public interface UserService extends IService<User> {/*** 多表联查+翻页+条件查询+sql* @param page* @param pageSize* @param realName* @param userLevel* @return*/PageBean userSqlPageList(Integer page, Integer pageSize,String realName,Integer userLevel);
}

2.3 serviceImpl

package com.bocai.service.impl;import com.aliyun.oss.ServiceException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bocai.dto.UserRoleDto;import com.bocai.mapper.UserRoleMapper;
import com.bocai.pojo.Emp;
import com.bocai.pojo.PageBean;
import com.bocai.pojo.Role;
import com.bocai.pojo.User;
import com.bocai.service.UserService;
import com.bocai.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.HashMap;
import java.util.List;
import java.util.Map;/**
* @author cheng
* @description 针对表【user】的数据库操作Service实现
* @createDate 2023-11-07 14:52:28
*/
@Service
@Slf4j
public class UserServiceImpl extends ServiceImpl<UserMapper, User>implements UserService{@Autowiredprivate UserMapper userMapper;@Autowiredprivate UserRoleMapper userRoleMapper;/*** 多表联查+翻页+条件查询+sql* @param page* @param pageSize* @param realName* @param userLevel* @return*/@Overridepublic PageBean userSqlPageList(Integer page, Integer pageSize,String realName,Integer userLevel) {Page<UserRoleDto> pageUserRole = new Page<>(page,pageSize);userMapper.selectUserRoleDtoPage(pageUserRole,realName,userLevel);pageUserRole.getRecords();log.info("sss{},{},{},{},{}",pageUserRole.getTotal());PageBean pageBean = new PageBean(pageUserRole.getTotal(),pageUserRole.getRecords());return pageBean;}}

2.4 mapper

package com.bocai.mapper;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bocai.dto.UserRoleDto;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bocai.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;/**
* @author cheng
* @description 针对表【user】的数据库操作Mapper
* @createDate 2023-11-07 14:52:28
* @Entity com.bocai.pojo.User
*/
@Mapper
public interface UserMapper extends BaseMapper<User> {/*** 多表联查+翻页+条件查询+sql* @param pageUserRole* @param realName* @param userLevel* @return*/Page<UserRoleDto>selectUserRoleDtoPage(Page<UserRoleDto> pageUserRole, String realName,Integer userLevel);}

2.5 xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bocai.mapper.UserMapper"><resultMap id="BaseResultMap" type="com.bocai.pojo.User"><result property="uniqueid" column="uniqueId" jdbcType="INTEGER"/><result property="administrationcode" column="administrationCode" jdbcType="VARCHAR"/><result property="fixgroupid" column="fixGroupId" jdbcType="INTEGER"/><result property="loginname" column="loginName" jdbcType="VARCHAR"/><result property="password" column="password" jdbcType="CHAR"/><result property="realname" column="realName" jdbcType="VARCHAR"/>     <result property="isspecial" column="isSpecial" jdbcType="BIT"/><result property="isenable" column="isEnable" jdbcType="BIT"/></resultMap><sql id="Base_Column_List">uniqueId,loginName,password,realName,</sql><select id="selectUserRoleDtoPage" resultType="com.bocai.dto.UserRoleDto">SELECT a.uniqueid,a.`realName`,a.`loginName`,c.`name` as roleNameFROM USER aJOIN user_role b ON a.`uniqueId`=b.`userId`JOIN role c ON b.`roleId`=c.`uniqueId`<where>a.`isEnable`='1'<if test="realName != null">and   a.realName like concat('%', #{realName}, '%')</if><if test="userLevel != null">and a.userLevel=#{userLevel}</if></where></select></mapper>

六、事务处理

1、serviceImpl

    @Override@Transactionalpublic void deleteById(Integer id) {userMapper.deleteById(id);
//        int i = 1/0;userMapper.updateUserById(id);Map<String, Object> map = new HashMap<>();map.put("userid",id);userRoleMapper.deleteByMap(map); //根据用户id删除用户与角色关系}

2、yml配置事务日志

#spring事务管理日志
logging:level:org.springframework.jdbc.support.JdbcTransactionManager: debug

七、判重

1、数据库设置唯一判重

2、代码判重 

2.1 新增判重

/*** 新增角色* @param role*/@Overridepublic void addRole(Role role) {LambdaQueryWrapper<Role> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.eq(role.getName() != null,Role::getName, role.getName());long count = roleMapper.selectCount(lambdaQueryWrapper);if (count > 0) {throw new ServiceException("该角色名已存在!");}role.setUpdatetime(LocalDateTime.now());role.setAdduserid(2);roleMapper.insert(role);}

2.2 修改判重

    /*** 修改角色* @param role*/@Overridepublic void alterUser(Role role) {LambdaQueryWrapper<Role> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.eq(role.getName() != null,Role::getName, role.getName()).ne(role.getUniqueid() != null, Role::getUniqueid,role.getUniqueid());long count = roleMapper.selectCount(lambdaQueryWrapper);if (count > 0) {throw new ServiceException("该角色名已存在!");}role.setUpdatetime(LocalDateTime.now());roleMapper.updateById(role);}

注意这里有个自己跟自己判重的逻辑,使用了ne的方式

八、日期范围查询 

1、controller

package com.bocai.controller;import com.bocai.common.Result;
import com.bocai.pojo.PageBean;
import com.bocai.pojo.Role;
import com.bocai.service.RoleService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;import java.time.LocalDate;
import java.time.LocalDateTime;@RestController
@RequestMapping("roles")
@Slf4j
public class RoleController {@Autowiredprivate RoleService roleService;/*** 带条件、翻页的查询全部角色* @param page 当前第几页* @param pageSize 每页多少条* @param name 角色名* @param roleType 角色类型* @param begin 开始时间* @param end 结束时间* @return*/@GetMappingpublic Result page(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize,@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime begin,@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime end,String name,String roleType){log.info("带翻页和条件的查询全部角色当前第{}页,每页{}条,角色名:{},角色类型:{},开始时间{},结束时间{}",page,pageSize,name,roleType,begin,end);PageBean pageBean = roleService.rolePage(page,pageSize,name,roleType,begin,end);return Result.success(pageBean);}
}

2、service

package com.bocai.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.bocai.pojo.PageBean;
import com.bocai.pojo.Role;import java.time.LocalDateTime;/**
* @author cheng
* @description 针对表【role】的数据库操作Service
* @createDate 2023-11-07 14:52:38
*/
public interface RoleService extends IService<Role> {/*** 带条件、翻页的查询全部角色* @param page 当前第几页* @param pageSize 每页多少条* @param name 角色名* @param roleType 角色类型* @param begin 开始时间* @param end 结束时间* @return*/PageBean rolePage(Integer page, Integer pageSize, String name, String roleType, LocalDateTime begin,LocalDateTime end);
}

3、serviceImpl

package com.bocai.service.impl;import com.aliyun.oss.ServiceException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bocai.mapper.UserRoleMapper;
import com.bocai.pojo.Inhousing;
import com.bocai.pojo.PageBean;
import com.bocai.pojo.Role;import com.bocai.service.RoleService;
import com.bocai.mapper.RoleMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;/**
* @author cheng
* @description 针对表【role】的数据库操作Service实现
* @createDate 2023-11-07 14:52:38
*/
@Service
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role>implements RoleService{@Autowiredprivate RoleMapper roleMapper;@Autowiredprivate UserRoleMapper userRoleMapper;/*** 带条件的翻页查询全部角色* @param page 当前第几页* @param pageSize 每页多少条* @param name 角色名* @param roleType 角色类型* @param begin 开始时间* @param end 结束时间* @return*/@Overridepublic PageBean rolePage(Integer page, Integer pageSize, String name, String roleType,LocalDateTime begin,LocalDateTime end) {LambdaQueryWrapper<Role> lambdaQueryWrapper =new LambdaQueryWrapper<>();lambdaQueryWrapper.like(StringUtils.isNotBlank(name),Role::getName,name).like(StringUtils.isNotBlank(roleType),Role::getRoletype,roleType).between(begin != null && end != null,Role::getUpdatetime,begin,end);Page<Role> rolePage = new Page<>(page,pageSize);roleMapper.selectPage(rolePage,lambdaQueryWrapper);PageBean pageBean = new PageBean(rolePage.getTotal(),rolePage.getRecords());return pageBean;}

也可以使用这个方式

.ge(begin != null,Role::getRoletype,begin)
.le(end != null,Role::getRoletype,end);

 

4、mapper

package com.bocai.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bocai.pojo.Role;
import org.apache.ibatis.annotations.Mapper;/**
* @author cheng
* @description 针对表【role】的数据库操作Mapper
* @createDate 2023-11-07 14:52:38
* @Entity com.bocai.pojo.Role
*/
@Mapper
public interface RoleMapper extends BaseMapper<Role> {}

九、POST请求封装DTO查询

1、POST接口请求传参

{"roleid": 564,"usersid": [694, 693]
}

 2、封装DTO

package com.bocai.dto;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.List;@Data
@NoArgsConstructor
@AllArgsConstructor
public class UsersRoleDto{private Integer roleid;private List<Integer> usersid;
}

3、controller

package com.bocai.controller;import com.bocai.common.Result;
import com.bocai.dto.UsersRoleDto;
import com.bocai.service.UserRoleService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/userRoles")
@Slf4j
public class userRoleController {@Autowiredprivate UserRoleService userRoleService;/*** 分配* @param usersRoleDto* @return*/@PostMapping()public Result usersRole(@RequestBody UsersRoleDto usersRoleDto){log.info("分配{}",usersRoleDto);userRoleService.usersRole(usersRoleDto);return  Result.success();}
}

4、service

package com.bocai.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.bocai.dto.UsersRoleDto;
import com.bocai.pojo.UserRole;import java.util.List;/**
* @author cheng
* @description 针对表【user_role】的数据库操作Service
* @createDate 2023-11-07 14:52:46
*/
public interface UserRoleService extends IService<UserRole> {/*** 分配* @param usersRoleDto*/void usersRole(UsersRoleDto usersRoleDto);}

5、serviceImpl

package com.bocai.service.impl;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bocai.dto.UsersRoleDto;
import com.bocai.pojo.UserRole;
import com.bocai.service.UserRoleService;
import com.bocai.mapper.UserRoleMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;/**
* @author cheng
* @description 针对表【user_role】的数据库操作Service实现
* @createDate 2023-11-07 14:52:46
*/
@Service
@Slf4j
public class UserRoleServiceImpl extends ServiceImpl<UserRoleMapper, UserRole>implements UserRoleService{@Autowiredprivate UserRoleMapper userRoleMapper;/*** 分配* @param usersRoleDto*/@Overridepublic void usersRole(UsersRoleDto usersRoleDto) {usersRoleDto.getUsersid().forEach(userId ->{UserRole userRole = new UserRole();userRole.setUserid(userId);userRole.setRoleid(usersRoleDto.getRoleid());LambdaQueryWrapper<UserRole> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.eq(userId != null,UserRole::getUserid,userId);Integer count = userRoleMapper.selectCount(lambdaQueryWrapper);if (count > 0){userRoleMapper.delete(lambdaQueryWrapper);}userRoleMapper.insert(userRole);});}}

这里做了一个查询处理,针对存在的对象,先查询出来删除,再新增 

6、mapper

package com.bocai.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bocai.pojo.UserRole;
import org.apache.ibatis.annotations.Mapper;/**
* @author cheng
* @description 针对表【user_role】的数据库操作Mapper
* @createDate 2023-11-07 14:52:46
* @Entity com.bocai.pojo.UserRole
*/
@Mapper
public interface UserRoleMapper extends BaseMapper<UserRole> {}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/137058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CTFHUB-WEB-SQL注入

sql学的太不好了&#xff0c;回炉重造 判断 Sql 注入漏洞的类型&#xff1a; 1.数字型 当输入的参 x 为整型时&#xff0c;通常 abc.php 中 Sql 语句类型大致如下&#xff1a;select * from <表名> where id x这种类型可以使用经典的 and 11 和 and 12 来判断&#xff…

SQL优化之MySQL执行计划(Explain)及索引失效详解

1、执行计划基础 1.1、执行计划&#xff08;Explain&#xff09;定义 在 MySQL 中可以通过 explain 关键字模拟优化器执行 SQL语句&#xff0c;从而解析MySQL 是如何处理 SQL 语句的。 1.2、MySQL查询过程 客户端向 MySQL 服务器发送一条查询请求服务器首先检查查询缓存&am…

【Unity】简单案例脚本实现 | 鼠标观察/键盘控制移动飞行/行走/碰撞检测

《Unity5实战-使用C#和Unity开发多平台游戏》第二章-构建一个让你置身3D空间的演示 鼠标观察/键盘控制移动飞行/行走/碰撞检测 Unity版本&#xff1a;2019.4.23f1c1 注意脚本名称和组件添加&#xff0c;不在文章中一一强调场景模型都是在资源商店选择的免费下载&#xff08;选…

windows下nvm的安装和使用

1、nvm简介 nvm是一个nodejs的版本管理工具&#xff0c;它可以在同一台机器上安装和切换不同版本的node的工具。常用在一台机器不同项目需要不同的node环境时&#xff0c;对node版本的自由切换使用。 2、nvm下载安装 2.1 下载 地址&#xff1a; https://github.com/coreybu…

设计模式——建造者模式

目录 建造者模式盖房项目需求基本介绍四个角色实例代码注意事项和细节抽象工厂模式 VS 建造者模式 建造者模式 盖房项目需求 传统方式&#xff1a;打地基&#xff0c;砌墙&#xff0c;封顶 盖房子步骤 public abstract class AbstractHouse {// 地基public abstract void b…

【GUI软件开发】小红书评论采集:自动采集1w多条,含二级评论!

文章目录 一、爬取目标1.1 效果截图1.2 演示视频1.3 软件说明 二、代码讲解2.1 爬虫采集模块2.2 软件界面模块2.3 日志模块 三、附完整源码及软件 一、爬取目标 您好&#xff01;我是马哥python说 &#xff0c;一名10年程序猿。 我用python开发了一个爬虫采集软件&#xff0c…

【优选算法系列】【专题二滑动窗口】第二节.1004. 最大连续1的个数 III和1658. 将 x 减到 0 的最小操作数

文章目录 前言一、最大连续1的个数 III 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写二、将 x 减到 0 的最小操作数 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写总结 前言 一、最大连…

【halcon】halcon 函数文件 以及 脚本引擎如何调用外部函数文件 上篇

前言 halcon有几种文件&#xff1a; 本地程序函数&#xff08;.hdev&#xff09;外部函数文件&#xff08;.hdvp)库函数(.hdp) 说多了容易混淆&#xff0c;今天就说&#xff0c;我觉得最有用的&#xff1a;外部函数文件&#xff08;.hdvp) 步骤 先写一段halcon脚本&#x…

宝塔部署QQ机器人,提示OpenSSL 1.0.2k-fips 26 Jan 2017

1、报错预览 Traceback (most recent call last):File "/www/wwwroot/python/bot-one/main.py", line 5, in <module>import requestsFile "/www/wwwroot/python/bot-one/343ae0eb0d491a10a1a00c0621b03ed0_venv/lib/python3.9/site-packages/requests/_…

粤嵌实训医疗项目(小组开发)--day05

目录 一、医生功能模块 ------------前端实现------------ ------------后端接口------------ 功能一&#xff1a;分页查询医生基础信息&#xff08;介绍MybatisPlus如何使用分页&#xff09; 功能二&#xff1a;根据搜索栏名称查找对应医生&#xff08;讲解自定义查询集&…

【Cocos新手进阶】父级预制体中的数据列表,在子预制体中的控制方法!

本篇文章主要讲解&#xff0c;cocos中在预制体操作过程中&#xff0c;父级预制体生成的数据列表中&#xff0c;绑定了子预制体中的事件&#xff0c;在子预制体的时间中如何控制上级列表的具体操作教程。 日期&#xff1a;2023年11月10日 作者&#xff1a;任聪聪 一、实际效果情…

k8s-Pod控制器

一、Pod控制器 1.Pod控制器及其功用 Pod控制器&#xff0c;又称之为工作负载&#xff08;workload&#xff09;&#xff0c;是用于实现管理pod的中间层&#xff0c;确保pod资源符合预期的状态&#xff0c;pod的资源出现故障时&#xff0c;会尝试进行重启&#xff0c;当根据重启…

企业安全—三保一评

0x00 前言 本篇主要是讲解三保一评的基础知识&#xff0c;以及对为什么要进行这些内容的原因进行总结。 0x01 整体 1.概述 三保分别是&#xff0c;分保&#xff0c;等保&#xff0c;关保。 分保就是指涉密信息系统的建设使用单位根据分级保护管理办法和有关标准&#xff0c…

植物补光灯,哪种效果好?

室内种植物有诸多好处&#xff1a;空间装饰、吸收有害物质、释放氧气&#xff0c;使室内空气更加清新&#xff1b;植物的蒸腾作用可以增加室内的湿度&#xff0c;改善秋冬季干燥的室内环境&#xff0c;可谓是天然的加湿器。 然而由于缺乏太阳光&#xff0c;在室内养植并不是一…

服装展示服务预约小程序的内容如何

互联网电商深入&#xff0c;很多服装商家开始线上卖货经营、会员管理及私域营销等&#xff0c;这也是当今商家们的一个优选项&#xff0c;当然除了直接卖货以外&#xff0c;展示和预约、客户交互也同样是不少商家需要的。 那么商家通过服装展示预约小程序能够实现什么效果呢&a…

被腾讯云感动哭了,5年内都不用再买服务器了!

我一直在寻找一个稳定、高效、可靠的云服务器提供商&#xff0c;以支持我的个人网站和业务。最近&#xff0c;我发现了腾讯云&#xff0c;它提供了一款非常优惠的2核4G云服务器&#xff0c;而且可以用超低的价格一次性购买5年的服务期限&#xff01;看到这么贴心的腾讯云&#…

小程序订单中心path设置本次审核不通过,审核原因:小程序尚未发布,无法审核。

小程序尚未发布&#xff0c;无法审核。 先按照这篇文章把小程序审核通过&#xff0c;小程序版本审核未通过&#xff0c;需在开发者后台「版本管理—提交审核——小程序订单中心path」设置订单中心页path&#xff0c;请设置后再提交代码审核 小程序审核通过后&#xff0c;发布…

React进阶之路(三)-- Hooks

文章目录 Hooks概念理解什么是HooksHooks解决了什么问题 useState基础使用状态的读取和修改组件的更新过程使用规则回调函数作为参数 useEffect什么是函数副作用基础使用依赖项控制执行时机清理副作用发送网络请求 useRefUseContext Hooks概念理解 什么是Hooks Hooks的本质&am…

力扣每日一道系列 --- LeetCode 88. 合并两个有序数组

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构探索 ✅LeetCode每日一道 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 文章目录 思路1&#xff1a;暴力求解思路2&#xff1a;原地合并 LeetCode 88. 合并两个有序数组…

修改Android Studio默认的gradle目录

今天看了一下&#xff0c;gradle在C盘占用了40多G。我C盘是做GHOST的&#xff0c;放在这里不方便。所以就要修改。 新建目录名&#xff08;似乎无必要&#xff09; ANDROID_SDK_HOMEG:\SOFTWARES\android-sdk GRADLE_USER_HOMEG:\SOFTWARES\.gradle 修改目录 File->Setti…