搭建環(huán)境:jdk8爬舰,maven3.3.9蛾魄,MySQL 5.6奔浅,mybatisplus3.0-gamma
開發(fā)工具:idea 2018.1.5
集成mybatis plus自帶的分頁、邏輯刪除邻遏、sql性能分析插件功能糠亩、測試公共字段自動填充功能虐骑、樂觀鎖
走一走看一看咯
特別注意,此案例版本是3.0-gamma赎线,若升級到3.0-RC廷没,需修改調用方法名,如selectById()->getById垂寥,selectPage()->page()等等....另自定義MetaObjectHandler原先是抽象類颠黎,現(xiàn)在改成接口,需implement矫废,而不是extend
一盏缤、通過idea構建springboot項目
1、打開idea蓖扑,點擊 Create New Project
按鈕
2唉铜、點擊
Spring Initializr
標簽,選擇自己安裝的jdk律杠,點擊Next
3潭流、選擇對應的項目配置,點擊
next
4柜去、選擇spring boot項目依賴灰嫉,一直點擊
Next
,直到finish
5嗓奢、等待maven構建讼撒,構建完成的項目結構如下
二、新建MySQL數(shù)據(jù)庫股耽,初始化sql
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用戶名',
`nickname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '別名',
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '密碼',
`role_id` int(11) DEFAULT NULL COMMENT '權限id',
`dept_id` int(11) DEFAULT NULL COMMENT '部門id',
`create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建時間',
`update_time` datetime DEFAULT NULL COMMENT '修改時間',
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '備注',
`deleted` int(11) DEFAULT 0 COMMENT '是否刪除(0:未刪除 1:已刪除)',
`update_version` int(11) DEFAULT 0 COMMENT '樂觀鎖',
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '郵件',
`phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '電話',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 18 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用戶' ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
三根盒、配置數(shù)據(jù)庫及tomcat相關信息
spring:
datasource:
url: jdbc:mysql://localhost:3306/demo?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: 123456
server:
tomcat:
uri-encoding: UTF-8
max-threads: 1000
min-spare-threads: 30
port: 8081
servlet:
context-path: /
四、添加mybatis plus 依賴物蝙,更換阿里鏡像倉庫
maven不卡的話炎滞,就不需要切換阿里倉庫了。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0-gamma</version>
</dependency>
<repositories>
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
</repositories>
五诬乞、構建項目基本目錄結構
代碼結構如圖所示
model
package top.shen33.yang.model.po;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import java.time.LocalDateTime;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 用戶
* </p>
*
* @author shen
* @since 2018-07-16
*/
public class SysUser extends Model {
/**
* 主鍵
*/
@TableId("id")
private Integer id;
/**
* 用戶名
*/
@TableField("username")
private String username;
/**
* 別名
*/
@TableField("nickname")
private String nickname;
/**
* 密碼
*/
@TableField("password")
private String password;
/**
* 權限id
*/
@TableField("role_id")
private Integer roleId;
/**
* 權限名稱
*/
@TableField(exist = false)
private String roleName;
/**
* 部門id
*/
@TableField("dept_id")
private Integer deptId;
/**
* 部門名稱
*/
@TableField(exist = false)
private String deptName;
/**
* 創(chuàng)建時間
*/
@TableField(value = "create_time",fill = FieldFill.INSERT)
private Date createTime;
/**
* 修改時間
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
/**
* 備注
*/
@TableField("remark")
private String remark;
/**
* 是否刪除(0:未刪除 1:已刪除)
*/
@TableField("deleted")
@TableLogic
private Integer deleted;
/**
* 郵件
*/
@TableField("email")
private String email;
/**
* 電話
*/
@TableField("phone")
private String phone;
/**
* 樂觀鎖
*/
@Version
@TableField("update_version")
private Integer updateVersion;
@Override
protected Serializable pkVal() {
return this.id;
}
//getter and setter 自己寫
@Override
public String toString() {
return "SysUser{" +
", id=" + id +
", username=" + username +
", nickname=" + nickname +
", password=" + password +
", roleId=" + roleId +
", deptId=" + deptId +
", createTime=" + createTime +
", updateTime=" + updateTime +
", remark=" + remark +
", deleted=" + deleted +
", email=" + email +
", phone=" + phone +
", updateVersion=" + updateVersion +
"}";
}
}
mapper
package top.shen33.yang.mapper;
import top.shen33.yang.model.SysUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 用戶 Mapper 接口
* </p>
*
* @author shen
* @since 2018-07-16
*/
public interface SysUserMapper extends BaseMapper<SysUser> {
}
services
package top.shen33.yang.services;
import top.shen33.yang.model.SysUser;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 用戶 服務類
* </p>
*
* @author shen
* @since 2018-07-16
*/
public interface SysUserService extends IService<SysUser> {
}
services.impl
package top.shen33.yang.services.impl;
import top.shen33.yang.model.SysUser;
import top.shen33.yang.mapper.SysUserMapper;
import top.shen33.yang.services.SysUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 用戶 服務實現(xiàn)類
* </p>
*
* @author shen
* @since 2018-07-16
*/
@Service
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService {
}
controller
package top.shen33.yang.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import top.shen33.yang.model.SysUser;
import top.shen33.yang.services.SysUserService;
/**
* <p>
* 用戶 前端控制器
* </p>
*
* @author shen
* @since 2018-07-16
*/
@Controller
@RequestMapping("/sysUser")
public class SysUserController {
@Autowired
private SysUserService sysUserService;
@GetMapping(value = "test")
public void test(){
//測試邏輯刪除功能
SysUser sysUser = sysUserService.selectById(1);
//測試分頁
IPage<SysUser> sysUserIPage = sysUserService.selectPage(
new Page<SysUser>(1, 10), new QueryWrapper<>());
//測試公共字段自動填充
SysUser sysUser1 = new SysUser();
sysUser1.setUsername("shen");
sysUser1.setNickname("shen");
sysUser1.setPassword("shen");
sysUserService.insert(sysUser1);
//測試樂觀鎖
SysUser sysUser2 = new SysUser();
sysUser2.setId(19);
sysUser2.setUsername("shen2");
sysUser2.setNickname("shen2");
sysUser2.setPassword("shen2");
sysUser2.setUpdateVersion(1);
sysUserService.updateById(sysUser2);
}
}
六册赛、配置mybatis plus config
配置mybatis plus自帶的分頁、邏輯刪除震嫉、sql性能分析插件功能森瘪、測試公共字段自動填充功能、樂觀鎖
- MybatisPlusConfig 文件配置
package top.shen33.yang.core.config;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
@MapperScan("top.shen33.yang.mapper")//這個注解票堵,作用相當于下面的@Bean MapperScannerConfigurer扼睬,2者配置1份即可
public class MybatisPlusConfig {
/**
* 分頁插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
/**
* sql注入器 邏輯刪除插件
* @return
*/
@Bean
public ISqlInjector iSqlInjector(){
return new LogicSqlInjector();
}
/**
* sql性能分析插件,輸出sql語句及所需時間
* @return
*/
@Bean
@Profile({"dev","test"})// 設置 dev test 環(huán)境開啟
public PerformanceInterceptor performanceInterceptor() {
return new PerformanceInterceptor();
}
/**
* 樂觀鎖插件
* @return
*/
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
}
- 配置文件配置
#mybatis plus
mybatis-plus:
mapper-locations: classpath:/mapper/*Mapper.xml
#實體掃描换衬,多個package用逗號或者分號分隔
typeAliasesPackage: top.shen33.yang.model.po
#typeEnumsPackage: com.baomidou.springboot.entity.enums
global-config:
#刷新mapper 調試神器
db-config:
#主鍵類型 0:"數(shù)據(jù)庫ID自增", 1:"用戶輸入ID",2:"全局唯一ID (數(shù)字類型唯一ID)", 3:"全局唯一ID UUID";
id-type: AUTO
#字段策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷"
field-strategy: not_empty
#駝峰下劃線轉換
column-underline: true
#數(shù)據(jù)庫大寫下劃線轉換
#capital-mode: true
#邏輯刪除配置
logic-delete-value: 1
logic-not-delete-value: 0
db-type: mysql
refresh: true
#自定義填充策略接口實現(xiàn)
#meta-object-handler: com.baomidou.springboot.xxx
#自定義SQL注入器
#sql-injector: com.baomidou.mybatisplus.extension.injector.LogicSqlInjector
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
- MetaObjectHandlerConfig 文件配置
package top.shen33.yang.core.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* 配置公共字段自動填充功能 @TableField(..fill = FieldFill.INSERT)
* 特別注意痰驱,3.0-gamma之前的版本 MetaObjectHandler 是抽象類
* 3.0-RC之后的版本MetaObjectHandler 是接口
*/
@Component
public class MetaObjectHandlerConfig extends MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
Object createTime = getFieldValByName("createTime", metaObject);
Object updateTime = getFieldValByName("updateTime", metaObject);
if (createTime == null)
setFieldValByName("createTime",new Date(), metaObject);//mybatis-plus版本2.0.9+
if (updateTime == null)
setFieldValByName("updateTime",new Date(), metaObject);//mybatis-plus版本2.0.9+
}
@Override
public void updateFill(MetaObject metaObject) {
Object updateTime = getFieldValByName("updateTime", metaObject);
if (updateTime == null) {
setFieldValByName("updateTime", new Date(), metaObject);//mybatis-plus版本2.0.9+
}
}
}
七证芭、啟動程序,運行http://localhost:8081/sysUser/test担映,結果如下
7.1邏輯刪除功能測試 具體使用查看官方文檔
注意:新增時sql不會新增@TableLogic的字段废士,建議數(shù)據(jù)庫給默認值,默認是為邏輯刪除中配置的logic-not-delete-value的值
7.2分頁功能測試
7.3公共字段自動填充功能測試
-
新增
-
修改
7.4 樂觀鎖測試
八蝇完、項目地址
項目地址
寫文章不易官硝,如對您有幫助,請幫忙點下star