spring boot 2.0 框架搭建及整合mybatis plus 3.0(一)

搭建環(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性能分析插件功能森瘪、測試公共字段自動填充功能、樂觀鎖

  1. 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();
    }

}
  1. 配置文件配置
#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
  1. 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公共字段自動填充功能測試

  1. 新增


  1. 修改



7.4 樂觀鎖測試

八蝇完、項目地址

項目地址
寫文章不易官硝,如對您有幫助,請幫忙點下star

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末短蜕,一起剝皮案震驚了整個濱河市氢架,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌朋魔,老刑警劉巖岖研,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異警检,居然都是意外死亡孙援,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門扇雕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拓售,“玉大人,你說我怎么就攤上這事镶奉〈∮伲” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵哨苛,是天一觀的道長鸽凶。 經(jīng)常有香客問我,道長移国,這世上最難降的妖魔是什么吱瘩? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任道伟,我火速辦了婚禮迹缀,結果婚禮上,老公的妹妹穿的比我還像新娘蜜徽。我一直安慰自己祝懂,他們只是感情好,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布拘鞋。 她就那樣靜靜地躺著砚蓬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盆色。 梳的紋絲不亂的頭發(fā)上灰蛙,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天祟剔,我揣著相機與錄音,去河邊找鬼摩梧。 笑死物延,一個胖子當著我的面吹牛,可吹牛的內容都是我干的仅父。 我是一名探鬼主播叛薯,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼笙纤!你這毒婦竟也來了耗溜?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤省容,失蹤者是張志新(化名)和其女友劉穎抖拴,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腥椒,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡城舞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了寞酿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片家夺。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖伐弹,靈堂內的尸體忽然破棺而出拉馋,到底是詐尸還是另有隱情,我是刑警寧澤惨好,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布煌茴,位于F島的核電站,受9級特大地震影響日川,放射性物質發(fā)生泄漏蔓腐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一龄句、第九天 我趴在偏房一處隱蔽的房頂上張望回论。 院中可真熱鬧,春花似錦分歇、人聲如沸傀蓉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽葬燎。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谱净,已是汗流浹背窑邦。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留壕探,地道東北人奕翔。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像浩蓉,于是被迫代替她去往敵國和親派继。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理捻艳,服務發(fā)現(xiàn)驾窟,斷路器,智...
    卡卡羅2017閱讀 134,661評論 18 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,822評論 6 342
  • 1. 前言 前面文章整合過了ssm的认轨,是相對spring的绅络,不過在現(xiàn)在微服務流行之際,為了往后面的springcl...
    你想要怎樣的未來閱讀 20,334評論 28 176
  • 我們人生氣了嘁字,可以發(fā)泄恩急,悲憤了,可以吶喊纪蜒,那環(huán)境悲憤欲絕之時衷恭,如何發(fā)泄?如何吶喊纯续?
    Ashesoftimeke閱讀 118評論 2 1
  • 一個公司管理者與員工的關系不應該是縱向的從屬關系随珠,而應該是橫向的伙伴關系。不應該靠權力和權威去形成上下級關系...
    羅劍華閱讀 136評論 2 1