小書MybatisPlus第1篇-整合SpringBoot快速開始增刪改查

Mybatis Plus官方文檔已經很完善了,爲何還要寫一個這樣的文檔?

  • 官方文檔注重知識結構的整理,沒有注重學習者的學習順序
  • 官方文檔中的案例注重API描述,比較適合學會mybatis plus以後,遇到問題再去翻閱。對於第一次使用Mybatis的初學者進行學習不是很是友好。
  • 官方文檔考慮的是全面完整的介紹Mybatis Plus, 我考慮的角度是:「最佳實踐」。
  • 世界上不少東西都符合2/8原則,本文檔的目的是將:最重要最經常使用的那20%幫你提煉出來、快速上手應用!。另外的那80%都是不經常使用的,有空本身再去官方文檔裏面學吧!

官網文檔地址:https://mybatis.plus/guide/vue

我會將此文檔寫成一個系列的內容,記得關注我!zimug.com
我會將此文檔寫成一個系列的內容,記得關注我!zimug.com
我會將此文檔寫成一個系列的內容,記得關注我!zimug.comjava

1、Spring Boot整合Mybatis Plus

經過maven座標引入依賴mysql

<!-- mybatis -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.1.2</version>
</dependency>
<!-- mysql -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <scope>runtime</scope>
</dependency>
<!-- lombok -->
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <optional>true</optional>
</dependency>

application配置數據源及日誌輸出級別算法

# 配置數據源
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mp?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: test
    password: <填上數據庫訪問密碼>

# 配置日誌
logging:
  level:
    root: warn
    com.zimug.boot.launch.mapper: trace

第三步:配置Mybatis的Mapper類文件的包掃描路徑spring

@SpringBootApplication
@MapperScan(basePackages = {"com.zimug.boot.launch.mapper"})
public class BootLaunchApplication {
    public static void main(String[] args) {
        SpringApplication.run(BootLaunchApplication.class, args);
    }
}

2、編碼構建實體和Mapper

編寫實體類User.java,對應的數據庫表建立SQL在文末。sql

@Data   //lombok註解
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

編寫Mapper類UserMapper.java數據庫

public interface UserMapper extends BaseMapper<User> {

}

3、CRUD基礎使用案例

3.1.增長一條記錄

User user = new User();
user.setName("字母哥");
user.setAge(18);

int row = userMapper.insert(user);

System.out.println("影響記錄數:"+row);
System.out.println("雪花算法id: "+user.getId());

寫了上面的java代碼,MP將會自動的根據java代碼構造下面的SQL去數據庫執行。注意:主鍵默認採用雪花算法後端

# 主鍵自動填充了雪花算法
INSERT INTO user ( id, name, age) 
VALUES ( ?, ?, ? )

3.2.根據主鍵刪除一條記錄

int rows = userMapper.deleteById(1170243901535006722L);
System.out.println("影響記錄數:" + rows);

1170243901535006722L是數據插入的時候根據雪花算法生成的idspringboot

DELETE FROM user 
WHERE id=?

3.3.根據條件刪除記錄

//構造條件
Map<String,Object> map = new HashMap<>();
map.put("name","字母哥");
map.put("age",18);
//執行刪除
int rows = userMapper.deleteByMap(map);
System.out.println("影響記錄數:" + rows);
DELETE FROM user 
WHERE name = ? 
AND age = ?

3.4.根據主鍵查詢一條數據

User user = userMapper.selectById(1089911557332887553L);
System.out.println(user);
SELECT id,name,age,email
FROM user 
WHERE id=?

3.5.根據ids批量查找數據

List<Long> ids = Arrays.asList(
    1087982257332887553L,
    1094590409767661570L,
    1094592041087729666L
);
List<User> list = userMapper.selectBatchIds(ids);
list.forEach(System.out::println);
SELECT id,name,age,email
FROM user 
WHERE id IN ( ? , ? , ? )

3.6.根據指定參數查詢

Map<String, Object> map = new HashMap<>();
//map的key指代的是mysql表中的列名,並不是java實體的屬性名
map.put("name", "Jone");

List<User> list = userMapper.selectByMap(map);
list.forEach(System.out::println);
SELECT id,name,age,email
FROM user 
WHERE name = ?

3.7.指定查詢結果字段

1.mybatis

QueryWrapper<User> query = new QueryWrapper<>();
query.select("name", "age")   //指定查詢結果字段
  .in("age", Arrays.asList(30, 31, 34, 35))
  .last("limit 1");
List<User> list = userMapper.selectList(query);
list.forEach(System.out::println);
SELECT name,age 
FROM user 
WHERE age IN (?,?,?,?)
LIMIT 1

2.

QueryWrapper<User> query = new QueryWrapper<>();
query.like("name", "J%")    //like是MP的條件構造器,表示"模糊查詢"
  .lt("age", 40)     //lt是MP的條件構造器,表示"小於"關係
  .select("name", "age");
List<Map<String, Object>> maps = userMapper.selectMaps(query);
maps.forEach(System.out::println);
SELECT name,age 
FROM user 
WHERE name LIKE ? 
AND age < ?

3.8.經過主鍵id修改數據

User user = new User();
user.setId(1088248199570832385L);
user.setAge(18);
user.setEmail("hadoopcn2@163.com");

int rows = userMapper.updateById(user);
System.out.println("影響記錄數:" + rows);
UPDATE user 
SET age=?, email=? 
WHERE id=?

3.9.根據UpdateWrapper自定義條件修改數據

UpdateWrapper<User> update = new UpdateWrapper<>();
update.eq("name", "Jack").eq("age", 28);    //eq是MP的條件構造器,表示"等於"關係

User user = new User();
user.setAge(29);
user.setEmail("hadoopcn2@163.com");
int rows = userMapper.update(user, update);
System.out.println("影響記錄數:" + rows);
UPDATE user 
SET age=?, email=? 
WHERE name = ? 
AND age = ?

附錄---測試SQL:

DROP TABLE IF EXISTS user;

CREATE TABLE user
(
    id BIGINT(20) NOT NULL COMMENT '主鍵ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年齡',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '郵箱',
    PRIMARY KEY (id)
);

其對應的數據庫 Data 腳本以下:

DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

歡迎關注個人博客,裏面有不少精品合集

  • 本文轉載註明出處(必須帶鏈接,不能只轉文字):字母哥博客

以爲對您有幫助的話,幫我點贊、分享!您的支持是我不竭的創做動力! 。另外,筆者最近一段時間輸出了以下的精品內容,期待您的關注。

相關文章
相關標籤/搜索