色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

MyBatis-Plus的使用與測試

Android編程精選 ? 來源:稀土掘金技術社區 ? 作者:我犟不過你 ? 2022-08-22 11:56 ? 次閱讀

本文主要介紹mybatis-plus這款插件,針對springboot用戶。包括引入,配置,使用,以及擴展等常用的方面做一個匯總整理,盡量包含大家常用的場景內容。

關于mybatis-plus是什么,不多做介紹了,看官方文檔:baomidou.com ,咱們直接代碼擼起來。

一、快速開始

本文基于springboot、maven、jdk1.8、mysql開發,所以開始前我們需要準備好這套環境。我的環境使用了nacos作為注冊中心,不了解或需要搭建的參考:https://juejin.cn/post/7053977860612030477

新建如下數據庫:

398240ba-205d-11ed-ba43-dac502259ad0.jpg

建議大家選擇utf8mb4這種字符集,做過微信的同學應該會知道,微信用戶名稱的表情,是需要這種字符集才能存儲的。

我就默認其他環境已經準備好了,咱們直接從mybatis-plus開始。

1.1 依賴準備

想要什么依賴版本的去maven倉庫查看:https://mvnrepository.com/

引入mybatis-plus依賴:

<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.5.0version>
dependency>

引入mysql依賴:

<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.27version>
dependency>

目前,多數項目會有多數據源的要求,或者是主從部署的要求,所以我們還需要引入mybatis-plus關于多數據源的依賴:


<dependency>
<groupId>com.baomidougroupId>
<artifactId>dynamic-datasource-spring-boot-starterartifactId>
<version>3.5.0version>
dependency>

1.2 配置準備

springboot啟動類。配置@MapperScan注解,用于掃描Mapper文件位置:

importorg.mybatis.spring.annotation.MapperScan;
importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;
importorg.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@MapperScan("com.wjbgn.user.mapper")
@SpringBootApplication
publicclassRobNecessitiesUserApplication{

publicstaticvoidmain(String[]args){
SpringApplication.run(RobNecessitiesUserApplication.class,args);
}

}

數據源配置,此處配置一主一從的環境,當前我只有一臺,所以此處配置一樣的:

spring:
datasource:
dynamic:
primary:master#設置默認的數據源或者數據源組,默認值即為master
strict:false#嚴格匹配數據源,默認false.true未匹配到指定數據源時拋異常,false使用默認數據源
datasource:
master:
url:jdbc//127.0.0.1:3306/rob_necessities?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username:root
password:123456
slave_1:
url:jdbc//127.0.0.1:3306/rob_necessities?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username:root
password:123456

補充:這里面因為默認使用的是HikariCP數據源,目前也推薦使用這個,相比于druid有更高的性能,但是不能忽略下面的配置,否則服務會不斷拋出異常,原因是數據庫的連接時常和連接池的配置沒有做好。

spring:
datasource:
dynamic:
hikari:
max-lifetime:1800000
connection-timeout:5000
idle-timeout:3600000
max-pool-size:12
min-idle:4
connection-test-query:/**ping*/

1.3 啟動服務

下面直接啟動服務:

398f50de-205d-11ed-ba43-dac502259ad0.jpg

得到如上結果表示啟動成功了。

二、使用

前面我們成功的集成進來了mybatis-plus,配合springboot使用不要太方便。下面我們看看如何使用它來操作我們的數據庫。介紹一下常規的用法。

2.1 實體類注解

mybatis-plus為使用者封裝了很多的注解,方便我們使用,我們首先看下實體類中有哪些注解。有如下的實體類:

@TableName(value="user")
publicclassUserDO{

/**
*主鍵
*/
@TableId(value="id",type=IdType.AUTO)
privateLongid;

/**
*昵稱
*/
@TableField("nickname")
privateStringnickname;

/**
*真實姓名
*/
privateStringrealName;
}
  • @TableName 表名注解,用于標識實體類對應的表。其說明如下,關于這些書寫,常規情況基本很少用到,不做多余解釋了:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.ANNOTATION_TYPE})
public@interfaceTableName{

/**
*實體對應的表名
*/
Stringvalue()default"";

/**
*schema
*
*@since3.1.1
*/
Stringschema()default"";

/**
*是否保持使用全局的tablePrefix的值
*

只生效于既設置了全局的tablePrefix也設置了上面{@link#value()}的值

*
  • 如果是false,全局的tablePrefix不生效
  • * *@since3.1.1 */
    booleankeepGlobalPrefix()defaultfalse; /** *實體映射結果集, *只生效與mp自動注入的method */ StringresultMap()default""; /** *是否自動構建resultMap并使用, *只生效與mp自動注入的method, *如果設置resultMap則不會進行resultMap的自動構建并注入, *只適合個別字段設置了typeHandler或jdbcType的情況 * *@since3.1.2 */ booleanautoResultMap()defaultfalse; /** *需要排除的屬性名 * *@since3.3.1 */ String[]excludeProperty()default{}; }
    • @TableId 主鍵注解,看看其源碼:
    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.FIELD,ElementType.ANNOTATION_TYPE})
    public@interfaceTableId{
    
    /**
    *字段值(駝峰命名方式,該值可無)
    */
    Stringvalue()default"";
    
    /**
    *主鍵ID
    *{@linkIdType}
    */
    IdTypetype()defaultIdType.NONE;
    }
    

    其中IdType很重要:

    名稱 描述
    AUTO 數據庫自增ID
    NONE 該類型為未設置主鍵類型(注解里等于跟隨全局,全局里約等于 INPUT)
    INPUT 用戶自己設置的ID
    ASSIGN_ID 當用戶傳入為空時,自動分配類型為Number或String的主鍵(雪花算法
    ASSIGN_UUID 當用戶傳入為空時,自動分配類型為String的主鍵
    • @TableFiled 表字段標識,下面看看其主要常用屬性:

      名稱 描述
      value 數據庫字段名
      condition 字段 where 實體查詢比較條件,通過SqlCondition設置 如果未設置條件,則按照正常相等來查詢 若設置則按照以下規則:等于:EQUAL = "%s=#{%s}"; 不等于:NOT_EQUAL = "%s<>#{%s}"; 左右模糊:LIKE = "%s LIKE CONCAT('%%',#{%s},'%%')"; oracle左右模糊ORACLE_LIKE = "%s LIKE CONCAT(CONCAT('%%',#{%s}),'%%')"; 左模糊:LIKE_LEFT = "%s LIKE CONCAT('%%',#{%s})"; 右模糊:LIKE_RIGHT = "%s LIKE CONCAT(#{%s},'%%')";
      fill 自動填充策略,通過FieldFill設置 不處理:FieldFill.DEFAULT 插入時填充字段:FieldFill.INSERT 更新時填充字段:FieldFill.UPDATE 插入或新增時填充字段:FieldFill.INSERT_UPDATE

      關于其他的屬性,我不太推薦使用,用得越多,越容易蒙圈。可以通過wapper查詢去設置。

    2.2 CRUD

    mybatis-plus封裝好了一條接口供我們直接調用。關于內部的具體方法,在使用時候自己體會吧,此處不列舉了。

    2.2.1 Service層CRUD

    我們使用的時候,需要在自己定義的service接口當中繼承IService接口:

    importcom.baomidou.mybatisplus.extension.service.IService;
    importcom.wjbgn.user.entity.UserDO;
    
    /**
    *@description:用戶服務接口
    *@author:weirx
    *@date:2022/1/17 15:02
    *@version:3.0
    */
    publicinterfaceIUserServiceextendsIService<UserDO>{
    }
    

    同時要在我們的接口實現impl當中繼承ServiceImpl,實現自己的接口:

    importcom.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    importcom.wjbgn.user.entity.UserDO;
    importcom.wjbgn.user.mapper.UserMapper;
    importcom.wjbgn.user.service.IUserService;
    
    /**
    *@description:用戶接口實現
    *@author:weirx
    *@date:2022/1/17 15:03
    *@version:3.0
    */
    publicclassUserServiceImplextendsServiceImpl<UserMapper,UserDO>implementsIUserService{
    
    }
    

    2.2.2 Mapper層CRUD

    mybatis-plus將常用的CRUD接口封裝成了BaseMapper接口,我們只需要在自己的Mapper中繼承它就可以了:

    /**
    *@description:用戶mapper
    *@author:weirx
    *@date:2022/1/17 14:55
    *@version:3.0
    */
    @Mapper
    publicinterfaceUserMapperextendsBaseMapper<UserDO>{
    }
    

    2.3 分頁

    使用分頁話需要增加分頁插件的配置:

    importcom.baomidou.mybatisplus.annotation.DbType;
    importcom.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
    importcom.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
    importorg.mybatis.spring.annotation.MapperScan;
    importorg.springframework.context.annotation.Bean;
    importorg.springframework.context.annotation.Configuration;
    
    @Configuration
    @MapperScan("com.wjbgn.*.mapper*")
    publicclassMybatisPlusConfig{
    
    @Bean
    publicMybatisPlusInterceptormybatisPlusInterceptor(){
    MybatisPlusInterceptorinterceptor=newMybatisPlusInterceptor();
    interceptor.addInnerInterceptor(newPaginationInnerInterceptor(DbType.MYSQL));
    returninterceptor;
    }
    
    }
    

    如上配置后,我們直接使用分頁方法就行。

    2.4 邏輯刪除配置

    很多情況下我們的系統都需要邏輯刪除,方便恢復查找誤刪除的數據。

    通過mybatis-plus可以通過全局配置的方式,而不需要再去手動處理。針對更新和查詢操作有效,新增不做限制。

    通常以我的習慣邏輯刪除字段通常定義為is_delete,在實體類當中就是isDelete。那么在配置文件中就可以有如下的配置:

    mybatis-plus:
    global-config:
    db-config:
    logic-delete-field:isDelete#全局邏輯刪除的實體字段名(since3.3.0,配置后可以忽略不配置步驟2)
    logic-delete-value:1#邏輯已刪除值(默認為1)
    logic-not-delete-value:0#邏輯未刪除值(默認為0)
    

    或者通過注解@TableLogic

    @TableLogic
    privateIntegerisDelete;
    

    2.5 通用枚舉配置

    相信后端的同學都經歷過一個情況,比如性別這個字段,分別值和名稱對應1男2女,這個字段在數據庫時是數值類型,而前端展示則是展示字符串的名稱。有幾種常見實現方案呢?

    • 數據庫查詢sql通過case判斷,返回名稱,以前oracle經常這么做
    • 數據庫返回的值,重新遍歷賦值進去,這時候還需要判斷這個值到底是男是女。
    • 前端寫死,返回1就是男,返回2就是女。

    相信無論哪種方法都有其缺點,所以我們可以使用mybatis-plus提供的方式。我們在返回給前端時:

    • 只需要在遍歷時get這個枚舉,直接賦值其名稱,不需要再次判斷。
    • 直接返回給前端,讓前端去去枚舉的name

    這樣大家都不需要寫死這個值。

    下面看看如何實現這個功能:

    • 性別枚舉,實現IEnum接口:
    importcom.baomidou.mybatisplus.annotation.IEnum;
    importcom.fasterxml.jackson.annotation.JsonFormat;
    
    /**
    *@description:性別枚舉
    *@author:weirx
    *@date:2022/1/17 16:26
    *@version:3.0
    */
    @JsonFormat(shape=JsonFormat.Shape.OBJECT)
    publicenumSexEnumimplementsIEnum{
    MAN(1,"男"),
    WOMAN(2,"女");
    privateIntegercode;
    privateStringname;
    
    SexEnum(Integercode,Stringname){
    this.code=code;
    this.name=name;
    }
    
    @Override
    publicIntegergetValue(){
    returncode;
    }
    
    publicStringgetName(){
    returnname;
    }
    
    }
    

    @JsonFormat注解為了解決枚舉類返回前端只展示構造器名稱的問題。

    • 實體類性別字段
    @TableName(value="user")
    publicclassUserDO{
    
    /**
    *主鍵
    */
    @TableId(value="id",type=IdType.AUTO)
    privateLongid;
    
    /**
    *昵稱
    */
    @TableField(value="nickname",condition=SqlCondition.EQUAL)
    privateStringnickname;
    
    /**
    *性別
    */
    @TableField(value="sex")
    privateSexEnumsex;
    
    /**
    *版本
    */
    @TableField(value="version",update="%s+1")
    privateIntegerversion;
    
    /**
    *時間字段,自動添加
    */
    @TableField(value="create_time",fill=FieldFill.INSERT)
    privateLocalDateTimecreateTime;
    }
    
    • 配置文件掃描枚舉
    mybatis-plus:
    #支持統配符*或者;分割
    typeEnumsPackage:com.wjbgn.*.enums
    
    • 定義配置文件
    @Bean
    publicMybatisPlusPropertiesCustomizermybatisPlusPropertiesCustomizer(){
    returnproperties->{
    GlobalConfigglobalConfig=properties.getGlobalConfig();
    globalConfig.setBanner(false);
    MybatisConfigurationconfiguration=newMybatisConfiguration();
    configuration.setDefaultEnumTypeHandler(MybatisEnumTypeHandler.class);
    properties.setConfiguration(configuration);
    };
    }
    
    • 序列化枚舉值為數據庫值,以下我是使用的fastjson,全局(添加在前面的配置文件中):

    Bean
    publicMybatisPlusPropertiesCustomizermybatisPlusPropertiesCustomizer(){
    //序列化枚舉值為數據庫存儲值
    FastJsonConfigconfig=newFastJsonConfig();
    config.setSerializerFeatures(SerializerFeature.WriteEnumUsingToString);
    
    returnproperties->{
    GlobalConfigglobalConfig=properties.getGlobalConfig();
    globalConfig.setBanner(false);
    MybatisConfigurationconfiguration=newMybatisConfiguration();
    configuration.setDefaultEnumTypeHandler(MybatisEnumTypeHandler.class);
    properties.setConfiguration(configuration);
    };
    }
    
    • 局部
    JSONField(serialzeFeatures=SerializerFeature.WriteEnumUsingToString)
    privateSexEnumsex;
    

    2.6 自動填充

    還記得前面提到的實體類當中的注解@TableFeild嗎?當中有個屬性叫做fill,通過FieldFill設置屬性,這個就是做自動填充用的。

    publicenumFieldFill{
    /**
    *默認不處理
    */
    DEFAULT,
    /**
    *插入填充字段
    */
    INSERT,
    /**
    *更新填充字段
    */
    UPDATE,
    /**
    *插入和更新填充字段
    */
    INSERT_UPDATE
    }
    

    但是這個直接是不能使用的,需要通過實現mybatis-plus提供的接口,增加如下配置:

    importcom.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
    importorg.apache.ibatis.reflection.MetaObject;
    importorg.springframework.stereotype.Component;
    
    importjava.time.LocalDateTime;
    
    /**
    *description:啟動自動填充功能
    
    *@return:
    *@author:weirx
    *@time:2022/1/1717:00
    */
    @Component
    publicclassMyMetaObjectHandlerimplementsMetaObjectHandler{
    
    @Override
    publicvoidinsertFill(MetaObjectmetaObject){
    //起始版本3.3.0(推薦使用)
    this.strictInsertFill(metaObject,"createTime",LocalDateTime.class,LocalDateTime.now());
    }
    
    @Override
    publicvoidupdateFill(MetaObjectmetaObject){
    //起始版本3.3.0(推薦)
    this.strictUpdateFill(metaObject,"updateTime",LocalDateTime.class,LocalDateTime.now());
    }
    }
    

    字段如下:

    /**
    *時間字段,自動添加
    */
    @TableField(value="create_time",fill=FieldFill.INSERT)
    privateLocalDateTimecreateTime;
    

    2.7 多數據源

    前面提到過,配置文件當中配置了主從的方式,其實mybatis-plus還支持更多的方式:

    • 多主多從
    spring:
    datasource:
    dynamic:
    primary:master#設置默認的數據源或者數據源組,默認值即為master
    strict:false#嚴格匹配數據源,默認false.true未匹配到指定數據源時拋異常,false使用默認數據源
    datasource:
    master_1:
    master_2:
    slave_1:
    slave_2:
    slave_3:
    
    • 多種數據庫
    spring:
    datasource:
    dynamic:
    primary:mysql#設置默認的數據源或者數據源組,默認值即為master
    strict:false#嚴格匹配數據源,默認false.true未匹配到指定數據源時拋異常,false使用默認數據源
    datasource:
    mysql:
    oracle:
    postgresql:
    h2:
    sqlserver:
    
    • 混合配置
    spring:
    datasource:
    dynamic:
    primary:master#設置默認的數據源或者數據源組,默認值即為master
    strict:false#嚴格匹配數據源,默認false.true未匹配到指定數據源時拋異常,false使用默認數據源
    datasource:
    master_1:
    slave_1:
    slave_2:
    oracle_1:
    oracle_2:
    

    上面的三種方式,除了混合配置,我覺得都有肯能出現的吧。

    • @DS注解

    可以注解在方法上或類上,同時存在就近原則 【方法上注解】 優先于 【類上注解】

    @DS("slave_1")
    publicclassUserServiceImplextendsServiceImpl<UserMapper,UserDO>implementsIUserService{
    
    
    @DS("salve_1")
    @Override
    publicListgetList(){
    returnthis.getList();
    }
    
    @DS("master")
    @Override
    publicintsaveUser(UserDOuserDO){
    booleansave=this.save(userDO);
    if(save){
    return1;
    }else{
    return0;
    }
    }
    }
    

    三、測試

    經過上面的配置,下面開始進入測試驗證階段。

    建立一張表:

    CREATETABLE`user`(
    `id`int(11)NOTNULLAUTO_INCREMENT,
    `nickname`varchar(255)NOTNULLCOMMENT'昵稱',
    `sex`tinyint(1)NOTNULLCOMMENT'性別,1男2女',
    `create_time`datetimeNOTNULLCOMMENT'創建時間',
    `is_delete`tinyint(1)NOTNULLDEFAULT'0'COMMENT'是否刪除1是,0否',
    PRIMARYKEY(`id`)
    )ENGINE=InnoDBAUTO_INCREMENT=50DEFAULTCHARSET=utf8mb4;
    

    controller:

    /**
    *@description:用戶controller
    *@author:weirx
    *@date:2022/1/17 17:39
    *@version:3.0
    */
    @RestController
    @RequestMapping("/user")
    publicclassUserController{
    
    @Autowired
    privateIUserServiceuserService;
    
    /**
    *description:新增
    
    *@return:boolean
    *@author:weirx
    *@time:2022/1/1719:11
    */
    @RequestMapping("/save")
    publicbooleansave(){
    UserDOuserDO=newUserDO();
    userDO.setNickname("大漂亮");
    userDO.setSex(SexEnum.MAN);
    
    returnuserService.save(userDO);
    }
    
    /**
    *description:修改
    *@paramnickname
    *@paramid
    *@return:boolean
    *@author:weirx
    *@time:2022/1/1719:11
    */
    @RequestMapping("/update")
    publicbooleanupdate(@RequestParamStringnickname,@RequestParamLongid){
    UserDOuserDO=newUserDO();
    userDO.setNickname(nickname);
    userDO.setId(id);
    returnuserService.updateById(userDO);
    }
    
    /**
    *description:刪除
    *@paramid
    *@return:boolean
    *@author:weirx
    *@time:2022/1/1719:11
    */
    @RequestMapping("/delete")
    publicbooleandelete(@RequestParamLongid){
    UserDOuserDO=newUserDO();
    userDO.setId(id);
    returnuserService.removeById(userDO);
    }
    
    /**
    *description:列表
    *@return:java.util.List
    *@author:weirx
    *@time:2022/1/1719:11
    */
    @RequestMapping("/list")
    publicListlist(){
    returnuserService.list();
    }
    
    /**
    *description:分頁列表
    *@paramcurrent
    *@paramsize
    *@return:com.baomidou.mybatisplus.extension.plugins.pagination.Page
    *@author:weirx
    *@time:2022/1/1719:11
    */
    @RequestMapping("/page")
    publicPagepage(@RequestParamintcurrent,@RequestParamintsize){
    returnuserService.page(newPage<>(current,size),newQueryWrapper(newUserDO()));
    }
    
    }
    

    記過上面的接口驗證,功能沒有問題,集成成功。

    項目源碼地址

    https://gitee.com/wei_rong_xin/rob-necessities

    審核編輯:湯梓紅


    聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
    • spring
      +關注

      關注

      0

      文章

      340

      瀏覽量

      14368
    • mybatis
      +關注

      關注

      0

      文章

      62

      瀏覽量

      6731

    原文標題:看了我的MyBatis-Plus用法,同事也開始悄悄模仿了...

    文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

    收藏 人收藏

      評論

      相關推薦

      mybatis plus的常規用法

      上篇文章我們介紹過通過 Mybatis Plus 進行增刪改查,如下這段代碼: /** * 根據id修改 * UPDATE user SET user_name=?, user_age
      的頭像 發表于 09-25 15:06 ?953次閱讀
      <b class='flag-5'>mybatis</b> <b class='flag-5'>plus</b>的常規用法

      #硬聲創作季 Java項目實戰:MyBatis-Plus簡介

      PlusJAVA編程語言
      Mr_haohao
      發布于 :2022年09月07日 10:15:17

      #硬聲創作季 Java項目實戰:Mybatis-plus的樂觀鎖方案

      PlusJAVA編程語言
      Mr_haohao
      發布于 :2022年09月07日 10:30:56

      一篇讓你熟練掌握 MyBatis-Plus

      MyBatis-plus 是一款 Mybatis 增強工具,用于簡化開發,提高效率。下文使用縮寫 mp來簡化表示 MyBatis-plus,本文主要介紹 mp 搭配 Spring Boot
      的頭像 發表于 06-01 09:30 ?2642次閱讀
      一篇讓你熟練掌握 <b class='flag-5'>MyBatis-Plus</b>!

      Mybatis-Plus Mybatis增強工具包

      ./oschina_soft/gitee-mybatis-plus.zip
      發表于 06-13 11:34 ?1次下載
      <b class='flag-5'>Mybatis-Plus</b> <b class='flag-5'>Mybatis</b>增強工具包

      Fluent Mybatis、原生MybatisMybatis Plus對比

      mapper中再組裝參數。那對比原生Mybatis, Mybatis Plus或者其他框架,FluentMybatis提供了哪些便利呢?
      的頭像 發表于 09-15 15:41 ?1466次閱讀

      SpringBoot中MybatisX插件的簡單使用教程

      MybatisX 是一款基于 IDEA 的快速開發插件,方便在使用mybatis以及mybatis-plus開始時簡化繁瑣的重復操作,提高開發速率。
      的頭像 發表于 02-21 09:49 ?1336次閱讀

      MyBatis-Plus為什么不支持聯表

      MyBatis Plus Join`一款專門解決MyBatis Plus 關聯查詢問題的擴展框架,他并不一款全新的框架,而是基于`MyBatis
      的頭像 發表于 02-28 15:19 ?2520次閱讀
      <b class='flag-5'>MyBatis-Plus</b>為什么不支持聯表

      介紹一款基于Mybatis-Plus的代碼自助生成器

      在基于Mybatis的開發模式中,很多開發者還會選擇Mybatis-Plus來輔助功能開發,以此提高開發的效率。
      的頭像 發表于 05-23 14:16 ?1184次閱讀
      介紹一款基于<b class='flag-5'>Mybatis-Plus</b>的代碼自助生成器

      如何調優MyBatis 25倍性能

      最近在壓測一批接口,發現接口處理速度慢的有點超出預期,感覺很奇怪,后面定位發現是數據庫批量保存這塊很慢。 這個項目用的是 mybatis-plus,批量保存直接用的是 mybatis-plus 提供的 saveBatch。 我點進去看了下源碼,感覺有點不太對勁
      的頭像 發表于 05-30 09:56 ?642次閱讀
      如何調優<b class='flag-5'>MyBatis</b> 25倍性能

      你還在手寫join聯表查詢?MyBatis-Plus這樣寫太香了!

      眾所周知,mybatis plus 封裝的 mapper 不支持 join,如果需要支持就必須自己去實現。但是對于大部分的業務場景來說,都需要多表 join,要不然就沒必要采用關系型數據庫了。
      的頭像 發表于 07-07 10:19 ?2998次閱讀
      你還在手寫join聯表查詢?<b class='flag-5'>MyBatis-Plus</b>這樣寫太香了!

      Mybatis-Plus使用技巧與隱患分析

      MP 從出現就一直有爭議 感覺一直 都存在兩種聲音
      的頭像 發表于 07-27 10:39 ?729次閱讀
      <b class='flag-5'>Mybatis-Plus</b>使用技巧與隱患分析

      Mybatis-plus批量插入太慢?

      「內置代碼生成器:」 采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用
      的頭像 發表于 08-25 15:24 ?803次閱讀
      <b class='flag-5'>Mybatis-plus</b>批量插入太慢?

      MyBatis Plus如何簡化開發

      本篇文章,我們通過 MyBatis Plus 來對一張表進行 CRUD 操作,來看看是如何簡化我們開發的。 1、創建測試表 創建 USER 表: DROP TABLE IF EXISTS
      的頭像 發表于 10-09 15:08 ?459次閱讀
      <b class='flag-5'>MyBatis</b> <b class='flag-5'>Plus</b>如何簡化開發

      mybatis和mybatisplus的區別

      MyBatisMyBatis Plus是兩個非常受歡迎的Java持久層框架。這兩個框架在設計和功能上有一些區別,下面我將詳細介紹它們之間的差異以及各自的特點。 設計理念與目標: MyBati
      的頭像 發表于 12-03 11:53 ?2615次閱讀
      主站蜘蛛池模板: 在线观看视频中文字幕| 国产亚洲精品久久久久久白晶晶 | 最美白虎逼| 久久精品亚洲牛牛影视| 亚洲精品乱码久久久久久直播| 国产成人a一在线观看| 色99久久久久高潮综合影院| 99久久国产露脸精品国产麻豆| 免费完整版观看| 99久久婷婷国产麻豆精品电影 | qvod在线电影| 热久久免费频精品99热| 成人性生交大片免费看金瓶七仙女| 热热久久超碰精品中文字幕| 成人午夜剧场| 无修肉动漫在线观看影片| 国产午夜精品理论片在线| 亚洲欧美一区二区三区四区| 久草青青在线| 99麻豆精品国产人妻无码| 日韩精品久久久久影院| 国产精品九九久久| 亚洲视频在线免费| 龙腾亚洲人成电影网站| babesvideos欧美最新| 全黄H全肉细节文短篇| 大岛优香久久中文字幕| 翁用力的抽插| 久99视频精品免费观看福利| 在线国产视频观看| 热久久综合这里只有精品电影| 国产精品亚洲一区二区三区久久| 亚洲视频免费| 欧美香蕉大胸在线视频观看| 国产精品久久久久久久人热| 亚洲一区精品伊人久久伊人| 萝莉御姐被吸奶| 国产成人精品电影在线观看| 亚洲中文日韩日本在线视频| 欧美雌雄双性人交xxxx| 国产日韩欧美三级|