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