MyBatis-Plus學習筆記(1):環境搭建以及基本的CRUD操作

来源:https://www.cnblogs.com/seve/archive/2020/01/31/12246815.html
-Advertisement-
Play Games

MyBatis Plus是一個 MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變,使用MyBatis Plus時,不會影響原來Mybatis方式的使用。 SpringBoot+MyBatis Plus環境搭建 SQL腳本: CREATE TABLE ( int(11) NOT ...


MyBatis-Plus是一個 MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變,使用MyBatis-Plus時,不會影響原來Mybatis方式的使用。

SpringBoot+MyBatis-Plus環境搭建

SQL腳本:

CREATE TABLE `tb_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `real_name` varchar(20) DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO tb_user (real_name,email,phone) VALUES ('小花','[email protected]','18711111111');
INSERT INTO tb_user (real_name,email,phone) VALUES ('小菊','[email protected]','18322222222');
INSERT INTO tb_user (real_name,email,phone) VALUES ('小熊','[email protected]','18133333333');
INSERT INTO tb_user (real_name,email,phone) VALUES ('小虎','[email protected]','18344444444');
INSERT INTO tb_user (real_name,email,phone) VALUES ('小豬','[email protected]','18723232323');

添加依賴如下(不需要額外添加Mybatis的依賴):

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1.tmp</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
</dependencies>

application.yml:

spring:
  datasource:
    url: jdbc:mysql://localhost/plusdb?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

#在控制台列印SQL語句,com.cf.mpdm.mapper為存放mapper介面的包名
logging:
  level:
    com.cf.mpdm.mapper: debug

主程式類:

package com.cf.mpdm;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//指定掃描mapper介面的包路徑
@MapperScan("com.cf.mpdm.mapper")
@SpringBootApplication
public class MpdmApplication {

    public static void main(String[] args) {
        SpringApplication.run(MpdmApplication.class, args);
    }

}

UserMapper介面:

package com.cf.mpdm.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cf.mpdm.entity.User;

public interface UserMapper extends BaseMapper<User> {
}

UserMapper介面需要繼承BaseMapper介面,並且指定泛型為表對應的實體類。

實體類User:

package com.cf.mpdm.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

//表名tb_user帶tb_首碼,和實體類類名User不匹配,所以需要使用@TableName指定表名
@TableName("tb_user")
public class User {

    //指定主鍵生成策略為自動增長
    @TableId(type = IdType.AUTO)
    private Integer id;

    private String realName;

    private String email;

    private String phone;

   //get/set ...
}

MyBatis-Plus預設使用下劃線命名到駝峰命名的映射規則來處理表和實體類類名以及表的列名和實體類欄位的映射。當預設規則不適用時,則需要通過額外的配置來處理映射,如可以使用註解@TableName來指定表名,使用@TableId和@TableField來指定主鍵列和非主鍵列的列名。

@TableId還可以指定主鍵的生成策略,預設生成策略為NONE,表示無狀態,未設置主鍵類型。其他策略詳見IdType

當多數表具有相同的首碼或者相同的主鍵生成策略時,可以使用全局配置指定表首碼和主鍵策略,而無需一個個手動添加註解,當然少數特殊的還是可以通過註解的方式來指定,application.yml:

mybatis-plus:
  global-config:
    db-config:
      # 指定主鍵生成策略為自動增長
      idType: AUTO
      # 指定表首碼
      tablePrefix: tb_

基本的CRUD操作

package com.cf.mpdm;

import com.cf.mpdm.entity.User;
import com.cf.mpdm.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@SpringBootTest
class MpdmApplicationTests {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void testInsert(){
        //INSERT INTO tb_user ( real_name, email, phone ) VALUES ( ?, ?, ? )
        User user = new User();
        user.setRealName("小蘭");
        user.setEmail("[email protected]");
        user.setPhone("18700000000");
        userMapper.insert(user);

            //插入成功時,預設會將主鍵的值回寫到實體類中去
        System.out.println(user.getId());
    }

    @Test
    public void testDelete(){
        //根據主鍵ID刪除記錄
        //DELETE FROM tb_user WHERE id=?
        userMapper.deleteById(6);

        //根據id列表批量刪除記錄
        //DELETE FROM tb_user WHERE id IN ( ? , ? )
        /*List<Integer> idList = new ArrayList<>();
        idList.add(12);
        idList.add(13);
        userMapper.deleteBatchIds(idList);*/

        //根據條件來刪除記錄,如根據real_name來刪除記錄,columnMap的Key必須為表中的欄位名,而不是實體類中的欄位名。
        //DELETE FROM tb_user WHERE real_name = ?
        /*Map<String, Object> columnMap = new HashMap<>();
        columnMap.put("real_name", "小花");
        userMapper.deleteByMap(columnMap);*/
    }

    @Test
    public void testUpdate(){
        //根據主鍵id更新記錄
        //UPDATE tb_user SET real_name=? WHERE id=?
        User user = new User();
        user.setId(2);
        user.setRealName("歐皓辰");
        userMapper.updateById(user);
    }

    @Test
    public void testSelect(){
        //根據主鍵id查詢記錄
        //SELECT id,real_name,email,phone FROM tb_user WHERE id=?
        /*User user = userMapper.selectById(3);
        System.out.println(user.getRealName());*/

        //根據id列表查詢對應記錄
        //SELECT id,real_name,email,phone FROM tb_user WHERE id IN ( ? , ? )
        /*List<Integer> idList = new ArrayList<>();
        idList.add(3);
        idList.add(4);
        List<User> userList = userMapper.selectBatchIds(idList);
        System.out.println(userList.size());*/

        //根據條件來查詢對應記錄
        //SELECT id,real_name,email,phone FROM tb_user WHERE real_name = ?
        Map<String, Object> columnMap = new HashMap<>();
        columnMap.put("real_name", "小蘭");
        List<User> userList = userMapper.selectByMap(columnMap);
        System.out.println(userList.size());
    }
}

關於使用mapper.xml的一些配置

mybatis-plus:
  #指定Mapper所對應的XML文件位置
  mapperLocations: classpath:mapper/*.xml
  #指定別名包掃描路徑,通過該屬性可以給包中的類註冊別名,註冊後在 Mapper 對應的 XML 文件中可以直接使用類名,而不用使用全限定的類名
  typeAliasesPackage: com.cf.mpdm.entity

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • font-family屬性值:具體字體名或者字體集 如果是中文或者有單詞之間有空格,需要加雙引號 字體集: Serif (有裝飾線) Sans-serif (無裝飾線) Monospace Cursive Fantasy <!DOCTYPE html> <html lang="en"> <head> ...
  • 選擇器權值: 標簽選擇器:1 類選擇器和偽類選擇器:10 ID選擇器:100 通配符選擇器:0 行內樣式:1000 !important 在一定條件下,優先順序最高 常用的css樣式命名 頁面結構頁頭:header頁面主體:main頁尾:footer內容:content/container容器: co ...
  • function a(){} 和 var a = function(){}的區別: 學習做浮窗,看到別人的代碼里有: window.onresize = function(){ chroX = document.documentElement.clientWidth;//yemian整個的高寬 ch ...
  • 本章介紹UML建模元素 1:Stereotype-也被稱為類型、構造型 UML里的元素擴展,簡單來說其功能就是在已有的類型上添加一些標記,類似於打個戳,從而生成新的東西。 簡單的說加一句話來更加清楚準確描述這個類。 2:Actor(主角、參與者)-是在系統之外與系統交互的某人或某事物,在建模過程中處 ...
  • 萬變不離其宗,不管是Java還是C++,凡是面向對象的編程語言,在設計上,儘管表現形式可能有所不同,但是其實質和所需遵守的原則都是一致的。本文便是帶領讀者去深入理解設計模式中的六大原則,以期幫助讀者做出更好的設計。 ...
  • 分支管理 軟體的版本控制以及分支管理貫穿於整個軟體產品的生命周期,日常的項目管理對於開發團隊能否有節奏且順利的交付軟體也很重要。本分支管理和版本控制規範主要分為3個部分,即分支管理規範、版本號規範、需求與代碼關聯。其中,將闡述不同的分支管理模型,以及它們的優缺點和使用的場景;描述版本號控制方式——語 ...
  • 第一次用maven創建項目的時候,因為本地倉庫中沒有jar包,需要從中央倉庫下載,所以會比較慢,因為從中央倉庫下載預設使用的國外的鏡像下載,速度比較慢,我們可以把鏡像修改為從阿裡雲下載,這樣比較快,方法,打開maven在本地的位置,找到conf文件夾下的setting,xml打開,在mirrors標... ...
  • 學完maven後,可以創建maven的javaweb工程,在創建完成後還需要一些配置,下麵來說下具體步驟,在這裡我創建的是一個模塊,創建web項目的方式和創建模塊一樣 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...