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

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("[email protected]");
        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);
    }

}

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

 

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

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

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章