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

溫馨提示×

溫馨提示×

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

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

SpringBoot整合Mybatis-plus怎么使用

發布時間:2022-04-19 13:37:07 來源:億速云 閱讀:170 作者:iii 欄目:開發技術

今天小編給大家分享一下SpringBoot整合Mybatis-plus怎么使用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

一、mybatis-plus簡介:

Mybatis-Plus(簡稱MP)是一個 Mybatis 的增強工具,在 Mybatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。這是官方給的定義,關于mybatis-plus的更多介紹及特性,可以參考mybatis-plus官網。那么它是怎么增強的呢?其實就是它已經封裝好了一些crud方法,我們不需要再寫xml了,直接調用這些方法就行,就類似于JPA。并且3.X系列支持lambda語法,讓我在寫條件構造的時候少了很多的"魔法值",從代碼結構上更簡潔了.

二、springboot整合mybatis-plus案例

pom.xml配置

<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <!--springboot程序測試依賴,如果是自動創建項目默認添加-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.16.10</version>
      <scope>provided</scope>
    </dependency>
    <!-- 包含spirng Mvc ,tomcat的包包含requestMapping restController 等注解 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid-spring-boot-starter</artifactId>
      <version>1.1.10</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <!-- druid依賴 -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.0</version>
    </dependency>
    <!-- mybatisPlus 核心庫 -->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.1.0</version>
    </dependency>
  </dependencies>

application.yml配置

server:
  port: 10100   #  配置啟動端口號
 
mybatis:
  config-location: classpath:mybatis.cfg.xml    #  mybatis主配置文件所在路徑
  type-aliases-package: com.demo.drools.entity  #  定義所有操作類的別名所在包
  mapper-locations:                                     #  所有的mapper映射文件
    - classpath:mapper/*.xml
 
 
spring: #springboot的配置
  datasource: #定義數據源
    #127.0.0.1為本機測試的ip,3306是mysql的端口號。serverTimezone是定義時區,照抄就好,mysql高版本需要定義這些東西
    #useSSL也是某些高版本mysql需要問有沒有用SSL連接
    url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&useSSL=FALSE
    username: root  #數據庫用戶名,root為管理員
    password: 123456 #該數據庫用戶的密碼
    # 使用druid數據源
    type: com.alibaba.druid.pool.DruidDataSource
 
# mybatis-plus相關配置
mybatis-plus:
  # xml掃描,多個目錄用逗號或者分號分隔(告訴 Mapper 所對應的 XML 文件位置)
  mapper-locations: classpath:mapper/*.xml
  # 以下配置均有默認值,可以不設置
  global-config:
    db-config:
      #主鍵類型 AUTO:"數據庫ID自增" INPUT:"用戶輸入ID",ID_WORKER:"全局唯一ID (數字類型唯一ID)", UUID:"全局唯一ID UUID";
      id-type: auto
      #字段策略 IGNORED:"忽略判斷"  NOT_NULL:"非 NULL 判斷")  NOT_EMPTY:"非空判斷"
      field-strategy: NOT_EMPTY
      #數據庫類型
      db-type: MYSQL
  configuration:
    # 是否開啟自動駝峰命名規則映射:從數據庫列名到Java屬性駝峰命名的類似映射
    map-underscore-to-camel-case: true
    # 如果查詢結果中包含空值的列,則 MyBatis 在映射的時候,不會映射這個字段
    call-setters-on-nulls: true
    # 這個配置會將執行的sql打印出來,在開發或測試的時候可以用
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

用戶信息實體

 package com.demo.drools.entity;
 
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
 
/**
 * TODO your comment
 *
 * @author Yujiaqi
 * @date 2020/12/2 19:14
 */
@Data
@TableName("user_info")//@TableName中的值對應著表名
public class UserInfoEntity {
    /**
     * 主鍵
     * @TableId中可以決定主鍵的類型,不寫會采取默認值,默認值可以在yml中配置
     * AUTO: 數據庫ID自增
     * INPUT: 用戶輸入ID
     * ID_WORKER: 全局唯一ID,Long類型的主鍵
     * ID_WORKER_STR: 字符串全局唯一ID
     * UUID: 全局唯一ID,UUID類型的主鍵
     * NONE: 該類型為未設置主鍵類型
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * 姓名
     */
    private String name;
    /**
     * 年齡
     */
    private Integer age;
    /**
     * 技能
     */
    private String skill;
    /**
     * 評價
     */
    private String evaluate;
    /**
     * 分數
     */
    private Long fraction;
}

config類

package com.demo.drools.config;
 
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import org.springframework.context.annotation.Bean;
 
/**
 * TODO your comment
 *
 * @author Yujiaqi
 * @date 2020/12/2 19:14
 */
public class MybatisPlusConfig {
    /**
     * mybatis-plus SQL執行效率插件【生產環境可以關閉】
     */
    @Bean
    public PerformanceInterceptor performanceInterceptor() {
        return new PerformanceInterceptor();
    }
    /**
     * 分頁插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

spring boot啟動類

package com.demo.drools;
 
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
/**
 * @author 于嘉琪
 */
@SpringBootApplication
//@MapperScan和dao層添加@Mapper注解意思一樣
@MapperScan(basePackages = "com.demo.drools.dao")
public class DroolsApplication {
    public static void main(String[] args) {
        SpringApplication.run(DroolsApplication.class, args);
    }
}

dao層

package com.demo.drools.dao;
 
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.demo.drools.entity.UserInfoEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
 
/**
 * 用戶信息DAO
 *
 * @author Yujiaqi
 * @date 2020/12/2 19:16
 */
@Mapper
public interface UserInfoDao extends BaseMapper<UserInfoEntity> {
   
}

service層

package com.demo.drools.service;
 
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.demo.drools.entity.UserInfoEntity;
 
/**
 * TODO your comment
 *
 * @author Yujiaqi
 * @date 2020/12/2 19:17
 */
public interface UserInfoService extends IService<UserInfoEntity> {
    
}

serviceImpl實現類層

package com.demo.drools.service.impl;
 
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.demo.drools.dao.UserInfoDao;
import com.demo.drools.entity.UserInfoEntity;
import com.demo.drools.service.UserInfoService;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
 
/**
 * TODO your comment
 *
 * @author Yujiaqi
 * @date 2020/12/2 19:18
 */
@Service
public class UserInfoSerivceImpl extends ServiceImpl<UserInfoDao, UserInfoEntity> implements UserInfoService {
    
}

controller控制層

package com.demo.drools.controller;
 
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.demo.drools.entity.UserInfoEntity;
import com.demo.drools.service.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * TODO your comment
 *
 * @author Yujiaqi
 * @date 2020/12/2 19:20
 */
@RestController
@RequestMapping("/userInfo")
public class UserInfoController {
    @Autowired
    private UserInfoService userInfoService;
    
    /**
     * 根據ID獲取用戶信息
     * @Author Sans
     * @CreateTime 2019/6/8 16:34
     * @Param  userId  用戶ID
     * @Return UserInfoEntity 用戶實體
     */
    @RequestMapping("/getInfo")
    public UserInfoEntity getInfo(String userId){
        UserInfoEntity userInfoEntity = userInfoService.getById(userId);
        return userInfoEntity;
    }
    /**
     * 查詢全部信息
     * @Author Sans
     * @CreateTime 2019/6/8 16:35
     * @Param  userId  用戶ID
     * @Return List<UserInfoEntity> 用戶實體集合
     */
    @RequestMapping("/getList")
    public List<UserInfoEntity> getList(){
        List<UserInfoEntity> userInfoEntityList = userInfoService.list();
        return userInfoEntityList;
    }
    /**
     * 分頁查詢全部數據
     * @Author Sans
     * @CreateTime 2019/6/8 16:37
     * @Return IPage<UserInfoEntity> 分頁數據
     */
    @RequestMapping("/getInfoListPage")
    public IPage<UserInfoEntity> getInfoListPage(){
        //需要在Config配置類中配置分頁插件
        IPage<UserInfoEntity> page = new Page<>();
        page.setCurrent(5); //當前頁
        page.setSize(1);    //每頁條數
        page = userInfoService.page(page);
        return page;
    }
    /**
     * 根據指定字段查詢用戶信息集合
     * @Author Sans
     * @CreateTime 2019/6/8 16:39
     * @Return Collection<UserInfoEntity> 用戶實體集合
     */
    @RequestMapping("/getListMap")
    public Collection<UserInfoEntity> getListMap(){
        Map<String,Object> map = new HashMap<>();
        //kay是字段名 value是字段值
        map.put("age",20);
        Collection<UserInfoEntity> userInfoEntityList = userInfoService.listByMap(map);
        return userInfoEntityList;
    }
    /**
     * 新增用戶信息
     * @Author Sans
     * @CreateTime 2019/6/8 16:40
     */
    @RequestMapping("/saveInfo")
    public void saveInfo(){
        UserInfoEntity userInfoEntity = new UserInfoEntity();
        userInfoEntity.setName("小龍");
        userInfoEntity.setSkill("JAVA");
        userInfoEntity.setAge(18);
        userInfoEntity.setFraction(59L);
        userInfoEntity.setEvaluate("該學生是一個在改BUG的碼農");
        userInfoService.save(userInfoEntity);
    }
    /**
     * 批量新增用戶信息
     * @Author Sans
     * @CreateTime 2019/6/8 16:42
     */
    @RequestMapping("/saveInfoList")
    public void saveInfoList(){
        //創建對象
        UserInfoEntity sans = new UserInfoEntity();
        sans.setName("Sans");
        sans.setSkill("睡覺");
        sans.setAge(18);
        sans.setFraction(60L);
        sans.setEvaluate("Sans是一個愛睡覺,并且身材較矮骨骼巨大的骷髏小胖子");
        UserInfoEntity papyrus = new UserInfoEntity();
        papyrus.setName("papyrus");
        papyrus.setSkill("JAVA");
        papyrus.setAge(18);
        papyrus.setFraction(58L);
        papyrus.setEvaluate("Papyrus是一個講話大聲、個性張揚的骷髏,給人自信、有魅力的骷髏小瘦子");
        //批量保存
        List<UserInfoEntity> list =new ArrayList<>();
        list.add(sans);
        list.add(papyrus);
        userInfoService.saveBatch(list);
    }
    /**
     * 更新用戶信息
     * @Author Sans
     * @CreateTime 2019/6/8 16:47
     */
    @RequestMapping("/updateInfo")
    public void updateInfo(){
        //根據實體中的ID去更新,其他字段如果值為null則不會更新該字段,參考yml配置文件
        UserInfoEntity userInfoEntity = new UserInfoEntity();
        userInfoEntity.setId(1L);
        userInfoEntity.setAge(19);
        userInfoService.updateById(userInfoEntity);
    }
    /**
     * 新增或者更新用戶信息
     * @Author Sans
     * @CreateTime 2019/6/8 16:50
     */
    @RequestMapping("/saveOrUpdateInfo")
    public void saveOrUpdate(){
        //傳入的實體類userInfoEntity中ID為null就會新增(ID自增)
        //實體類ID值存在,如果數據庫存在ID就會更新,如果不存在就會新增
        UserInfoEntity userInfoEntity = new UserInfoEntity();
        userInfoEntity.setId(1L);
        userInfoEntity.setAge(20);
        userInfoService.saveOrUpdate(userInfoEntity);
    }
    /**
     * 根據ID刪除用戶信息
     * @Author Sans
     * @CreateTime 2019/6/8 16:52
     */
    @RequestMapping("/deleteInfo")
    public void deleteInfo(String userId){
        userInfoService.removeById(userId);
    }
    /**
     * 根據ID批量刪除用戶信息
     * @Author Sans
     * @CreateTime 2019/6/8 16:55
     */
    @RequestMapping("/deleteInfoList")
    public void deleteInfoList(){
        List<String> userIdlist = new ArrayList<>();
        userIdlist.add("12");
        userIdlist.add("13");
        userInfoService.removeByIds(userIdlist);
    }
    /**
     * 根據指定字段刪除用戶信息
     * @Author Sans
     * @CreateTime 2019/6/8 16:57
     */
    @RequestMapping("/deleteInfoMap")
    public void deleteInfoMap(){
        //kay是字段名 value是字段值
        Map<String,Object> map = new HashMap<>();
        map.put("skill","刪除");
        map.put("fraction",10L);
        userInfoService.removeByMap(map);
    }
}

controller層用到lambda語法

 package com.demo.drools.controller;
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.demo.drools.entity.UserInfoEntity;
import com.demo.drools.service.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * TODO your comment
 *
 * @author Yujiaqi
 * @date 2020/12/2 19:28
 */
public class UserInfoPlusController {
    @Autowired
    private UserInfoService userInfoService;
    
    /**
     * MP擴展演示
     * @Author Sans
     * @CreateTime 2019/6/8 16:37
     * @Return Map<String,Object> 返回數據
     */
    @RequestMapping("/getInfoListPlus")
    public Map<String,Object> getInfoListPage(){
        //初始化返回類
        Map<String,Object> result = new HashMap<>();
        //查詢年齡等于18歲的學生
        //等價SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE age = 18
        QueryWrapper<UserInfoEntity> queryWrapper1 = new QueryWrapper<>();
        queryWrapper1.lambda().eq(UserInfoEntity::getAge,18);
        List<UserInfoEntity> userInfoEntityList1 = userInfoService.list(queryWrapper1);
        result.put("studentAge18",userInfoEntityList1);
        //查詢年齡大于5歲的學生且小于等于18歲的學生
        //等價SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE age > 5 AND age <= 18
        QueryWrapper<UserInfoEntity> queryWrapper2 = new QueryWrapper<>();
        queryWrapper2.lambda().gt(UserInfoEntity::getAge,5);
        queryWrapper2.lambda().le(UserInfoEntity::getAge,18);
        List<UserInfoEntity> userInfoEntityList2 = userInfoService.list(queryWrapper2);
        result.put("studentAge5",userInfoEntityList2);
        //模糊查詢技能字段帶有"畫"的數據,并按照年齡降序
        //等價SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE skill LIKE '%畫%' ORDER BY age DESC
        QueryWrapper<UserInfoEntity> queryWrapper3 = new QueryWrapper<>();
        queryWrapper3.lambda().like(UserInfoEntity::getSkill,"畫");
        queryWrapper3.lambda().orderByDesc(UserInfoEntity::getAge);
        List<UserInfoEntity> userInfoEntityList3 = userInfoService.list(queryWrapper3);
        result.put("studentAgeSkill",userInfoEntityList3);
        //模糊查詢名字帶有"小"或者年齡大于18的學生
        //等價SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE name LIKE '%小%' OR age > 18
        QueryWrapper<UserInfoEntity> queryWrapper4 = new QueryWrapper<>();
        queryWrapper4.lambda().like(UserInfoEntity::getName,"小");
        queryWrapper4.lambda().or().gt(UserInfoEntity::getAge,18);
        List<UserInfoEntity> userInfoEntityList4 = userInfoService.list(queryWrapper4);
        result.put("studentOr",userInfoEntityList4);
        //查詢評價不為null的學生,并且分頁
        //等價SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE evaluate IS NOT NULL LIMIT 0,5
        IPage<UserInfoEntity> page = new Page<>();
        page.setCurrent(1);
        page.setSize(5);
        QueryWrapper<UserInfoEntity> queryWrapper5 = new QueryWrapper<>();
        queryWrapper5.lambda().isNotNull(UserInfoEntity::getEvaluate);
        page = userInfoService.page(page,queryWrapper5);
        result.put("studentPage",page);
        return result;
    }
}

以上就是mybatis-plus的小案例,mybatis-plus它像我之前使用的spring data jpa框架不用寫sql語句,就可以實現簡單的增刪改查、批量操作、分頁mybatis-plus功能還是比較強大,能減少我們寫很多代碼,我個人還是比較喜歡用這個mybatis-plus的

mybatis-plus只是mybatis的增強版,它不影響mybatis的使用,我們可以寫我們自定的方法以及sql,接下來我們看一個小案例

dao層新增方法

/**
     * 查詢大于該分數的學生
     * @Author Sans
     * @CreateTime 2019/6/9 14:28
     * @Param  page  分頁參數
     * @Param  fraction  分數
     * @Return IPage<UserInfoEntity> 分頁數據
     */
    IPage<UserInfoEntity> selectUserInfoByGtFraction(
            @Param(value = "page") IPage<UserInfoEntity> page,
            @Param(value = "fraction")Long fraction);

service新增方法

/**
     * 查詢大于該分數的學生
     * @Author Sans
     * @CreateTime 2019/6/9 14:27
     * @Param  page  分頁參數
     * @Param  fraction  分數
     * @Return IPage<UserInfoEntity> 分頁數據
     */
    IPage<UserInfoEntity> selectUserInfoByGtFraction(IPage<UserInfoEntity> page,Long fraction);

serviceImpl層新增方法

/**
     * 查詢大于該分數的學生
     * @Author Sans
     * @CreateTime 2019/6/9 14:27
     * @Param  page  分頁參數
     * @Param  fraction  分數
     * @Return IPage<UserInfoEntity> 分頁數據
     */
    IPage<UserInfoEntity> selectUserInfoByGtFraction(IPage<UserInfoEntity> page,Long fraction);

controller層新增方法

 /**
     * MP自定義SQL
     * @Author Sans
     * @CreateTime 2019/6/9 14:37
     * @Return IPage<UserInfoEntity> 分頁數據
     */
    @RequestMapping("/getInfoListSQL")
    public IPage<UserInfoEntity> getInfoListSQL(){
        //查詢大于60分以上的學生,并且分頁
        IPage<UserInfoEntity> page = new Page<>();
        page.setCurrent(1);
        page.setSize(5);
        page = userInfoService.selectUserInfoByGtFraction(page,60L);
        return page;
    }

配置我們的mybatis的xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.demo.drools.dao.UserInfoDao">
  <!-- Sans 2019/6/9 14:35 -->
  <select id="selectUserInfoByGtFraction" resultType="com.demo.drools.entity.UserInfoEntity">
    SELECT * FROM user_info WHERE fraction > #{fraction}
    </select>
</mapper>

以上配置就是我們的mybatis用法。

mybatis plus強大的條件構造器queryWrapper、updateWrapper

1.QueryWrapper: Entity 對象封裝操作類
2.UpdateWrapper : Update 條件封裝,用于Entity對象更新操作
3.條件構造器使用中的各個方法格式和說明

SpringBoot整合Mybatis-plus怎么使用

以上就是“SpringBoot整合Mybatis-plus怎么使用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

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

AI

梅河口市| 神农架林区| 林芝县| 娄烦县| 夏河县| 余江县| 吴桥县| 武隆县| 建昌县| 周至县| 富锦市| 株洲市| 洱源县| 通化县| 安丘市| 邯郸县| 尤溪县| 恩施市| 当阳市| 商城县| 临朐县| 铅山县| 蚌埠市| 北宁市| 藁城市| 雷波县| 嘉荫县| 双江| 饶平县| 西峡县| 女性| 彭州市| 太原市| 莱芜市| 涿州市| 确山县| 紫阳县| 阿克陶县| 微山县| 丹凤县| 安图县|