欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第三章:MyBatis-Plus跟pagehelper的配置

程序员文章站 2022-06-09 08:55:26
...

MyBatis-Plus

当我们使用了mybatis-plus过后,就不需要在去pom中引用mybatis了。

<dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus-boot-starter</artifactId>
   <version>3.2.0</version>
</dependency>

这里没啥要说的,官网的文档已经提供的灰常的详细了:https://mp.baomidou.com/

为什么要使用这个呢,主要是他真的是简化了太多mybatis的使用了。非常棒的一个框架。

现在,我开始来配置他,主要是在yml里面新增配置:

# mybatis-plus配置
mybatis-plus:
  # mapper.xml路径
  mapper-locations: classpath*:mapper/**/*.xml
  # 实体扫描,多个package用逗号或者分号分隔
  type-aliases-package: com.hzw.code.fast.entity
  global-config:
    db-config:
      # 驼峰下划线转换
      table-underline: true
      # id生成策略采用默认雪花
      id-type: id_worker_str
  configuration:
    # 配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(如不开启,SQL需要写as: select user_id as userId)
    map-underscore-to-camel-case: true
    cache-enabled: false
    # 打印sql配置
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

这里的配置主要是指定我们mapper.xml的位置,跟实体类的位置,还有主键策略等

配置mybatis的mapper接口扫描

/**
 * 程序入口
 */
@SpringBootApplication
@MapperScan("com.hzw.code.fast.mapper")
public class FastApplication {

   public static void main(String[] args) {
      ConfigurableApplicationContext application = SpringApplication.run(FastApplication.class, args);
      CommonUtils.printSysInfo(application);
   }

}

PageHelper

分页插件的集成,我们的分页都交给PageHelper来处理,这里就不贴上PageHelper的maven配置了,因为我们在第二章的时候,已经把所有的pom都引入了。下面我们直接开始上配置:

# 分页配置
pagehelper:
  supportMethodsArguments: true
  reasonable: false
  helperDialect: mysql
  params: count=countSql

万事俱备,我们开始弄数据库吧!

创建用户表

create table sys_user(
	user_id varchar(64) comment '雪花主键',
	real_name varchar(50) comment '账号',
	user_pass	varchar(64) comment '密码',
	user_name varchar(50) comment '用户名称',
	user_phone varchar(20) comment '手机号码',
	user_email varchar(50) comment '邮箱',
	user_status int comment '数据状态:1启用;2禁用',
	create_time datetime comment '创建时间',
	PRIMARY KEY (user_id)
) comment '用户表';

实体类SysUser

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.hzw.code.fast.entity.BaseEntity;
import lombok.Data;

import java.util.Date;

/**
 * 用户实体
 */
@Data
@TableName("sys_user")
public class SysUser extends BaseEntity {

    /**
     * 用户编号
     */
    @TableId
    private String userId;

    /**
     * 登录账号
     */
    private String userAccount;

    /**
     * 密码
     */
    private String userPass;

    /**
     * 用户名称
     */
    private String userName;

    /**
     * 手机号码
     */
    private String userPhone;

    /**
     * 邮箱
     */
    private String userEmail;

    /**
     * 数据状态:1启用;2禁用
     */
    private Integer userStatus;

    /**
     * 创建时间
     */
    private Date createTime;
}

这里的@TableName对应的表名,@TableId对应的主键,一定要记得加上

SysUserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hzw.code.fast.mapper.sys.SysUserMapper">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.hzw.code.fast.entity.sys.SysUserEntity">
        <id column="user_id" property="userId" />
        <result column="user_account" property="userAccount" />
        <result column="user_pass" property="userPass" />
        <result column="user_name" property="userName" />
        <result column="user_phone" property="userPhone" />
        <result column="user_email" property="userEmail" />
        <result column="user_status" property="userStatus" />
        <result column="create_time" property="createTime" />
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        user_id,user_account,user_pass,user_name,user_phone,user_email,user_status,create_time
    </sql>

    <!-- 分页查询 -->
    <select id="findSysUserList" parameterType="com.hzw.code.fast.dto.sys.query.SysUserQueryDto"
            resultType="com.hzw.code.fast.dto.sys.SysUserDto">
        select <include refid="Base_Column_List" /> from sys_user
        <where>
            <if test="userName != null and userName != ''">
                and user_name like concat('%',#{userName},'%')
            </if>
            <if test="userPhone != null and userPhone != null">
                and user_phone = #{userPhone}
            </if>
        </where>
    </select>

</mapper>

SysUserMapper接口

这里的接口需要继承一下BaseMapper,继承他以后就可以使用mybatisplus提供的一些便捷操作接口了

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzw.code.fast.dto.sys.SysUserDto;
import com.hzw.code.fast.dto.sys.query.SysUserQueryDto;
import com.hzw.code.fast.entity.sys.SysUserEntity;

import java.util.List;

/**
 * 用户数据层接口
 */
public interface SysUserMapper  extends BaseMapper<SysUserEntity> {

    /**
     * 列表查询
     * @param queryDto
     * @return
     */
    List<SysUserDto> findSysUserList(SysUserQueryDto queryDto);

}

查询返回的参数SysUserDto

这里需要写一下dto,因为有一些参数我们不想直接返回给前端,也不想前端传上来的,所以需要多封装一些实体类来进行参数的接收跟返回。

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;

/**
 * 用户返回实体
 */
@Data
@ApiModel("用户返回实体")
public class SysUserDto implements Serializable {

    /**
     * 用户编号
     */
    @ApiModelProperty(value = "用户编号", name="userId")
    private String userId;

    /**
     * 登录账号
     */
    @ApiModelProperty(value = "登录账号", name="userAccount")
    private String userAccount;

    /**
     * 用户名称
     */
    @ApiModelProperty(value = "用户名称", name="userName")
    private String userName;

    /**
     * 手机号码
     */
    @ApiModelProperty(value = "手机号码", name="userPhone")
    private String userPhone;

    /**
     * 邮箱
     */
    @ApiModelProperty(value = "邮箱", name="userEmail")
    private String userEmail;

    /**
     * 数据状态:1启用;2禁用
     */
    @ApiModelProperty(value = "数据状态:1启用;2禁用", name="userStatus")
    private Integer userStatus;

    /**
     * 创建时间
     */
    @ApiModelProperty(value = "创建时间", name="createTime")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
}

这里面要注意不需要返回给前端的数据就不要放在这里面。

还有查询条件参数SysUserQueryDto

import com.hzw.code.fast.constant.BaseQueryPageDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
 * 用户查询参数
 */
@Data
@ApiModel("用户查询")
public class SysUserQueryDto extends BaseQueryPageDto {
    /**
     * 用户名称
     */
    @ApiModelProperty(value = "用户名称参数", name="userName")
    private String userName;

    /**
     * 手机号码
     */
    @ApiModelProperty(value = "手机号码参数", name="userPhone")
    private String userPhone;
}

这里的BaseQueryPageDto主要封装了分页需要的参数

里面的ApiModel跟ApiModelProperty的注解是swagger的,一个是实体类的一个是实体类的属性,在这里定义后,方便前端开放人员在swagger文档上查看到实体类跟属性的具体注释。

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;

/**
 * 分页公共类
 */
@ApiModel("分页数据")
@Data
public class BaseQueryPageDto implements Serializable {

    /**
     * 当前页
     */
    @ApiModelProperty(value = "当前页", name="pageNum")
    private Integer pageNum;

    /**
     * 每页显示条目
     */
    @ApiModelProperty(value = "每页显示条目", name="pageSize")
    private Integer pageSize;

}

Service

在接口中继承IService,在实现类中继承ServiceImpl,这里就可以使用mybatisplus提供的骚操作了

记得在实现类中加上@Service(业务层标识)跟@Transactional(事务)的注解

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.hzw.code.fast.dto.sys.SysUserDto;
import com.hzw.code.fast.dto.sys.query.SysUserQueryDto;
import com.hzw.code.fast.entity.sys.SysUserEntity;


/**
 * 用户业务层接口
 */
public interface SysUserService extends IService<SysUserEntity> {

    /**
     * 分页查询
     * @param queryDto
     * @return
     */
    PageInfo<SysUserDto> findSysUserList(SysUserQueryDto queryDto);

    /**
     * 查询账号是否存在
     * @param account
     * @return
     */
    int getCountByAccount(String account);

    /**
     * 查询账号是否存在
     * @param account
     * @return
     */
    int getCountByPhone(String account);

}
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hzw.code.fast.dto.sys.SysUserDto;
import com.hzw.code.fast.dto.sys.query.SysUserQueryDto;
import com.hzw.code.fast.entity.sys.SysUserEntity;
import com.hzw.code.fast.mapper.sys.SysUserMapper;
import com.hzw.code.fast.service.sys.SysUserService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * 用户业务层实现类
 */
@Service
@Transactional
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity> implements SysUserService {

    private final SysUserMapper userMapper;
    public SysUserServiceImpl(SysUserMapper userMapper) {
        this.userMapper = userMapper;
    }

    @Override
    public PageInfo<SysUserDto> findSysUserList(SysUserQueryDto queryDto) {
        // 启用分页
        PageHelper.startPage(queryDto.getPageNum(),queryDto.getPageSize());
        PageInfo<SysUserDto> pageInfo = new PageInfo<>(userMapper.findSysUserList(queryDto));
        return pageInfo;
    }

    @Override
    public int getCountByAccount(String account) {
        QueryWrapper<SysUserEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("user_account",account);
        return super.count(queryWrapper);
    }

    @Override
    public int getCountByPhone(String phone) {
        QueryWrapper<SysUserEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("user_phone",phone);
        return super.count(queryWrapper);
    }
}

Test

import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageInfo;
import com.hzw.code.fast.constant.CoreConstants;
import com.hzw.code.fast.dto.sys.SysUserDto;
import com.hzw.code.fast.dto.sys.query.SysUserQueryDto;
import com.hzw.code.fast.entity.sys.SysUserEntity;
import com.hzw.code.fast.service.sys.SysUserService;
import com.hzw.code.fast.utils.Md5Utils;
import org.assertj.core.util.Lists;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Date;
import java.util.List;

/**
 * 用户单元测试
 */
@SpringBootTest
public class SysUserTests {

    @Autowired
    private SysUserService userService;

    /**
     * 新增
     */
    @Test
    public void addUser(){
        System.out.println("====================用户新增开始===================");
        SysUserEntity user = new SysUserEntity();
        user.setUserAccount("fastAccount");
        user.setUserPhone("11111111111");
        user.setCreateTime(new Date());
        user.setUserEmail("aaa@qq.com");
        user.setUserName("胡汉三");
        user.setUserPass(Md5Utils.md5("123456",null, CoreConstants.PASSWORD_MD5_SUFFIX));
        user.setUserStatus(1);
        int count = userService.getCountByAccount(user.getUserAccount());
        if(count > 0){
            System.out.println("账号:"+user.getUserAccount()+".已存在!请重新输入");
            return;
        }

        count = userService.getCountByPhone(user.getUserPhone());
        if(count > 0){
            System.out.println("手机号码:"+user.getUserPhone()+".已存在!请重新输入");
            return;
        }
        userService.save(user);
        System.out.println("====================用户新增成功:"+user.getUserId()+"===================");
        userId = user.getUserId();
    }

    /**
     * 批量新增
     */
    @Test
    public void batchAdd(){
        List<SysUserEntity> list = Lists.newArrayList();
        for(int i = 0; i < 100; i++){
            SysUserEntity user = new SysUserEntity();
            user.setUserAccount("fastAccount"+i);
            user.setUserPhone("11111"+i+"11111");
            user.setCreateTime(new Date());
            user.setUserEmail("hzw2312"+i+"@sina.com");
            user.setUserName("胡汉三"+i);
            user.setUserPass(Md5Utils.md5("123456"+i,null, CoreConstants.PASSWORD_MD5_SUFFIX));
            user.setUserStatus(1);
            list.add(user);
        }
        userService.saveBatch(list);
    }


    private String userId = "1255792358295744513";
    /**
     * 删除
     */
    @Test
    public void delUser(){
        System.out.println("====================用户删除开始:"+userId+"===================");
        userService.removeById(userId);
        System.out.println("====================删除成功===================");
    }

    /**
     * 修改
     */
    @Test
    public void editUser(){
        SysUserEntity user = new SysUserEntity();
        user.setUserId("1255795451725041665");
        user.setUserAccount("admin");
        userService.updateById(user);
    }

    /**
     * 分页查询
     */
    @Test
    public void page(){
        SysUserQueryDto queryDto = new SysUserQueryDto();
        queryDto.setPageNum(1);
        queryDto.setPageSize(10);
        PageInfo<SysUserDto> pageInfo = userService.findSysUserList(queryDto);
        String json = JSON.toJSON(pageInfo).toString();
        System.out.println(json);
    }

}

第三章:MyBatis-Plus跟pagehelper的配置

这样我们的mybatisPlus跟pageHelper都能正常的使用了,接下来我们将进行Spring Security的配置

 

----------------------------------------------------------

项目的源码地址:https://gitee.com/gzsjd/fast

----------------------------------------------------------

 

相关标签: Java快速开发