• 【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

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

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

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

     3、修改实体类

    1. package com.bocai.pojo;
    2. import com.baomidou.mybatisplus.annotation.IdType;
    3. import com.baomidou.mybatisplus.annotation.TableField;
    4. import com.baomidou.mybatisplus.annotation.TableId;
    5. import com.baomidou.mybatisplus.annotation.TableName;
    6. import java.io.Serializable;
    7. import java.math.BigDecimal;
    8. import java.time.LocalDateTime;
    9. import com.bocai.enums.TypeEnum;
    10. import lombok.Data;
    11. /**
    12. *
    13. * @TableName inhousing
    14. */
    15. @TableName(value ="inhousing")
    16. @Data
    17. public class Inhousing implements Serializable {
    18. /**
    19. *
    20. */
    21. @TableId(type = IdType.AUTO)
    22. private Integer uniqueid;
    23. /**
    24. * 用热类型:1-高温水;2-低温水;3-蒸汽;
    25. */
    26. private TypeEnum hottype;
    27. @TableField(exist = false)
    28. private static final long serialVersionUID = 1L;
    29. }

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

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

    1. @TableName(value ="user")
    2. @Data
    3. public class User implements Serializable {
    4. /**
    5. * 自增主键
    6. */
    7. @TableId(type = IdType.AUTO)
    8. private Integer uniqueid;

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

    1、实体加注解

    1. /**
    2. * 0不启用 1启用
    3. */
    4. @TableLogic
    5. private Boolean isenable;

    2、yml配置文件新增配置

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

    四、单表查询 

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

    1.1 controller

    1. package com.bocai.controller;
    2. import com.bocai.common.Result;
    3. import com.bocai.dto.UserRoleDto;
    4. import com.bocai.pojo.PageBean;
    5. import com.bocai.pojo.User;
    6. import com.bocai.service.UserService;
    7. import lombok.extern.slf4j.Slf4j;
    8. import org.springframework.beans.factory.annotation.Autowired;
    9. import org.springframework.web.bind.annotation.*;
    10. import java.util.List;
    11. @RestController
    12. @RequestMapping("/niubi")
    13. @Slf4j
    14. public class UserController {
    15. @Autowired
    16. private UserService userService;
    17. /**
    18. * 查询全部用户--无翻页
    19. * @return
    20. */
    21. @GetMapping
    22. public Result list(){
    23. log.info("查询全部启用用户信息!");
    24. List list = userService.userList();
    25. return Result.success(list);
    26. }
    27. }

    1.2 servcie

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

    1.3 serviceImpl

    1. package com.bocai.service.impl;
    2. import com.aliyun.oss.ServiceException;
    3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
    4. import com.baomidou.mybatisplus.core.toolkit.StringUtils;
    5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    7. import com.bocai.dto.UserRoleDto;
    8. import com.bocai.mapper.UserRoleMapper;
    9. import com.bocai.pojo.Emp;
    10. import com.bocai.pojo.PageBean;
    11. import com.bocai.pojo.Role;
    12. import com.bocai.pojo.User;
    13. import com.bocai.service.UserService;
    14. import com.bocai.mapper.UserMapper;
    15. import lombok.extern.slf4j.Slf4j;
    16. import org.springframework.beans.factory.annotation.Autowired;
    17. import org.springframework.stereotype.Service;
    18. import org.springframework.transaction.annotation.Transactional;
    19. import java.util.HashMap;
    20. import java.util.List;
    21. import java.util.Map;
    22. /**
    23. * @author cheng
    24. * @description 针对表【user】的数据库操作Service实现
    25. * @createDate 2023-11-07 14:52:28
    26. */
    27. @Service
    28. @Slf4j
    29. public class UserServiceImpl extends ServiceImpl<UserMapper, User>
    30. implements UserService{
    31. @Autowired
    32. private UserMapper userMapper;
    33. @Autowired
    34. private UserRoleMapper userRoleMapper;
    35. /**
    36. * 启用用户
    37. * @return
    38. */
    39. @Override
    40. public List<User> userList() {
    41. LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    42. lambdaQueryWrapper.select(User::getLoginname, User::getRealname, User::getIsenable);
    43. List<User> users = userMapper.selectList(lambdaQueryWrapper);
    44. return users;
    45. }

    1.4 mapper

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

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

    2.1 PageBean

    1. package com.bocai.pojo;
    2. import lombok.AllArgsConstructor;
    3. import lombok.Data;
    4. import lombok.NoArgsConstructor;
    5. import java.util.List;
    6. /**
    7. * 分页查询结果封装类
    8. */
    9. @Data
    10. @NoArgsConstructor
    11. @AllArgsConstructor
    12. public class PageBean {
    13. private Long total;//总记录数
    14. private List rows;//数据列表
    15. }

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

    2.2 controller

    1. package com.bocai.controller;
    2. import com.bocai.pojo.Emp;
    3. import com.bocai.pojo.PageBean;
    4. import com.bocai.common.Result;
    5. import com.bocai.service.EmpService;
    6. import lombok.extern.slf4j.Slf4j;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.format.annotation.DateTimeFormat;
    9. import org.springframework.web.bind.annotation.*;
    10. import java.time.LocalDate;
    11. import java.util.List;
    12. @RestController
    13. @RequestMapping("/emps")
    14. @Slf4j
    15. public class EmpController {
    16. @Autowired
    17. private EmpService empService;
    18. /**
    19. * 条件分页查询
    20. * @param page
    21. * @param pageSize
    22. * @param name
    23. * @param gender
    24. * @param begin
    25. * @param end
    26. * @return
    27. */
    28. @GetMapping
    29. public Result page(@RequestParam(defaultValue = "1") Integer page,
    30. @RequestParam(defaultValue = "10") Integer pageSize,
    31. String name, Short gender,
    32. @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
    33. @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){
    34. log.info("分页查询参数:{} {} {} {} {} {}",page,pageSize,name,gender,begin,end);
    35. PageBean pageBean = empService.pageList(page,pageSize,name,gender,begin,end);
    36. return Result.success(pageBean);
    37. }
    38. }

     2.3 service

    1. package com.bocai.service;
    2. import com.bocai.pojo.Emp;
    3. import com.baomidou.mybatisplus.extension.service.IService;
    4. import com.bocai.pojo.PageBean;
    5. import java.time.LocalDate;
    6. import java.util.List;
    7. /**
    8. * @author cheng
    9. * @description 针对表【emp(员工表)】的数据库操作Service
    10. * @createDate 2023-10-31 10:44:06
    11. */
    12. public interface EmpService extends IService<Emp> {
    13. /**
    14. * 分页查询
    15. * @param page
    16. * @param pageSize
    17. * @return
    18. */
    19. PageBean pageList(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end);
    20. }

    2.4 servicrImpl

    1. package com.bocai.service.impl;
    2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
    3. import com.baomidou.mybatisplus.core.toolkit.StringUtils;
    4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    6. import com.bocai.pojo.Emp;
    7. import com.bocai.pojo.PageBean;
    8. import com.bocai.service.EmpService;
    9. import com.bocai.mapper.EmpMapper;
    10. import com.bocai.utils.JwtUtils;
    11. import org.springframework.beans.factory.annotation.Autowired;
    12. import org.springframework.stereotype.Service;
    13. import java.time.LocalDate;
    14. import java.time.LocalDateTime;
    15. import java.util.HashMap;
    16. import java.util.List;
    17. import java.util.Map;
    18. /**
    19. * @author cheng
    20. * @description 针对表【emp(员工表)】的数据库操作Service实现
    21. * @createDate 2023-10-31 10:44:06
    22. */
    23. @Service
    24. public class EmpServiceImpl extends ServiceImpl<EmpMapper, Emp>
    25. implements EmpService{
    26. @Autowired
    27. private EmpMapper empMapper;
    28. /**
    29. * 分页查询
    30. * @param page
    31. * @param pageSize
    32. * @param name
    33. * @param gender
    34. * @param begin
    35. * @param end
    36. * @return
    37. */
    38. @Override
    39. public PageBean pageList(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {
    40. LambdaQueryWrapper<Emp> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    41. lambdaQueryWrapper.like(StringUtils.isNotBlank(name),Emp::getName,name)
    42. .eq(gender != null,Emp::getGender,gender)
    43. .ge(begin != null,Emp::getEntrydate,begin)
    44. .le(end != null,Emp::getEntrydate,end);
    45. Page<Emp> pageEmp = new Page<>(page,pageSize);
    46. empMapper.selectPage(pageEmp,lambdaQueryWrapper);
    47. PageBean pageBean = new PageBean(pageEmp.getTotal(),pageEmp.getRecords());
    48. return pageBean;
    49. }
    50. }

    2.5 mapper

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

    五、多表查询

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

    1.1 UserRoleDto接收返回数据

    1. package com.bocai.dto;
    2. import com.bocai.pojo.User;
    3. import lombok.AllArgsConstructor;
    4. import lombok.Data;
    5. import lombok.NoArgsConstructor;
    6. @Data
    7. @NoArgsConstructor
    8. @AllArgsConstructor
    9. public class UserRoleDto extends User {
    10. private String roleName; //非user表字段
    11. }

    1.2 controller

    1. package com.bocai.controller;
    2. import com.bocai.common.Result;
    3. import com.bocai.dto.UserRoleDto;
    4. import com.bocai.pojo.PageBean;
    5. import com.bocai.pojo.User;
    6. import com.bocai.service.UserService;
    7. import lombok.extern.slf4j.Slf4j;
    8. import org.springframework.beans.factory.annotation.Autowired;
    9. import org.springframework.web.bind.annotation.*;
    10. import java.util.List;
    11. @RestController
    12. @RequestMapping("/niubi")
    13. @Slf4j
    14. public class UserController {
    15. @Autowired
    16. private UserService userService;
    17. /**
    18. * 查询全部用户--无翻页--- 使用sql以及指定显示字段
    19. * @return
    20. */
    21. @GetMapping("/sql")
    22. public Result listSql(){
    23. log.info("查询全部启用用户信息显示+sql多表!");
    24. List list = userService.userSqlList();
    25. return Result.success(list);
    26. }

    1.3 service

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

    1.4 servcieImpl

    1. package com.bocai.service.impl;
    2. import com.aliyun.oss.ServiceException;
    3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
    4. import com.baomidou.mybatisplus.core.toolkit.StringUtils;
    5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    7. import com.bocai.dto.UserRoleDto;
    8. import com.bocai.mapper.UserRoleMapper;
    9. import com.bocai.pojo.Emp;
    10. import com.bocai.pojo.PageBean;
    11. import com.bocai.pojo.Role;
    12. import com.bocai.pojo.User;
    13. import com.bocai.service.UserService;
    14. import com.bocai.mapper.UserMapper;
    15. import lombok.extern.slf4j.Slf4j;
    16. import org.springframework.beans.factory.annotation.Autowired;
    17. import org.springframework.stereotype.Service;
    18. import org.springframework.transaction.annotation.Transactional;
    19. import java.util.HashMap;
    20. import java.util.List;
    21. import java.util.Map;
    22. /**
    23. * @author cheng
    24. * @description 针对表【user】的数据库操作Service实现
    25. * @createDate 2023-11-07 14:52:28
    26. */
    27. @Service
    28. @Slf4j
    29. public class UserServiceImpl extends ServiceImpl<UserMapper, User>
    30. implements UserService{
    31. @Autowired
    32. private UserMapper userMapper;
    33. @Autowired
    34. private UserRoleMapper userRoleMapper;
    35. /**
    36. * 查询全部用户无翻页--("查询全部启用用户信息显示+sql多表!");
    37. * @return
    38. */
    39. @Override
    40. public List<UserRoleDto> userSqlList() {
    41. List<UserRoleDto> UserRoleDto = userMapper.selectSqlList();
    42. return UserRoleDto;
    43. }
    44. }

    1.5 mapper

    1. package com.bocai.mapper;
    2. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    3. import com.bocai.dto.UserRoleDto;
    4. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    5. import com.bocai.pojo.User;
    6. import org.apache.ibatis.annotations.Mapper;
    7. import org.apache.ibatis.annotations.Select;
    8. import java.util.List;
    9. /**
    10. * @author cheng
    11. * @description 针对表【user】的数据库操作Mapper
    12. * @createDate 2023-11-07 14:52:28
    13. * @Entity com.bocai.pojo.User
    14. */
    15. @Mapper
    16. public interface UserMapper extends BaseMapper<User> {
    17. /**
    18. * 使用sql多表联查
    19. * @return
    20. */
    21. List<UserRoleDto> selectSqlList();
    22. }

    1.6 xml

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.bocai.mapper.UserMapper">
    6. <resultMap id="BaseResultMap" type="com.bocai.pojo.User">
    7. <result property="uniqueid" column="uniqueId" jdbcType="INTEGER"/>
    8. <result property="administrationcode" column="administrationCode" jdbcType="VARCHAR"/>
    9. <result property="fixgroupid" column="fixGroupId" jdbcType="INTEGER"/>
    10. <result property="loginname" column="loginName" jdbcType="VARCHAR"/>
    11. <result property="password" column="password" jdbcType="CHAR"/>
    12. <result property="realname" column="realName" jdbcType="VARCHAR"/>
    13. <result property="isspecial" column="isSpecial" jdbcType="BIT"/>
    14. <result property="isenable" column="isEnable" jdbcType="BIT"/>
    15. </resultMap>
    16. <sql id="Base_Column_List">
    17. uniqueId,
    18. loginName,password,realName,
    19. </sql>
    20. <select id="selectSqlList" resultType="com.bocai.dto.UserRoleDto">
    21. SELECT a.`realName`,a.`loginName`,c.`name` as roleName
    22. FROM USER a
    23. JOIN user_role b ON a.`uniqueId`=b.`userId`
    24. JOIN role c ON b.`roleId`=c.`uniqueId`
    25. WHERE a.`isEnable`='1';
    26. </select>
    27. </mapper>

    2、翻页+组合条件查询

    2.1 controller

    1. package com.bocai.controller;
    2. import com.bocai.common.Result;
    3. import com.bocai.dto.UserRoleDto;
    4. import com.bocai.pojo.PageBean;
    5. import com.bocai.pojo.User;
    6. import com.bocai.service.UserService;
    7. import lombok.extern.slf4j.Slf4j;
    8. import org.springframework.beans.factory.annotation.Autowired;
    9. import org.springframework.web.bind.annotation.*;
    10. import java.util.List;
    11. @RestController
    12. @RequestMapping("/niubi")
    13. @Slf4j
    14. public class UserController {
    15. @Autowired
    16. private UserService userService;
    17. /**
    18. * 使用sql多表查询分页,带条件
    19. * * @param page 第几页
    20. * * @param pageSize 每页条数
    21. * * @param realName 真实姓名
    22. * * @param userLevel 用户级别
    23. * @return
    24. */
    25. @GetMapping("/sql/page")
    26. public Result listSqlPage(@RequestParam(defaultValue = "1") Integer page,
    27. @RequestParam(defaultValue = "10") Integer pageSize,
    28. String realName,Integer userLevel){
    29. log.info("查询全部启用用户信息显示+sql多表!翻页当前第{}页,每页{},姓名{},用户级别{}",page,pageSize,realName,userLevel);
    30. PageBean pageBean = userService.userSqlPageList(page,pageSize,realName,userLevel);
    31. return Result.success(pageBean);
    32. }
    33. }

    2.2 service

    1. package com.bocai.service;
    2. import com.bocai.dto.UserRoleDto;
    3. import com.baomidou.mybatisplus.extension.service.IService;
    4. import com.bocai.pojo.PageBean;
    5. import com.bocai.pojo.User;
    6. import java.util.List;
    7. /**
    8. * @author cheng
    9. * @description 针对表【user】的数据库操作Service
    10. * @createDate 2023-11-07 14:52:28
    11. */
    12. public interface UserService extends IService<User> {
    13. /**
    14. * 多表联查+翻页+条件查询+sql
    15. * @param page
    16. * @param pageSize
    17. * @param realName
    18. * @param userLevel
    19. * @return
    20. */
    21. PageBean userSqlPageList(Integer page, Integer pageSize,String realName,Integer userLevel);
    22. }

    2.3 serviceImpl

    1. package com.bocai.service.impl;
    2. import com.aliyun.oss.ServiceException;
    3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
    4. import com.baomidou.mybatisplus.core.toolkit.StringUtils;
    5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    7. import com.bocai.dto.UserRoleDto;
    8. import com.bocai.mapper.UserRoleMapper;
    9. import com.bocai.pojo.Emp;
    10. import com.bocai.pojo.PageBean;
    11. import com.bocai.pojo.Role;
    12. import com.bocai.pojo.User;
    13. import com.bocai.service.UserService;
    14. import com.bocai.mapper.UserMapper;
    15. import lombok.extern.slf4j.Slf4j;
    16. import org.springframework.beans.factory.annotation.Autowired;
    17. import org.springframework.stereotype.Service;
    18. import org.springframework.transaction.annotation.Transactional;
    19. import java.util.HashMap;
    20. import java.util.List;
    21. import java.util.Map;
    22. /**
    23. * @author cheng
    24. * @description 针对表【user】的数据库操作Service实现
    25. * @createDate 2023-11-07 14:52:28
    26. */
    27. @Service
    28. @Slf4j
    29. public class UserServiceImpl extends ServiceImpl<UserMapper, User>
    30. implements UserService{
    31. @Autowired
    32. private UserMapper userMapper;
    33. @Autowired
    34. private UserRoleMapper userRoleMapper;
    35. /**
    36. * 多表联查+翻页+条件查询+sql
    37. * @param page
    38. * @param pageSize
    39. * @param realName
    40. * @param userLevel
    41. * @return
    42. */
    43. @Override
    44. public PageBean userSqlPageList(Integer page, Integer pageSize,String realName,Integer userLevel) {
    45. Page<UserRoleDto> pageUserRole = new Page<>(page,pageSize);
    46. userMapper.selectUserRoleDtoPage(pageUserRole,realName,userLevel);
    47. pageUserRole.getRecords();
    48. log.info("sss{},{},{},{},{}",pageUserRole.getTotal());
    49. PageBean pageBean = new PageBean(pageUserRole.getTotal(),pageUserRole.getRecords());
    50. return pageBean;
    51. }
    52. }

    2.4 mapper

    1. package com.bocai.mapper;
    2. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    3. import com.bocai.dto.UserRoleDto;
    4. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    5. import com.bocai.pojo.User;
    6. import org.apache.ibatis.annotations.Mapper;
    7. import org.apache.ibatis.annotations.Select;
    8. import java.util.List;
    9. /**
    10. * @author cheng
    11. * @description 针对表【user】的数据库操作Mapper
    12. * @createDate 2023-11-07 14:52:28
    13. * @Entity com.bocai.pojo.User
    14. */
    15. @Mapper
    16. public interface UserMapper extends BaseMapper<User> {
    17. /**
    18. * 多表联查+翻页+条件查询+sql
    19. * @param pageUserRole
    20. * @param realName
    21. * @param userLevel
    22. * @return
    23. */
    24. Page<UserRoleDto>selectUserRoleDtoPage(Page<UserRoleDto> pageUserRole, String realName,Integer userLevel);
    25. }

    2.5 xml

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.bocai.mapper.UserMapper">
    6. <resultMap id="BaseResultMap" type="com.bocai.pojo.User">
    7. <result property="uniqueid" column="uniqueId" jdbcType="INTEGER"/>
    8. <result property="administrationcode" column="administrationCode" jdbcType="VARCHAR"/>
    9. <result property="fixgroupid" column="fixGroupId" jdbcType="INTEGER"/>
    10. <result property="loginname" column="loginName" jdbcType="VARCHAR"/>
    11. <result property="password" column="password" jdbcType="CHAR"/>
    12. <result property="realname" column="realName" jdbcType="VARCHAR"/>
    13. <result property="isspecial" column="isSpecial" jdbcType="BIT"/>
    14. <result property="isenable" column="isEnable" jdbcType="BIT"/>
    15. </resultMap>
    16. <sql id="Base_Column_List">
    17. uniqueId,
    18. loginName,password,realName,
    19. </sql>
    20. <select id="selectUserRoleDtoPage" resultType="com.bocai.dto.UserRoleDto">
    21. SELECT a.uniqueid,a.`realName`,a.`loginName`,c.`name` as roleName
    22. FROM USER a
    23. JOIN user_role b ON a.`uniqueId`=b.`userId`
    24. JOIN role c ON b.`roleId`=c.`uniqueId`
    25. <where>a.`isEnable`='1'
    26. <if test="realName != null">
    27. and a.realName like concat('%', #{realName}, '%')
    28. </if>
    29. <if test="userLevel != null">
    30. and a.userLevel=#{userLevel}
    31. </if>
    32. </where>
    33. </select>
    34. </mapper>

    六、事务处理

    1、serviceImpl

    1. @Override
    2. @Transactional
    3. public void deleteById(Integer id) {
    4. userMapper.deleteById(id);
    5. // int i = 1/0;
    6. userMapper.updateUserById(id);
    7. Map<String, Object> map = new HashMap<>();
    8. map.put("userid",id);
    9. userRoleMapper.deleteByMap(map); //根据用户id删除用户与角色关系
    10. }

    2、yml配置事务日志

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

    七、判重

    1、数据库设置唯一判重

    2、代码判重 

    2.1 新增判重

    1. /**
    2. * 新增角色
    3. * @param role
    4. */
    5. @Override
    6. public void addRole(Role role) {
    7. LambdaQueryWrapper<Role> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    8. lambdaQueryWrapper.eq(role.getName() != null,Role::getName, role.getName());
    9. long count = roleMapper.selectCount(lambdaQueryWrapper);
    10. if (count > 0) {
    11. throw new ServiceException("该角色名已存在!");
    12. }
    13. role.setUpdatetime(LocalDateTime.now());
    14. role.setAdduserid(2);
    15. roleMapper.insert(role);
    16. }

    2.2 修改判重

    1. /**
    2. * 修改角色
    3. * @param role
    4. */
    5. @Override
    6. public void alterUser(Role role) {
    7. LambdaQueryWrapper<Role> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    8. lambdaQueryWrapper.eq(role.getName() != null,Role::getName, role.getName())
    9. .ne(role.getUniqueid() != null, Role::getUniqueid,role.getUniqueid());
    10. long count = roleMapper.selectCount(lambdaQueryWrapper);
    11. if (count > 0) {
    12. throw new ServiceException("该角色名已存在!");
    13. }
    14. role.setUpdatetime(LocalDateTime.now());
    15. roleMapper.updateById(role);
    16. }

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

    八、日期范围查询 

    1、controller

    1. package com.bocai.controller;
    2. import com.bocai.common.Result;
    3. import com.bocai.pojo.PageBean;
    4. import com.bocai.pojo.Role;
    5. import com.bocai.service.RoleService;
    6. import lombok.extern.slf4j.Slf4j;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.format.annotation.DateTimeFormat;
    9. import org.springframework.web.bind.annotation.*;
    10. import java.time.LocalDate;
    11. import java.time.LocalDateTime;
    12. @RestController
    13. @RequestMapping("roles")
    14. @Slf4j
    15. public class RoleController {
    16. @Autowired
    17. private RoleService roleService;
    18. /**
    19. * 带条件、翻页的查询全部角色
    20. * @param page 当前第几页
    21. * @param pageSize 每页多少条
    22. * @param name 角色名
    23. * @param roleType 角色类型
    24. * @param begin 开始时间
    25. * @param end 结束时间
    26. * @return
    27. */
    28. @GetMapping
    29. public Result page(@RequestParam(defaultValue = "1") Integer page,
    30. @RequestParam(defaultValue = "10") Integer pageSize,
    31. @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime begin,
    32. @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime end,
    33. String name,String roleType){
    34. log.info("带翻页和条件的查询全部角色当前第{}页,每页{}条,角色名:{},角色类型:{},开始时间{},结束时间{}",
    35. page,pageSize,name,roleType,begin,end);
    36. PageBean pageBean = roleService.rolePage(page,pageSize,name,roleType,begin,end);
    37. return Result.success(pageBean);
    38. }
    39. }

    2、service

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

    3、serviceImpl

    1. package com.bocai.service.impl;
    2. import com.aliyun.oss.ServiceException;
    3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
    4. import com.baomidou.mybatisplus.core.toolkit.StringUtils;
    5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    7. import com.bocai.mapper.UserRoleMapper;
    8. import com.bocai.pojo.Inhousing;
    9. import com.bocai.pojo.PageBean;
    10. import com.bocai.pojo.Role;
    11. import com.bocai.service.RoleService;
    12. import com.bocai.mapper.RoleMapper;
    13. import org.springframework.beans.factory.annotation.Autowired;
    14. import org.springframework.stereotype.Service;
    15. import org.springframework.transaction.annotation.Transactional;
    16. import java.time.LocalDateTime;
    17. import java.util.HashMap;
    18. import java.util.Map;
    19. /**
    20. * @author cheng
    21. * @description 针对表【role】的数据库操作Service实现
    22. * @createDate 2023-11-07 14:52:38
    23. */
    24. @Service
    25. public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role>
    26. implements RoleService{
    27. @Autowired
    28. private RoleMapper roleMapper;
    29. @Autowired
    30. private UserRoleMapper userRoleMapper;
    31. /**
    32. * 带条件的翻页查询全部角色
    33. * @param page 当前第几页
    34. * @param pageSize 每页多少条
    35. * @param name 角色名
    36. * @param roleType 角色类型
    37. * @param begin 开始时间
    38. * @param end 结束时间
    39. * @return
    40. */
    41. @Override
    42. public PageBean rolePage(Integer page, Integer pageSize, String name, String roleType,LocalDateTime begin,LocalDateTime end) {
    43. LambdaQueryWrapper<Role> lambdaQueryWrapper =new LambdaQueryWrapper<>();
    44. lambdaQueryWrapper.like(StringUtils.isNotBlank(name),Role::getName,name)
    45. .like(StringUtils.isNotBlank(roleType),Role::getRoletype,roleType)
    46. .between(begin != null && end != null,Role::getUpdatetime,begin,end);
    47. Page<Role> rolePage = new Page<>(page,pageSize);
    48. roleMapper.selectPage(rolePage,lambdaQueryWrapper);
    49. PageBean pageBean = new PageBean(rolePage.getTotal(),rolePage.getRecords());
    50. return pageBean;
    51. }

    也可以使用这个方式

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

     

    4、mapper

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

    九、POST请求封装DTO查询

    1、POST接口请求传参

    1. {
    2. "roleid": 564,
    3. "usersid": [694, 693]
    4. }

     2、封装DTO

    1. package com.bocai.dto;
    2. import lombok.AllArgsConstructor;
    3. import lombok.Data;
    4. import lombok.NoArgsConstructor;
    5. import java.util.List;
    6. @Data
    7. @NoArgsConstructor
    8. @AllArgsConstructor
    9. public class UsersRoleDto{
    10. private Integer roleid;
    11. private List usersid;
    12. }

    3、controller

    1. package com.bocai.controller;
    2. import com.bocai.common.Result;
    3. import com.bocai.dto.UsersRoleDto;
    4. import com.bocai.service.UserRoleService;
    5. import lombok.extern.slf4j.Slf4j;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.web.bind.annotation.*;
    8. import java.util.List;
    9. @RestController
    10. @RequestMapping("/userRoles")
    11. @Slf4j
    12. public class userRoleController {
    13. @Autowired
    14. private UserRoleService userRoleService;
    15. /**
    16. * 分配
    17. * @param usersRoleDto
    18. * @return
    19. */
    20. @PostMapping()
    21. public Result usersRole(@RequestBody UsersRoleDto usersRoleDto){
    22. log.info("分配{}",usersRoleDto);
    23. userRoleService.usersRole(usersRoleDto);
    24. return Result.success();
    25. }
    26. }

    4、service

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

    5、serviceImpl

    1. package com.bocai.service.impl;
    2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
    3. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    4. import com.bocai.dto.UsersRoleDto;
    5. import com.bocai.pojo.UserRole;
    6. import com.bocai.service.UserRoleService;
    7. import com.bocai.mapper.UserRoleMapper;
    8. import lombok.extern.slf4j.Slf4j;
    9. import org.springframework.beans.factory.annotation.Autowired;
    10. import org.springframework.stereotype.Service;
    11. import java.util.List;
    12. /**
    13. * @author cheng
    14. * @description 针对表【user_role】的数据库操作Service实现
    15. * @createDate 2023-11-07 14:52:46
    16. */
    17. @Service
    18. @Slf4j
    19. public class UserRoleServiceImpl extends ServiceImpl<UserRoleMapper, UserRole>
    20. implements UserRoleService{
    21. @Autowired
    22. private UserRoleMapper userRoleMapper;
    23. /**
    24. * 分配
    25. * @param usersRoleDto
    26. */
    27. @Override
    28. public void usersRole(UsersRoleDto usersRoleDto) {
    29. usersRoleDto.getUsersid().forEach(userId ->{
    30. UserRole userRole = new UserRole();
    31. userRole.setUserid(userId);
    32. userRole.setRoleid(usersRoleDto.getRoleid());
    33. LambdaQueryWrapper<UserRole> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    34. lambdaQueryWrapper.eq(userId != null,UserRole::getUserid,userId);
    35. Integer count = userRoleMapper.selectCount(lambdaQueryWrapper);
    36. if (count > 0){
    37. userRoleMapper.delete(lambdaQueryWrapper);
    38. }
    39. userRoleMapper.insert(userRole);
    40. });
    41. }
    42. }

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

    6、mapper

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

  • 相关阅读:
    JAVA初阶——程序逻辑控制
    基于Java后端与Typescript前端的代码自动生成 - malcolmcrum
    C++:多态 详解
    C# Onnx Yolov8 Detect 路面坑洼检测
    前端常用的开发工具有哪些?
    常见加解密算法04 - 分组密码DES
    每日一题~中序后序遍历构造二叉树
    C++设计模式---模板方法模式
    微信小程序scroll-view真机出现滚动条如何隐藏
    性能测试 —— Jmeter 常用三种定时器
  • 原文地址:https://blog.csdn.net/legend818/article/details/134306464