国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用Mybatis-Plus問(wèn)題解答

這篇具有很好參考價(jià)值的文章主要介紹了使用Mybatis-Plus問(wèn)題解答。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

我們使用一個(gè)新的框架難免會(huì)遇到各種問(wèn)題,當(dāng)然使用這款國(guó)產(chǎn)的優(yōu)秀的Mybatis-Plus框架也不例外,下面我就給大家列舉一下使用Mybatis-Plus可能遇到的一些問(wèn)題,并做一下一一的解答。

1:如何排除非表的字段(這個(gè)問(wèn)題一定要注意,我們Java中寫(xiě)的Entity類(lèi)的屬性是和表的字段一一對(duì)應(yīng)的,如果屬性在數(shù)據(jù)庫(kù)中沒(méi)有對(duì)應(yīng)字段程序就會(huì)出錯(cuò)。當(dāng)然表中可以有多的字段)。

使用一些三種方法都可以:(開(kāi)發(fā)中我們經(jīng)常使用第三者方式)

使用 transient 修飾:?

private?transient?String?noColumn;?

使用 static 修飾 :

private?static?String?noColumn;?

使用 TableField 注解:

@TableField(exist=false)

private?String?noColumn;

2:出現(xiàn) Invalid bound statement (not found)?異常?(這種一般是寫(xiě)的mapper接口找不到對(duì)應(yīng)的xml中的mapper中寫(xiě)的sql)

不要懷疑,正視自己,這個(gè)異??隙ㄊ悄悴迦氲淖藙?shì)不對(duì)……

  • 檢查是不是引入 jar 沖突

  • 檢查 Mapper.java 的掃描路徑

方法一:在 Configuration 類(lèi)上使用注解 MapperScan

@Configuration
@MapperScan("com.yourpackage.*.mapper")
public class YourConfigClass{
  ...
}

方法二:在Configuration類(lèi)里面,配置MapperScannerConfigurer

@Bean
public MapperScannerConfigurer mapperScannerConfigurer(){
    MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
    //可以通過(guò)環(huán)境變量獲取你的mapper路徑,這樣mapper掃描可以通過(guò)配置文件配置了
    scannerConfigurer.setBasePackage("com.yourpackage.*.mapper");
    return scannerConfigurer;
}
  • 檢查是否指定了主鍵?如未指定,則會(huì)導(dǎo)致 selectById 相關(guān) ID 無(wú)法操作,請(qǐng)用注解?@TableId 注解表 ID 主鍵。當(dāng)然?@TableId 注解可以沒(méi)有!但是你的主鍵必須叫 id(忽略大小寫(xiě))

  • SqlSessionFactory不要使用原生的,請(qǐng)使用MybatisSqlSessionFactory

  • 檢查是否自定義了SqlInjector,是否復(fù)寫(xiě)了getMethodList()方法,該方法里是否注入了你需要的方法(可參考DefaultSqlInjector)

  • IDEA 默認(rèn)的 build 步驟可能會(huì)引起 mapper 文件無(wú)法正常編譯到對(duì)應(yīng)的 resources 文件夾中,請(qǐng)檢查 build 之后相關(guān)資源文件夾是否有對(duì)應(yīng)的 xml 文件,如果沒(méi)有,請(qǐng)調(diào)整 IDEA 的 build 設(shè)置,推薦調(diào)整為 Maven 或 Gradle 的 build。

3:自定義 SQL 無(wú)法執(zhí)行

問(wèn)題描述:指在 XML 中里面自定義 SQL,卻無(wú)法調(diào)用。本功能同 MyBatis 一樣需要配置 XML 掃描路徑:

Spring MVC 配置

<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="typeAliasesPackage" value="xxx.entity" />
    <property name="mapperLocations" value="classpath*:/mybatis/*/*.xml"/>
    ...
</bean>

Spring Boot 配置

mybatis-plus:
  mapper-locations: classpath*:/mapper/**/*.xml

對(duì)于IDEA系列編輯器,XML 文件是不能放在 java 文件夾中的,IDEA 默認(rèn)不會(huì)編譯源碼文件夾中的 XML 文件,可以參照以下方式解決:

1:將配置文件放在 resource 文件夾中

2:對(duì)于 Maven 項(xiàng)目,可指定 POM 文件的 resource

<build>
  <resources>
      <resource>
          <!-- xml放在java目錄下-->
          <directory>src/main/java</directory>
          <includes>
              <include>**/*.xml</include>
          </includes>
      </resource>
      <!--指定資源的位置(xml放在resources下,可以不用指定)-->
      <resource>
          <directory>src/main/resources</directory>
      </resource>
  </resources>
</build>

提示?注意!

Maven 多模塊項(xiàng)目的掃描路徑需以 classpath*:?開(kāi)頭?(即加載多個(gè) jar 包下的 XML 文件)

4:關(guān)于 Long 型主鍵填充不生效的問(wèn)題

檢查是不是用了long而不是Long!

提示?

long類(lèi)型默認(rèn)值為?0,而?MP?只會(huì)判斷是否為?null

JavaScript 無(wú)法處理 Java 的長(zhǎng)整型 Long 導(dǎo)致精度丟失,具體表現(xiàn)為主鍵最后兩位永遠(yuǎn)為 0,解決思路:Long 轉(zhuǎn)為 String 返回。

FastJson 處理方式

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    FastJsonHttpMessageConverter fastJsonConverter = new FastJsonHttpMessageConverter();
    FastJsonConfig fjc = new FastJsonConfig();
    // 配置序列化策略
    fjc.setSerializerFeatures(SerializerFeature.BrowserCompatible);
    fastJsonConverter.setFastJsonConfig(fjc);
    converters.add(fastJsonConverter);
}

JackJson 處理方式

方式一

/ 注解
處理,這里可以配置公共 baseEntity 處理
@JsonSerialize(using=ToStringSerializer.class)
public long getId() {
    return id;
}

方式二

/ 全局配置序列化返回 JSON 處理
final ObjectMapper objectMapper = new ObjectMapper();
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);

5:插入或更新的字段有 空字符串 或者 null

FieldStrategy 有以下策略:

方式一:調(diào)整字段驗(yàn)證注解

根據(jù)具體情況,在需要更新的字段中調(diào)整驗(yàn)證注解,如驗(yàn)證非空:

@TableField(strategy=FieldStrategy.NOT_EMPTY)

方式二:使用 UpdateWrapper (3.x)

使用以下方法來(lái)進(jìn)行更新或插入操作:

//updateAllColumnById(entity) // 全部字段更新: 3.0已經(jīng)移除
mapper.update(
   new User().setName("mp").setAge(3),
   Wrappers.<User>lambdaUpdate()
           .set(User::getEmail, null) //把email設(shè)置成null
           .eq(User::getId, 2)
);
//也可以參考下面這種寫(xiě)法
mapper.update(
    null,
    Wrappers.<User>lambdaUpdate()
       .set(User::getAge, 3)
       .set(User::getName, "mp")
       .set(User::getEmail, null) //把email設(shè)置成null
       .eq(User::getId, 2)
);

6:字段類(lèi)型為 bit、tinyint(1)?時(shí)映射為 boolean 類(lèi)型

默認(rèn)mysql驅(qū)動(dòng)會(huì)把tinyint(1)字段映射為boolean: 0=false, 非0=true。MyBatis 是不會(huì)自動(dòng)處理該映射,如果不想把tinyint(1)映射為boolean類(lèi)型:

修改類(lèi)型tinyint(1)為tinyint(2)或者int。

需要修改請(qǐng)求連接添加參數(shù) tinyInt1isBit=false,如下:

jdbc:mysql://127.0.0.1:3306/mp?tinyInt1isBit=false

7:MP 如何查指定的幾個(gè)字段

EntityWrapper.sqlSelect 配置你想要查詢(xún)的字段

//2.x
EntityWrapper<H2User> ew = new EntityWrapper<>();
ew.setSqlSelect("test_id as id, name, age");//只查詢(xún)3個(gè)字段
List<H2User> list = userService.selectList(ew);
for(H2User u:list){
    Assert.assertNotNull(u.getId());
    Assert.assertNotNull(u.getName());
    Assert.assertNull(u.getPrice()); // 這個(gè)字段沒(méi)有查詢(xún)出來(lái)
}

//3.x
mapper.selectList(
    Wrappers.<User>lambdaQuery()
    .select(User::getId, User::getName)
);
//或者使用QueryWrapper
mapper.selectList(
    new QueryWrapper<User>()
    .select("id","name")
);

8:Cause: org.apache.ibatis.type.TypeException:Error setting null for parameter #1 with JdbcType OTHER

配置 jdbcTypeForNull=NULL Spring Bean 配置方式:

MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
configuration.setJdbcTypeForNull(JdbcType.NULL);
configuration.setMapUnderscoreToCamelCase(true);//開(kāi)啟下劃線(xiàn)轉(zhuǎn)駝峰
sqlSessionFactory.setConfiguration(configuration);

yml?配置

mybatis-plus:
  configuration:
    jdbc-type-for-null: 'null'

9:通用 insertBatch 為什么放在 service 層處理

SQL 長(zhǎng)度有限制海量數(shù)據(jù)量單條 SQL 無(wú)法執(zhí)行,就算可執(zhí)行也容易引起內(nèi)存泄露 JDBC 連接超時(shí)等

不同數(shù)據(jù)庫(kù)對(duì)于單條 SQL 批量語(yǔ)法不一樣不利于通用

目前的解決方案:循環(huán)預(yù)處理批量提交,雖然性能比單 SQL 慢但是可以解決以上問(wèn)題。

10:?jiǎn)?dòng) mybatis 本身的 log 日志

# 方式一
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 

# 方式二 application.yml 中增加配置,指定 mapper 文件所在的包
logging:
  level:
    com.baomidou.example.mapper: debug

這些問(wèn)題都是摘自Mybatis-Plus的官方網(wǎng)站地址如下:

https://www.baomidou.com/pages/f84a74/

如果想看更多的問(wèn)題請(qǐng)?jiān)L問(wèn)上面的網(wǎng)址,當(dāng)然更多的問(wèn)題也可以訪問(wèn)Mybatis-Plus的github地址那里面有很多人提的issue。很多開(kāi)發(fā)中遇到的問(wèn)題都可以在issue里面找到答案,我也是常常去看那里的issue從里面獲取答案獲取靈感。歡迎大家關(guān)注我的微信公眾號(hào),繼續(xù)為大家推出好的文章。

使用Mybatis-Plus問(wèn)題解答

晚霞和微風(fēng)是真的很美。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-473005.html

到了這里,關(guān)于使用Mybatis-Plus問(wèn)題解答的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Proteus使用STM32F103系列芯片仿真ADC電壓總是為0問(wèn)題解答

    Proteus使用STM32F103系列芯片仿真ADC電壓總是為0問(wèn)題解答

    STM32F103芯片有一組ADC參考電壓端口 ?對(duì)應(yīng)到Proteus中,發(fā)現(xiàn)原理圖上并沒(méi)有但是在“配置供電網(wǎng)”中存在 可以看出,VSSA與VDDA同為3.3V,這就導(dǎo)致采集到的電壓沒(méi)有0電位參考,所以需要將 VSSA 轉(zhuǎn)移到 GND 組 ? 此時(shí)再允許正確的ADC程序就可以采集到正確的電壓了 ? ? ?

    2024年02月13日
    瀏覽(20)
  • MyBatis-Plus條件查詢(xún)問(wèn)題解決

    MyBatis-Plus條件查詢(xún)問(wèn)題解決

    問(wèn)題描述 系統(tǒng)中有用戶(hù)注冊(cè)的功能,但是會(huì)出現(xiàn)重復(fù)注冊(cè)的現(xiàn)象,代碼中有做過(guò)重復(fù)校驗(yàn),但是沒(méi)有生效。 問(wèn)題解決 首先排查數(shù)據(jù)生成時(shí)間點(diǎn)不同,相差時(shí)間有長(zhǎng)有短,不是用戶(hù)同時(shí)多次點(diǎn)擊的原因,應(yīng)該是用戶(hù)這邊不同時(shí)間重復(fù)多次注冊(cè)導(dǎo)致的,但是程序中防止重復(fù)校驗(yàn)

    2024年02月16日
    瀏覽(26)
  • unity中級(jí)面試問(wèn)題解答

    解釋Unity3D的工作流程是什么? Unity3D的工作流程分為以下幾個(gè)步驟: 導(dǎo)入資源 :將模型、紋理、音頻等資產(chǎn)導(dǎo)入到項(xiàng)目中。 場(chǎng)景設(shè)計(jì) :在場(chǎng)景中放置對(duì)象、調(diào)整攝像機(jī)和燈光等。 編寫(xiě)腳本 :使用C#或UnityScript編寫(xiě)游戲邏輯腳本。 構(gòu)建和部署 :將游戲構(gòu)建為可運(yùn)行的應(yīng)用程

    2024年01月16日
    瀏覽(20)
  • Internet Explorer (IE) 模式疑難解答和常見(jiàn)問(wèn)題解答

    Internet Explorer (IE) 模式疑難解答和常見(jiàn)問(wèn)題解答

    ?備注 11 Internet Explorer 11 桌面應(yīng)用程序?qū)⒂?2022 年 6 月 15 日停用并停用支持。 To see the list of what\\\'s in scope, see the?Internet Explorer desktop app retirement FAQ. 現(xiàn)在使用的 IE11 應(yīng)用和網(wǎng)站可以在 Microsoft Edge 的 Internet Explorer 模式下打開(kāi)。 若要了解更多信息,請(qǐng)參閱 Internet Explorer?on Wi

    2024年02月06日
    瀏覽(119)
  • mybatis-plus 查詢(xún)數(shù)據(jù)為null問(wèn)題解決

    mybatis-plus 查詢(xún)數(shù)據(jù)為null問(wèn)題解決

    首先數(shù)據(jù)庫(kù)能查詢(xún)到數(shù)據(jù), 不過(guò)查詢(xún)到的字段都是 null 值, 因?yàn)闃I(yè)務(wù)上就用到這3個(gè)字段 代碼中使用 mybatis-plus 精確字段查詢(xún), select方法可以精確查詢(xún)字段 之后debug看到 orderMain 對(duì)象為 null, 因?yàn)?這 3 個(gè)字段在數(shù)據(jù)庫(kù)表中都是 null 解決方式是把 select方法需要查詢(xún)一個(gè)數(shù)據(jù)庫(kù)中不為

    2024年02月11日
    瀏覽(24)
  • 【問(wèn)題解答】用數(shù)組模擬單鏈表

    【問(wèn)題解答】用數(shù)組模擬單鏈表

    我這里是根據(jù)我所遇到和參考大家的問(wèn)題解答所總結(jié)的: 非常推薦大家打卡 y總的算法基礎(chǔ)課 : 活動(dòng) - AcWing 這里的問(wèn)題也是基于他講的單鏈表所總結(jié)的。 題目: 實(shí)現(xiàn)一個(gè)單鏈表,鏈表初始為空,支持三種操作: (1) 向鏈表頭插入一個(gè)數(shù); (2) 刪除第k個(gè)插入的數(shù)后面的數(shù);

    2024年01月24日
    瀏覽(21)
  • OpenStack云計(jì)算相關(guān)問(wèn)題解答

    OpenStack云計(jì)算相關(guān)問(wèn)題解答

    在 OpenStack 環(huán)境中,計(jì)算服務(wù)通過(guò) API 服務(wù)器來(lái)控制虛擬機(jī)管理程序,它具備一個(gè)抽象層,可以在部署時(shí)選擇一種虛擬化技術(shù)來(lái)創(chuàng)建虛擬機(jī),向用戶(hù)提供云服務(wù)。 KVM 基于內(nèi)核的虛擬機(jī)(Kernel-based Virtual Machine,KVM)是通用的開(kāi)放虛擬化技術(shù),也是OpenStack用戶(hù)使用較多的虛擬化技

    2024年03月21日
    瀏覽(16)
  • 【MyBatis-Plus】MyBatis進(jìn)階使用

    【MyBatis-Plus】MyBatis進(jìn)階使用

    目錄 一、MyBatis-Plus簡(jiǎn)介 1.1 介紹 1.2 優(yōu)點(diǎn) 1.3 結(jié)構(gòu) 二、MyBatis-Plus基本使用 2.1 配置 2.2 代碼生成 2.3 CRUD接口測(cè)試 三、MyBatis-Plus策略詳解 3.1 主鍵生成策略 3.2 雪花ID生成器 3.3 字段自動(dòng)填充策略 3.4 邏輯刪除 四、MyBatis-Plus插件使用 4.1?樂(lè)觀鎖插件 4.1.1?什么是樂(lè)觀鎖和悲觀鎖? 4.

    2024年02月04日
    瀏覽(21)
  • Mybatis-plus 使用

    Mybatis-plus 使用

    ? ? ? ? mybatis-plus提供了 ·@TableName·, @TableId, @TableField,?@TableLogic 四種注解,其含義分別為: ?@TableName ? ? ? ? ?@TableName(\\\"SPF_Require_Vehicle\\\")? ? 用于聲明當(dāng)前class所對(duì)應(yīng)數(shù)據(jù)庫(kù)中的表,如果class的名字和表的名字完全相同,則不需要添加該注解,如果不一樣,則需要用該注解進(jìn)

    2024年02月07日
    瀏覽(20)
  • 【lesson59】線(xiàn)程池問(wèn)題解答和讀者寫(xiě)者問(wèn)題

    【lesson59】線(xiàn)程池問(wèn)題解答和讀者寫(xiě)者問(wèn)題

    單例模式是一種 “經(jīng)典的, 常用的, ??嫉摹?設(shè)計(jì)模式. IT行業(yè)這么火, 涌入的人很多. 俗話(huà)說(shuō)林子大了啥鳥(niǎo)都有. 大佬和菜雞們兩極分化的越來(lái)越嚴(yán)重. 為了讓我們這些菜雞們不太拖大佬的后腿, 于是大佬們 針對(duì)一些經(jīng)典的常見(jiàn)的場(chǎng)景, 給定了一些對(duì)應(yīng)的解決方案 , 這個(gè)就是設(shè)

    2024年02月21日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包