在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MyBatis-Plus的使用與測試

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

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

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

一、快速開始

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

新建如下數(shù)據(jù)庫:

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

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

我就默認(rèn)其他環(huán)境已經(jīng)準(zhǔn)備好了,咱們直接從mybatis-plus開始。

1.1 依賴準(zhǔn)備

想要什么依賴版本的去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>

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


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

1.2 配置準(zhǔn)備

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);
}

}

數(shù)據(jù)源配置,此處配置一主一從的環(huán)境,當(dāng)前我只有一臺,所以此處配置一樣的:

spring:
datasource:
dynamic:
primary:master#設(shè)置默認(rèn)的數(shù)據(jù)源或者數(shù)據(jù)源組,默認(rèn)值即為master
strict:false#嚴(yán)格匹配數(shù)據(jù)源,默認(rèn)false.true未匹配到指定數(shù)據(jù)源時拋異常,false使用默認(rèn)數(shù)據(jù)源
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

補(bǔ)充:這里面因?yàn)槟J(rèn)使用的是HikariCP數(shù)據(jù)源,目前也推薦使用這個,相比于druid有更高的性能,但是不能忽略下面的配置,否則服務(wù)會不斷拋出異常,原因是數(shù)據(jù)庫的連接時常和連接池的配置沒有做好。

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 啟動服務(wù)

下面直接啟動服務(wù):

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

得到如上結(jié)果表示啟動成功了。

二、使用

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

2.1 實(shí)體類注解

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

@TableName(value="user")
publicclassUserDO{

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

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

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

/**
*實(shí)體對應(yīng)的表名
*/
Stringvalue()default"";

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

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

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

*
  • 如果是false,全局的tablePrefix不生效
  • * *@since3.1.1 */
    booleankeepGlobalPrefix()defaultfalse; /** *實(shí)體映射結(jié)果集, *只生效與mp自動注入的method */ StringresultMap()default""; /** *是否自動構(gòu)建resultMap并使用, *只生效與mp自動注入的method, *如果設(shè)置resultMap則不會進(jìn)行resultMap的自動構(gòu)建并注入, *只適合個別字段設(shè)置了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 數(shù)據(jù)庫自增ID
    NONE 該類型為未設(shè)置主鍵類型(注解里等于跟隨全局,全局里約等于 INPUT)
    INPUT 用戶自己設(shè)置的ID
    ASSIGN_ID 當(dāng)用戶傳入為空時,自動分配類型為Number或String的主鍵(雪花算法
    ASSIGN_UUID 當(dāng)用戶傳入為空時,自動分配類型為String的主鍵
    • @TableFiled 表字段標(biāo)識,下面看看其主要常用屬性:

      名稱 描述
      value 數(shù)據(jù)庫字段名
      condition 字段 where 實(shí)體查詢比較條件,通過SqlCondition設(shè)置 如果未設(shè)置條件,則按照正常相等來查詢 若設(shè)置則按照以下規(guī)則:等于: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設(shè)置 不處理:FieldFill.DEFAULT 插入時填充字段:FieldFill.INSERT 更新時填充字段:FieldFill.UPDATE 插入或新增時填充字段:FieldFill.INSERT_UPDATE

      關(guān)于其他的屬性,我不太推薦使用,用得越多,越容易蒙圈。可以通過wapper查詢?nèi)ピO(shè)置。

    2.2 CRUD

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

    2.2.1 Service層CRUD

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

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

    同時要在我們的接口實(shí)現(xiàn)impl當(dāng)中繼承ServiceImpl,實(shí)現(xiàn)自己的接口:

    importcom.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    importcom.wjbgn.user.entity.UserDO;
    importcom.wjbgn.user.mapper.UserMapper;
    importcom.wjbgn.user.service.IUserService;
    
    /**
    *@description:用戶接口實(shí)現(xiàn)
    *@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 邏輯刪除配置

    很多情況下我們的系統(tǒng)都需要邏輯刪除,方便恢復(fù)查找誤刪除的數(shù)據(jù)。

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

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

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

    或者通過注解@TableLogic

    @TableLogic
    privateIntegerisDelete;
    

    2.5 通用枚舉配置

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

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

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

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

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

    下面看看如何實(shí)現(xiàn)這個功能:

    • 性別枚舉,實(shí)現(xiàn)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注解為了解決枚舉類返回前端只展示構(gòu)造器名稱的問題。

    • 實(shí)體類性別字段
    @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:
    #支持統(tǒng)配符*或者;分割
    typeEnumsPackage:com.wjbgn.*.enums
    
    • 定義配置文件
    @Bean
    publicMybatisPlusPropertiesCustomizermybatisPlusPropertiesCustomizer(){
    returnproperties->{
    GlobalConfigglobalConfig=properties.getGlobalConfig();
    globalConfig.setBanner(false);
    MybatisConfigurationconfiguration=newMybatisConfiguration();
    configuration.setDefaultEnumTypeHandler(MybatisEnumTypeHandler.class);
    properties.setConfiguration(configuration);
    };
    }
    
    • 序列化枚舉值為數(shù)據(jù)庫值,以下我是使用的fastjson,全局(添加在前面的配置文件中):

    Bean
    publicMybatisPlusPropertiesCustomizermybatisPlusPropertiesCustomizer(){
    //序列化枚舉值為數(shù)據(jù)庫存儲值
    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 自動填充

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

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

    但是這個直接是不能使用的,需要通過實(shí)現(xiàn)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 多數(shù)據(jù)源

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

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

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

    • @DS注解

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

    @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;
    }
    }
    }
    

    三、測試

    經(jīng)過上面的配置,下面開始進(jìn)入測試驗(yàn)證階段。

    建立一張表:

    CREATETABLE`user`(
    `id`int(11)NOTNULLAUTO_INCREMENT,
    `nickname`varchar(255)NOTNULLCOMMENT'昵稱',
    `sex`tinyint(1)NOTNULLCOMMENT'性別,1男2女',
    `create_time`datetimeNOTNULLCOMMENT'創(chuàng)建時間',
    `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()));
    }
    
    }
    

    記過上面的接口驗(yàn)證,功能沒有問題,集成成功。

    項目源碼地址

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

    審核編輯:湯梓紅


    聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
    • spring
      +關(guān)注

      關(guān)注

      0

      文章

      340

      瀏覽量

      14343
    • mybatis
      +關(guān)注

      關(guān)注

      0

      文章

      60

      瀏覽量

      6713

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

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

    收藏 人收藏

      評論

      相關(guān)推薦

      mybatis plus的常規(guī)用法

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

      #硬聲創(chuàng)作季 Java項目實(shí)戰(zhàn):MyBatis-Plus簡介

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

      #硬聲創(chuàng)作季 Java項目實(shí)戰(zhàn):Mybatis-plus的樂觀鎖方案

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

      一篇讓你熟練掌握 MyBatis-Plus

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

      Mybatis-Plus Mybatis增強(qiáng)工具包

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

      Fluent Mybatis、原生MybatisMybatis Plus對比

      mapper中再組裝參數(shù)。那對比原生Mybatis, Mybatis Plus或者其他框架,F(xiàn)luentMybatis提供了哪些便利呢?
      的頭像 發(fā)表于 09-15 15:41 ?1434次閱讀

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

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

      MyBatis-Plus為什么不支持聯(lián)表

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

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

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

      如何調(diào)優(yōu)MyBatis 25倍性能

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

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

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

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

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

      Mybatis-plus批量插入太慢?

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

      MyBatis Plus如何簡化開發(fā)

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

      mybatis和mybatisplus的區(qū)別

      MyBatisMyBatis Plus是兩個非常受歡迎的Java持久層框架。這兩個框架在設(shè)計和功能上有一些區(qū)別,下面我將詳細(xì)介紹它們之間的差異以及各自的特點(diǎn)。 設(shè)計理念與目標(biāo): MyBati
      的頭像 發(fā)表于 12-03 11:53 ?2561次閱讀
      主站蜘蛛池模板: 热久久最新视频| 亚洲国产精品久久久久婷婷老年| 伊人久久大香线焦在观看| 欧美一区二区三区在线观看| 成年片免费网址网站| 成在线人永久免费播放视频| 白嫩少妇激情无码| 久久精品视频国产| 免费福利在线播放| xxxxxx性| 国产在线视频你懂的| 国产在线精品香蕉综合网一区| 九九热re| 国产午夜人做人视频羞羞| 日韩免费毛片全部不收费| videsgratis欧美另类| 1000rt人体1000欧美| 色偷偷免费| 午夜香蕉网| 乱子伦xxxx厨房| 激情丁香婷婷| 国产chinesetube| 四虎永久免费最新在线| 18女人毛片| 狠狠干夜夜草| 一级特黄色毛片免费看| 韩国成人毛片aaa黄| а中文在线天堂| 色老头永久免费网站| 午夜不卡影院| 成人国产精品一级毛片了| 国模吧在线视频| 精品免费视在线观看| 人与牲动交xxxxbbbb高清| 日本特级黄色录像| 欲色视频| 亚洲好骚综合| 中文字幕首页| 永久观看| 99久久免费中文字幕精品| 国产黄色高清视频|