天天看點

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

作者:龍城星夜雨

第一節 ORM介紹

第二節 MyBatis-Plus介紹

第三節 MyBatis-Plus增删改查操作

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)
SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)
SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

在實際操作中,程式的一些java對象想把它存儲到關系型資料庫的表中,或者想把在資料庫中查詢到的資料,變成程式中的java對象,這個過程我們稱為映射的過程。

ORM就是幫我們把對象和資料庫中的記錄完成映射。這個映射既包含了存儲又包含了讀取,是一種持久化的技術。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)
SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

下面操作是基于MySQL來完成。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

在pom.xml中

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)
SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

首先要告訴MyBatis用什麼連接配接池、需要操作什麼類型資料庫,資料庫位置在哪裡,資料庫賬号及密碼、制定日志輸出格式等資訊。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

加@MapperScan注解,告訴程式存放資料庫操作的mapper包在哪裡

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)
SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

項目具體示範過程:首先講Mybatis 的操作,之後再講Plus的操作。

(本機已安裝mysql資料庫,不在此詳細講)

在IDEA中建立一個新的項目mpdemo,SDK為1.8.0;java版本為1.8。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

在Web下勾選Spring Web

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

完成項目建立後,設定Maven及熱啟動(詳細設定參考前面内容)

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

在項目中pom.xml中的添加依賴,記得點右上角的更新按鈕

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)
<!-- MyBatisplus依賴 -->
<dependency>
 <groupId>com.baomidou</groupId>
 <artifactId>mybatis-plus-boot-starter</artifactId>
 <version>3.4.2</version>
</dependency>
<!-- mysql驅動依賴 -->
<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.47</version>
</dependency>
<!-- 資料連接配接池druid -->
<dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>druid-spring-boot-starter</artifactId>
 <version>1.1.20</version>
</dependency>           

注意:版本号根據本機實際情況,如果輸入了上面的代碼,在IDEA中可能會有感歎号。輕按兩下感歎号,就可以得到最新的版本提示,按提示修改版本号,最後記得點右上角的更新按鈕

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

添加全局配置

下面進行基本配置,打開application.properties 檔案,輸入如下代碼:

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl           

注意:本機已在mysql資料庫中建了一個mydb資料庫,并建了一個user表。這裡的資料庫使用者名和密碼根據實際設定。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

下面需要加一個@MapperScan注解,用于映射資料庫。

先在com.example.mpdemo包下建立一個名為mapper的包,以後資料庫相關操作就放在mapper這個包下

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

将@MapperScan注解放到程式啟動類中。

這裡需要全包名,最好不要手動寫。在mapper包中右鍵,點copypath,選最後一項Copy Reference,然後直接将路徑粘貼到注解中。

告訴程式,mapper包所在的位置。這樣基本的配置就做完了。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)
SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

在com.example.mpdemo包下建立一個名為controller的控制器包

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

在包下建控制器 UserController類,代碼如下

package com.example.mpdemo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
 @GetMapping("/user")
 public String query(){
 return "查詢使用者";
 }
}           

使用者通路 query方法,肯定需要去找mapper通路資料庫。下面就需要定義mapper下相關元件,建立UserMapper(一般是以資料庫名+Mapper組合)接口。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

接口中定義一個查詢的方法,作為查詢方法來說,查詢的結果應該是多使用者的就是集合,這裡可以用List<E>,這個E泛型應該是一個對象。是以可以先定義一個實體類(entity),在entity包下建一個User類,将user資料庫中的字段加入,然後按ALT + Insert 快捷鍵,添加Getter 和 Setter 方法,為友善檢視還可以加toString方法。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

代碼如下:

package com.example.mpdemo.entity;
public class User {
 private int id;
 private String username;
 private String password;
 private String birthday;

 public int getId() {
 return id;
 }

 public void setId(int id) {
 this.id = id;
 }

 public String getUsername() {
 return username;
 }

 public void setUsername(String username) {
 this.username = username;
 }

 public String getPassword() {
 return password;
 }

 public void setPassword(String password) {
 this.password = password;
 }

 public String getBirthday() {
 return birthday;
 }

 public void setBirthday(String birthday) {
 this.birthday = birthday;
 }

 @Override
 public String toString() {
 return "User{" +
 "id=" + id +
 ", username='" + username + '\'' +
 ", password='" + password + '\'' +
 ", birthday='" + birthday + '\'' +
 '}';
 }
}           

回到UserMapper類,繼續編寫代碼。

package com.example.mpdemo.mapper;

import com.example.mpdemo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;
@Mapper
public interface UserMapper {
 // 查詢所有使用者
 @Select("select * from user")
 public List<User> find();
}           

下面是解釋:

select * from user 這句SQL語句會自動去找配置檔案裡的資料庫,這裡是mydb,查詢出所有使用者,并将所有查詢出的資料封裝成一個個的對象放到List中去。

@Mapper 告訴程式,這裡是一個Mapper主鍵。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

啟動類中@MapperScan注解中,已經寫了要掃描mapper包。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

這樣就會從mapper包中找到UserMapper。這樣方法就生效了。

回到程式,繼續。

要使用Mapper,隻需要在UserController控制器中聲明一下。

@Autowired
private UserMapper userMapper;           

@Autowired注解非常關鍵,它是Spring的功能,意思就是要去注入userMapper。會自動将這裡的Mapper執行個體出來的對象,在控制器中自動注入,這樣userMapper就有值了。如果沒有加@Autowired注解,那麼userMapper的值為空。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

然後用userMapper去調用方法就可以了。完整代碼如下:

package com.example.mpdemo.controller;

import com.example.mpdemo.entity.User;
import com.example.mpdemo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController {
 @Autowired
 private UserMapper userMapper;

 @GetMapping("/user")
 public String query(){
 List<User> list= userMapper.find();
 System.out.println(list);
 return "查詢使用者";
 }
}           

其實就是一個接口,一個注入。運作程式。在浏覽器中輸入http://localhost:8080/user

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

可以看到 “查詢使用者”。在IDEA中可以看到列印出來的資料庫資訊。這和資料庫中的資訊是一緻的。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)
SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

查詢出來的結果一般是要轉換為json來供前端使用,前後端分離的項目都是通過json來完成,這裡隻需要将UserController中的将傳回值從String 改為List 就 可以了,我們傳回的對象會自動轉為json。代碼如下

package com.example.mpdemo.controller;

import com.example.mpdemo.entity.User;
import com.example.mpdemo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController {
 @Autowired
 private UserMapper userMapper;

 @GetMapping("/user")
 public List query(){
 List<User> list= userMapper.find();
 System.out.println(list);
 return list;
 }
}           

再次運作程式,浏覽器再次輸入,就可以得到json字元串。一個簡單的使用者查詢接口就完成了。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

例如:插入資料

在UserMapper接口中加入如下代碼:

@Insert("insert into user values (#{id},#{username},#{password},#{birthday})")
public int insert(User user);           

在UserController控制器中插入如下代碼:

@PostMapping("/user")
public String save(User user){
 int i =userMapper.insert(user);
 if (i >0){
 return "插入成功";
 }else {
 return "插入失敗";
 }
}           

用ApiPost測試,可以看到插入成功。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)
SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

其餘增删改都是類似。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)
SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

下面講MybatisPlus 的操作

MybatisPlus進行了簡化,下列方法都可以沒有,就讓UserMapper繼承BaseMapper,傳入一個User類,MybatisPlus會自動根據傳入的類去找到資料庫的user表,然後幫你去做增删改查。前提是類的名字和資料庫中表的名字一緻。改進後UserMapper接口代碼如下:(Mapper隻剩下一段接口代碼)

package com.example.mpdemo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper <User>{
}           

UserController控制器也需要進行修改。find方法已删除,要使用自帶方法selectList(null),這裡需要查詢填查詢條件,如果查詢全部資料沒有條件,就填null。insert方法還可以繼續用。其餘BaseMapper方法可以按住Ctrl 鍵點選UserMapper接口的BaseMapper進行檢視。

package com.example.mpdemo.controller;

import com.example.mpdemo.entity.User;
import com.example.mpdemo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController {
 @Autowired
 private UserMapper userMapper;

 @GetMapping("/user")
 public List query(){
 List<User> list= userMapper.selectList(null);
 System.out.println(list);
 return list;
 }

 @PostMapping("/user")
 public String save(User user){
 int i =userMapper.insert(user);
 if (i >0){
 return "插入成功";
 }else {
 return "插入失敗";
 }
 }
}           

再次啟動系統,在浏覽器中輸入: http://localhost:8080/user,可以查詢出資料庫中資料。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

用ApiPost測試,插入成功。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

資料庫更新成功,新增了一條新資料。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

Mybatisplus 官網位址:https://baomidou.com/ 上面提供了許多注解。例如:如果出現User的類名和資料庫的名不一緻,可以用@TableName注解,這樣就能指向具體的資料庫。格式如下:

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

這裡的資料庫名為sys_user,程式中類名為User,不一緻。用@TableName注解即可。

@TableId主鍵注解;使用位置:實體類主鍵字段。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

在主鍵上标注注解,還需注明id為自增的。

@TableField字段注解(非主鍵)。如果資料庫表裡的字段名稱和類中的屬性名稱不一緻,用該注解。例如下圖:資料表裡字段名為nickname,系統類中屬性名為name不一緻。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)

具體細節請認真觀看官方注解的文檔。

SpringBoot + Vue (六)MybatisPlus架構快速上手(操作資料庫)