MybatisPlus使用

簡介

業務場景

mybatisplus該框架目的是幫助咱們自動實現單表的CRUD;java

介紹

該框架目標是對mybatis框架只作加強不作改變-->簡化開發,提升效率程序員

特性

官網中特性以下:
imagespring

原理

原理-->以對象的方式操做數據庫sql

實現:數據庫

  1. 利用註解實現對象與表綁定 屬性與字段綁定.
  2. 定義一個公共的Mapper接口,定義公共的CRUD操做 利用泛型區分對象.
  3. 按照特定的語法,將對象轉化爲sql語句:以下例:
例子: 將user對象插入數據庫中.
    userMapper.insert(user對象);  //程序員完成的最後的代碼
    sql: insert into 表名(字段.....) values (屬性值......); 由mp動態拼接以後交由mybatis執行.

經過註解綁定,由底層生成表名(字段.....);傳入屬性值爲爲對象中的值;再由MP動態拼接以後交由mybatis執行.api

spring整合MP

1.添加jar包依賴mybatis

<!--spring整合mybatis-plus 只導入MP包,刪除mybatis包-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.2.0</version>
</dependency>

添加MP的jar包後要將mybatis的jar包刪除,MP中會包含mybatis,添加兩個可能會衝突.app

2.原理具體實現:
1)編輯pojo類須要添加註解:
@TableName("表名")--實現表與對象關聯,若是pojo類名與表名一致(不區分大小寫),能夠忽略註解參數中表名
@TableId(type = IdType.AUTO)--在主鍵屬性上添加該註解,表示此屬性爲主鍵且主鍵自增(IdType主要用auto表主鍵自增/UUID表全局惟一)框架

2)Mapper接口繼承BaseMapper<T>--注意實際應用時,泛型T的引入,寫你所用的pojo類便可,不添加的話數據庫不能完成操做測試

3)修改yml配置文件信息,將mybatis改成mybatis-plus便可,別的不須要更改,作到只加強不修改:

mybatis-plus:
  #定義別名包
  type-aliases-package: com.jt.pojo
  #添加xml文件的依賴
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #開啓駝峯映射
  configuration:
    map-underscore-to-camel-case: true

MP API使用

如下分別是CRUD的常見API使用,具體說明見官網和代碼中註解--https://baomidou.com/

package com.jt.test;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Arrays;
import java.util.List;

@SpringBootTest
public class TestMybatis {
    @Autowired
    private UserMapper userMapper;

    //本地定義的findAll方法以及sql
    @Test
    public void test01(){
        List<User> users = userMapper.findAll();
        System.out.println(users);

    }

    //測試MP方法
    @Test
    public void test02(){
        //查詢user表所有數據
        List<User> users = userMapper.selectList(null);
        System.out.println(users);

    }

    /**
     * 1.測試入庫
     *  將用戶信息   王大錘 20 男 入庫
     */
    @Test
    public void insert(){
        User user=new User();
        user.setName("王大錘").setAge(20).setSex("男");
        userMapper.insert(user);
    }

    /**
     * 2.查詢練習
     *  查詢ID爲21的用戶
     */
    @Test
    public void select01(){
        User user = userMapper.selectById(21);
        System.out.println(user);
        //查詢記錄總數
        int count = userMapper.selectCount(null);
        System.out.println(count);
    }

    /**
     * 需求:查詢性別爲女,年齡大於100歲
     * 條件構造器:動態拼接where條件的  多條件中默認的鏈接符and
     * 常見邏輯運算符
     * 1.eq =    2.gt >    3.lt <
     * 4.ge >=   5.le <=
     */
    @Test
    public void select03(){
        QueryWrapper<User> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("sex","女")
                .gt("age",100);
        List<User> users = userMapper.selectList(queryWrapper);
        System.out.println(users);
    }

    /**
     * 需求:1.查詢名字中包含'精'字的男性  "%精%"
     *     2.查詢以精結尾的  %精
     *     3.查詢以精開頭的  精%
     */
    @Test
    public void select04(){
        QueryWrapper<User> queryWrapper=new QueryWrapper<>();
        queryWrapper.likeLeft("name","精")
        //queryWrapper.like("name","精")
                .eq("sex","男");
        List<User> users = userMapper.selectList(queryWrapper);
        System.out.println(users);
    }

    /**
     * 需求:查詢sex=女 ,以後按照age倒序排列,若是年齡相同按照id排列
     */
    @Test
    public void select05(){
        QueryWrapper<User> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("sex","女")
                .orderByDesc("age","id");
        List<User> users = userMapper.selectList(queryWrapper);
        System.out.println(users);
    }

    /**
     * 需求:查詢id爲1,3,5,7,8,9的數據
     * 關鍵字  in  or
     * 在關聯查詢中慎用
     */
    @Test
    public void select06(){
        Integer[] ids = {1,3,5,7,8,9};
        List<Integer> list = Arrays.asList(ids);
        List<User> users = userMapper.selectBatchIds(list);
        System.out.println(users);
    }

    /**
     * 需求:刪除id爲53的數據
     */
    @Test
    public void delete01(){
        userMapper.deleteById(53);
    }

    /**
     * 需求:批量刪除id爲1,2,3,4的數據
     */
    @Test
    public void delete02(){
        Integer[] ids={1,2,3,4};
        List<Integer> list = Arrays.asList(ids);
        userMapper.deleteBatchIds(list);
    }

    /**
     * 需求:刪除age爲30的男性
     */
    @Test
    public void delete03(){
        QueryWrapper<User> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("age","30")
                .eq("sex","男");
        userMapper.delete(queryWrapper);
    }

    /**
     * 需求:將id爲6的性別修改成女性
     */
    @Test
    public void update01(){
        User user=new User();
        user.setId(6).setSex("女");
        userMapper.updateById(user);
    }

    /**
     * 需求:將name爲悟空的角色名字改成卡卡羅特,性別改成男
     */
    @Test
    public void update02(){
        User user = new User();
        user.setName("卡卡羅特").setSex("男");
        QueryWrapper<User> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("name","悟空");
        userMapper.update(user,queryWrapper);
    }
}
相關文章
相關標籤/搜索