【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、数据库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

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

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

相关文章

Android - 编译 openssl 踩坑之路

一、简述 如果你想快速在项目中使用上 openssl,可以使用网上其他开发者提供好的预编译库: OpenSSL(All):https://builds.viaduck.org/prebuilts/openssl/OpenSSL(3.1.*) :https://github.com/217heidai/openssl_for_android以上的预编译库可能最低只支持 API 21(即 Andro…

基于Kinect 动捕XR直播解决方案 - 技术实现篇

一 安装与部署 1. 安装与部署Kinect-v2设备: 安装硬件: Kinect-v2设备带线一台; Kinect-v2 原装适配器适配器组合件设备一台; Kinect-v2 USB 3.0 WIndows PC 一天&#xff0c;原主板支持USB3.0接口; Windows PC 系统 Win10( Win 10 Version 21H2更新, 基于x64系统), 特别…

必看:一组WhatsApp2023年数据合集,助你深入洞察WS营销

作为一款遍布全球的超级应用&#xff0c;WhatsApp以高人气、广覆盖和高效便利收获了几十亿用户&#xff0c;也无数次连接了用户与企业。对于WhatsApp运营布局&#xff0c;客观数据能为企业提供多方面的依据和判断。本文将从多个维度展示WhatsApp2023年数据&#xff0c;希望能为…

Spring Boot 统一处理功能

目录 1.用户登陆权限验证 1.1 每个方法验证 1.2 Spring AOP 用户统一登陆验证 1.3 拦截器 1.3.1 自定义拦截器 1.3.2 将自定义拦截器配置到系统设置中&#xff0c;并且设置拦截规则 1.3.3 排除所有的静态资源 1.4 登录拦截器&#xff08;练习&#xff09; 1.5 拦截器原…

全网短视频平台视频下载神器软件,可以下载网页上的视频、音频、直播、回放、课程 【视频下载脚本+教程】

软件介绍&#xff1a; 这是一款可以下载全网大多数平台视频的软件&#xff0c;可以帮助用户轻松下载网页上的视频、直播、回放、课程等&#xff0c;也可以支持下载MP3音乐文件、图片。 目前支持的平台有&#xff1a;淘宝、抖音、快手、哔哩哔哩、虎牙、斗鱼、京东、京喜、小红…

《安富莱嵌入式周报》第326期:航空航天级CANopen协议栈,开源USB PD电源和功耗分析,开源EtherCAT伺服驱动板,时序绘制软件,现代机器人设计

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 更新一期视频教程&#xff1a; BSP视频教程第28期&#xff1a;CANopen协议栈专题&#xff0c;CANopen主从机组网实战&a…

Oracle Primavera Unifier 23.10 新特征

根据官方的说法&#xff0c;Unifier 23.7 ~ 23.9 更多为对功能bug的修复&#xff0c;以下将对23.10进行重点介绍 Cost Sheets Cost Sheets Support Conditional Formatting Conditional formatting of table data is now supported in cost sheets with features such as ce…

基于单片机智能加湿器控制系统仿真设计

**单片机设计介绍&#xff0c; 698【毕业课设】基于单片机智能加湿器控制系统仿真设计 文章目录 一 概要系统组成总结 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 单片机智能加湿器控制系统仿真设计介绍 单片机智能加湿器控制系统是一种利用微…

建链时,please install openssl! use “openssl version“ command to check.

please install openssl! use “openssl version” command to check. 但是我已经安装了 编辑build_chain.sh文件 也可以用vi或者gedit命令 将 [ ! -z “ ( o p e n s s l v e r s i o n ∣ g r e p 1.0.2 ) " ] ∣ ∣ [ ! − z " (openssl version | grep 1.0.2)…

目标检测算法 - YOLOv1

文章目录 1. 作者简介2. 目标检测综述3. YOLOv1算法3.1 预测阶段3.2 预测阶段后处理3.3 训练阶段 YOLO的全称是you only look once&#xff0c;指只需要浏览一次就可以识别出图中的物体的类别和位置。 YOLO是目标检测模型。目标检测是计算机视觉中比较简单的任务&#xff0c;用…

社区治理进化史!拓世法宝化身“虚拟社工”,点亮智能社区的每一个角落

时光流转、技术猛进&#xff0c;社区不再只是在制度层面作为城市治理的最小单元&#xff0c;更是在民生层面成为政府联系、服务群众的“神经末梢”。城市的脚步越来越匆忙&#xff0c;人们对于社区的服务期待也愈发高涨。面对日益复杂的社区治理和服务需求&#xff0c;我们迫切…

商越科技:渗透测试保障平台安全,推动线上采购高效运转

商越科技是数字化采购解决方案提供商&#xff0c;在同赛道企业中始终保持前列。商越科技通过自主研发的智能采购中台、SaaS应用及运营服务等为企业搭建专属的互联网采购平台&#xff0c;帮助企业实现采购数字化以及智能化转型&#xff0c;提高工作效率、降低采购成本。 打造数字…

12、填写NGINX配置部署前端;运行jar部署后端

后端可以部署的方式&#xff0c;首先直接运行jar是肯定可以的。此外&#xff0c;可以单独开docker容器运行在容器中。 但是这里运行在容器中必要性&#xff0c;其实并不大。 当前我们直接运行jar来运行后端。后面推出集成docker。 直接运行jar包的方式&#xff0c;首先需要打…

数据结构与算法—插入排序选择排序

目录 一、排序的概念 二、插入排序 1、直接插入排序 直接插入排序的特性总结&#xff1a; 2、希尔排序 希尔排序的特性总结&#xff1a; 三、选择排序 1、直接选择排序 时间复杂度 2、堆排序—排升序(建大堆) 向下调整函数 堆排序函数 四、交换排序 1、冒泡排…

5G边缘计算网关的功能及作用

5G边缘计算网关具有多种功能。 首先&#xff0c;它支持智能云端控制&#xff0c;可以通过5G/4G/WIFI等无线网络将采集的数据直接上云&#xff0c;实现异地远程监测控制、预警通知、报告推送和设备连接等工作。 其次&#xff0c;5G边缘计算网关可以采集各种数据&#xff0c;包…

Linux文件管理知识:文本处理

上篇文章详细介绍了Linux系统中查找文件的工具或者命令程序的相关操作内容介绍。那么&#xff0c;今天呢&#xff0c;这篇文章围绕Linux系统中文本处理来阐述。 众所周知&#xff0c;所有Linux操作系统都离不开一个核心原则&#xff0c;那就是它是由很多种文件组成的&#xff0…

如何在在线Excel文档中对数据进行统计

本次我们将用zOffice表格的公式与数据透视表分析样例&#xff08;三个班级的学生成绩&#xff09;。zOffice表格内置了大量和Excel相同的统计公式&#xff0c;可以进行各种常见的统计分析&#xff0c;如平均值、标准差、相关性等。同时&#xff0c;zOffice也有数据透视表功能&a…

棋牌室电脑计时灯控,棋牌室计时灯控安装,佳易王计时计费管理系统软件

棋牌室电脑计时灯控&#xff0c;棋牌室计时灯控安装&#xff0c;佳易王计时计费管理系统软件 棋牌室的灯可以用佳易王计时计费软件来控制开关&#xff0c;当开始计时的时候&#xff0c;软件发送开灯的指令&#xff0c;灯打开&#xff0c;在结账后&#xff0c;软件发送关灯指令…

抖音小店销售转化率提升:10个实用策略和技巧

抖音小店是一种在抖音平台上进行销售的电商模式&#xff0c;通过短视频和直播等方式向用户推销商品。而销售转化率则是衡量用户进行购买行为的比率&#xff0c;是评估抖音小店运营效果的重要指标。以下是四川不若与众一些提高抖音小店销售转化率的策略和技巧。 1.优化商品展示&…

Unity3d C#实现编辑器不运行状态下执行的脚本

第一章方式&#xff1a; 函数前面 [ContextMenu("Play")] &#xff0c;Inspector面板右键调用 第二种方式&#xff1a; OnValidate() &#xff0c;值改变自动执行 using UnityEngine; using System.Linq;public class NightController : MonoBehaviour {pub…