第三章: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

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

 

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