中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Spring Boot中的MyBatis-Plus

發布時間:2021-11-17 13:42:57 來源:億速云 閱讀:130 作者:iii 欄目:大數據

本篇內容介紹了“怎么使用Spring Boot中的MyBatis-Plus”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1. Mybatis-Plus簡介

MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。

為什么說Mybatis-Plus是Mybatis的增強?

mybatis作為一款輕量級的持久層框架實現了比較簡單的操作數據庫的能力,但是它是一個半ORM(對象關系映射)的持久層框架,因為它需要我們在XML文件中寫SQL語句,不能完全專注于業務邏輯,即是它后來做了一些改進,有了逆向工程,有了example類,但依舊改變不了他是一個半ORM框架的事實。MyBatis-Plus作為mybatis的增強版,極大改善了mybatis的尷尬處境(其實并不尷尬,我還是非常喜歡用mybatis的)。

接下來進入正題了,Mybatis-plus框架他在Mybatis原有的基礎之上增加了一系列的簡單易用的javaAPI,非常的好用和牛逼,國人開發,必須要使勁的吹一下????。Mybatis-Plus官方有這么一句話:為簡化開發而生。這句話我覺得非常的好,的確,簡化了我們的開發,官方還有這么三句話:

  • 潤物無聲

    只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑。

  • 效率至上

    只需簡單配置,即可快速進行 CRUD 操作,從而節省大量時間。

  • 豐富功能

    熱加載、代碼生成、分頁、性能分析等功能一應俱全。

上面的這三句話其實就是Mybatis-plus的特點,他的確沒有改變mybatis的功能,只在它的基礎之上進行了一些增強,不需要example類,提供了Wrapper類,還提供了很多簡單的api操作數據庫。話不多說直接擼代碼。對于他的底層實現,我不說大家都知道,動態代理咯,具體實現大家可以自行查閱相關資料,在這個系列中只帶領大家學習和基本使用,各位大佬們如果覺得博主寫的還算不錯,給個關注唄,奧利給!

2. Mybatis-Plus的使用

2.1 引入依賴

pom.xml:

<!--springboot父工程-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <!--mybatis-plus組件-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.2</version>
        </dependency>
        <!--spring-web組件-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--mysql數據庫連接驅動-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.18</version>
        </dependency>
        <!--lombok組件-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
        </dependency>
    </dependencies>

2.2 配置文件

application.yml

butterflytri:
  databaseurl-port: 127.0.0.1:3306 # 數據庫端口
  database-name: student_db # 數據庫名
server:
  port: 8080 # 應用端口
  servlet:
    context-path: /butterflytri # 應用映射
spring:
  application:
    name: mybatis-plus # 應用名稱
  datasource:
    url: jdbc:mysql://${butterflytri.databaseurl-port}/${butterflytri.database-name}?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: root
mybatis-plus: # mybatis-plus配置
  mapper-locations: classpath:com/butterflytri/mapper/*Mapper.xml # mapper映射包掃描
  type-aliases-package: com.butterflytri.entity # entity別名

mybatis-plus只需要這么一個配置文件就可以了,不需要其他的,官方也說了,只增強mybatis不修改它,所以我只會演示plus部分,即增強優化的部分。

2.3 正式代碼部分

首先我們看下啟動類:

MybatisPlusApplication.java

package com.butterflytri;

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

/**
 * @author: WJF
 * @date: 2020/6/23
 * @description: MybatisPlusApplication
 */
@SpringBootApplication
/**
 * xmlMapper包掃描,與yml中效果相同。
 */
@MapperScan("com/butterflytri/mapper")
public class MybatisPlusApplication {

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

}

啟動類中就寫了一個Mapper的包掃描,說過的Mybatis-Plus只增強Mybatis,不改變它,所以寫Xml也是完全歐克的。

然后我們看實體類和數據庫字段的映射關系,先上代碼:

package com.butterflytri.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.io.Serializable;

/**
 * @author: WJF
 * @date: 2020/5/16
 * @description: Student
 */

@ToString
@Getter
@Setter
/**
 * '@TableName':此注解將表名和實體類映射起來,不寫則默認以實體類名為表名進行數據庫操作。
 * '@TableId':此注解將聲明的實體屬性作為數據庫表的主鍵字段,還有很多主鍵實現策咯,查看注解屬性{@link TableId#type()}。
 * '@TableField':此注解將表字段(非主鍵)和實體類屬性映射起來,不寫則默認以實體類屬性名為表字段名進行數據庫操作。
 */
@TableName("t_student")
public class Student implements Serializable {

    @TableId("ID")
    private Long id;

    @TableField("STUDENT_NAME")
    private String studentName;

    @TableField("STUDENT_NO")
    private String studentNo;

    @TableField("SEX")
    private String sex;

    @TableField("AGE")
    private Integer age;

    @TableField("CLASS")
    private String clazz;

}

實體類和表名的映射就是如此的簡單,如果實體類類名和表名一樣,字段名和屬性名一樣就不用寫這些注解。

接下來我們看下Mapper層代碼,這里繼承了BaseMapper接口,就已經獲取了基本的增刪改查方法。

package com.butterflytri.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.butterflytri.entity.Student;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * @author: WJF
 * @date: 2020/5/16
 * @description: StudentMapper
 */

/**
 * 此處'StudentMapper'繼承了'BaseMapper<T>'接口,就擁有了mybatis-plus提供的公共基礎的CRUD方法。
 */
@Mapper
public interface StudentMapper extends BaseMapper<Student> {

    /**
     * 查詢所有學生信息
     * @return List<Student>
     */
    List<Student> findAll();

    /**
     * 通過id查詢學生信息
     * @param id:學生id
     * @return Student
     */
    Student findOne(Long id);

    /**
     * 通過學號查詢學生信息
     * @param studentNo:學生學號
     * @return Student
     */
    Student findByStudentNo(String studentNo);


}

接下來我們看看service層代碼:

StudentService

package com.butterflytri.service;

import com.butterflytri.entity.Student;

import java.util.List;

/**
 * @author: WJF
 * @date: 2020/6/23
 * @description: StudentService
 */

public interface StudentService {

    /**
     * 通過id查詢某個學生的信息(BaseMapper<T>中的方法)
     * @param id: 學生id
     * @return Student
     */
    public Student selectById(Long id);

    /**
     * 通過id查詢某個學生的信息(通過xmlMapper實現)
     * @param id: 學生id
     * @return Student
     */
    public Student findById(Long id);

    /**
     * 保存一個學生對象(BaseMapper<T>中的方法)
     * @param student
     */
    public void insert(Student student);

    /**
     * 查詢性別為sex,年齡大于age的學生(普通的Wrapper)
     * @param sex: 性別
     * @param age: 年齡
     * @return 學生list
     */
    public List<Student> findByWrapper(String sex, Integer age);

    /**
     * 查詢性別為sex,年齡大于age的學生(Lambda形式的Wrapper)
     * @param sex: 性別
     * @param age: 年齡
     * @return 學生list
     */
    public List<Student> findByWrapperLambda(String sex, Integer age);

    /**
     * 更新學生信息(Wrapper形式)
     * @param student: 需要更新的學生實體
     */
    public void updateByWrapper(Student student);

    /**
     * 更新學生信息(BaseMapper<T>中的方法)
     * @param student: 需要更新的學生實體
     */
    public void updateById(Student student);

    /**
     * 更新學生信息(Lambda形式的Wrapper)
     * @param student: 需要更新的學生實體
     */
    public void updateByWrapperLambda(Student student);
}

StudentServiceImpl

package com.butterflytri.service.impl;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.butterflytri.entity.Student;
import com.butterflytri.mapper.StudentMapper;
import com.butterflytri.service.StudentService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author: WJF
 * @date: 2020/6/23
 * @description: StudentServiceImpl
 */
@Service
public class StudentServiceImpl implements StudentService {

    @Resource
    private StudentMapper studentMapper;

    @Override
    public Student selectById(Long id) {
        return studentMapper.selectById(id);
    }

    @Override
    public Student findById(Long id) {
        return studentMapper.findOne(id);
    }

    @Override
    public void insert(Student student) {
        studentMapper.insert(student);
    }

    @Override
    public List<Student> findByWrapper(String sex, Integer age) {
        QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("SEX", sex);
        queryWrapper.gt("AGE", age);
        return studentMapper.selectList(queryWrapper);
    }

    @Override
    public List<Student> findByWrapperLambda(String sex, Integer age) {
        LambdaQueryWrapper<Student> queryWrapper = Wrappers.<Student>lambdaQuery().eq(Student::getSex, sex).gt(Student::getAge, age);
        return studentMapper.selectList(queryWrapper);
    }

    @Override
    public void updateByWrapper(Student student) {
        UpdateWrapper<Student> updateWrapper = new UpdateWrapper<>();
        updateWrapper.set("ID", student.getId());
        studentMapper.update(student, updateWrapper);
    }

    @Override
    public void updateById(Student student) {
        studentMapper.updateById(student);
    }

    @Override
    public void updateByWrapperLambda(Student student) {
        LambdaUpdateWrapper<Student> updateWrapper = Wrappers.<Student>lambdaUpdate().set(Student::getId, student.getId());
        studentMapper.update(student, updateWrapper);
    }
}

service層的方法都很簡單,有通過剛剛繼承的BaseMapper中的方法,但是我們還看到了一個類叫Wrapper,這個類是條件構造器,可以通過這個類實現比較復雜的查詢,有直接通過字段名稱去查詢的,也有通過屬性和字段名映射的lambda方式去查詢數據庫,總之就是很簡單,也很好理解這些API,但是請記住,Wrapper很重,不是一個輕量級的東西,不要將這個對象在服務間進行傳遞,效率很低。請將條件放在DTO中傳遞到service層代碼中,在service代碼中創建Wrapper類進行查詢。

“怎么使用Spring Boot中的MyBatis-Plus”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

响水县| 纳雍县| 木里| 兰西县| 日照市| 南和县| 海淀区| 平武县| 宿州市| 乌鲁木齐县| 乐安县| 罗城| 汝阳县| 南开区| 胶南市| 定西市| 利津县| 连平县| 左贡县| 西贡区| 汉中市| 股票| 甘孜县| 绥德县| 盐津县| 确山县| 上犹县| 桦南县| 富锦市| 合肥市| 吉林省| 会泽县| 安丘市| 依兰县| 高陵县| 西乌珠穆沁旗| 临安市| 沾益县| 永春县| 贡觉县| 顺平县|