SpringBoot詳解整合MyBatis過(guò)程中可能遇到的問(wèn)題
盡量不要用 jUnit 提供的單元測(cè)試
提一個(gè)要求盡量使用SpringBoot 提供的測(cè)試類進(jìn)行測(cè)試,能夠自動(dòng)掃描組件以及使用容器中的bean對(duì)象
還有如果有組件 中存在注入對(duì)象的話,那么必須在SpringBoot容器中取出 這個(gè)組件,進(jìn)而使用注入的對(duì)象的功能?。?!
今天有個(gè)錯(cuò)誤,花了很長(zhǎng)時(shí)間來(lái)解決,最后發(fā)現(xiàn)是一個(gè)很低級(jí)很基礎(chǔ)的錯(cuò)誤!
這是mapper接口,使用@mapper 相當(dāng)于將接口的代理對(duì)象注冊(cè)進(jìn)入bean中,但是上下文中找不到(其實(shí)是正常)
因?yàn)?@Mapper 這個(gè)注解是 Mybatis 提供的,而 @Autowried 注解是 Spring 提供的,IDEA能理解 Spring 的上下文,但是卻和 Mybatis 關(guān)聯(lián)不上。而且我們可以根據(jù) @Autowried 源碼看到,默認(rèn)情況下,@Autowried 要求依賴對(duì)象必須存在,那么此時(shí) IDEA 只能給個(gè)紅色警告了。
package com.bit.mapper;
import com.bit.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface UserMapper {
User selectById(@Param("userid") Integer id);
}這是與mapper接口對(duì)應(yīng)的xml文件,同樣也沒(méi)有問(wèn)題
<?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.bit.mapper.UserMapper">
<select id="selectById" resultType="com.bit.pojo.User">
select * from users where id = #{userid}
</select>
</mapper>將java目錄下的xml文件加入resource資源中,在build 標(biāo)簽中嵌套,同樣沒(méi)有問(wèn)題
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
然后我們寫(xiě)service層,寫(xiě)了一個(gè)UserService接口,有些了一個(gè)UserServiceImpl 接口的實(shí)現(xiàn)類
在這個(gè)實(shí)現(xiàn)類中,注入U(xiǎn)serMapper 一直提示無(wú)法注入,我一直認(rèn)為有問(wèn)題(但是最后發(fā)現(xiàn)沒(méi)問(wèn)題)

把service實(shí)現(xiàn)類寫(xiě)完了,也沒(méi)問(wèn)題
package com.bit.service;
import com.bit.mapper.UserMapper;
import com.bit.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService{
@Autowired
private UserMapper userMapper;
@Override
public User queryById(Integer id) {
System.out.println("進(jìn)入了service");
return userMapper.selectById(id);
}
}然后我直接去測(cè)試了,我測(cè)試的呢?
實(shí)例化了UserService,new了一個(gè)對(duì)象,然后直接調(diào)用方法,看是否能夠調(diào)用UserMapper查詢到數(shù)據(jù)庫(kù)。然后就不斷的包 空指針異常的錯(cuò)誤
@SpringBootTest
class BitApplicationTests {
@Test
void contextLoads() {
UserService userService = new UserServiceImpl();
userService.queryById(13);
System.out.println(userService);
System.out.println(userService.queryById(15));
System.out.println(userService.queryById(13));
}
}
我一度以為是mapper接口沒(méi)有注入到UserServcie中,導(dǎo)致調(diào)用UserServcie的方法 就是調(diào)用 UserMapper的方法是空的,以為是Mapper接口的問(wèn)題,各種搜索怎么解決,經(jīng)過(guò)幾個(gè)小時(shí)之后,在他人的博客中找到了答案
我們的UserMapper 注入到了 UserServiceImpl ,我們不能直接使用 UserServcieIml, 如果在其他的類中進(jìn)行使用其功能,必須將這個(gè)類注入到 當(dāng)前類中,從容器中拿到這個(gè)UserService,才能正確的進(jìn)行調(diào)用,不會(huì)發(fā)生空指針異常,我一直沒(méi)有發(fā)現(xiàn),這是也該非常低級(jí)的錯(cuò)誤。
正確做法: 先裝配到當(dāng)前對(duì)象中,再?gòu)娜萜髦心玫絙ean進(jìn)行使用
@SpringBootTest
class BitApplicationTests {
@Autowired
private UserService userService;
@Test
void contextLoads() {
System.out.println(userService.queryById(15));
System.out.println(userService.queryById(13));
}
}到此這篇關(guān)于SpringBoot詳解整合MyBatis過(guò)程中可能遇到的問(wèn)題的文章就介紹到這了,更多相關(guān)SpringBoot MyBatis內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java8中的lambda表達(dá)式,看這篇絕對(duì)夠
這篇文章主要介紹了java8中的lambda表達(dá)式,看這篇絕對(duì)夠!具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
微服務(wù)實(shí)戰(zhàn)之怎樣提升springboot服務(wù)吞吐量
這篇文章主要介紹了微服務(wù)實(shí)戰(zhàn)之怎樣提升springboot服務(wù)吞吐量方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
詳解Java中finally和return的執(zhí)行順序
try-catch-finally是一種針對(duì)程序運(yùn)行時(shí)出錯(cuò)的響應(yīng)手段,對(duì)于一些可以預(yù)料到的出錯(cuò)類型,在發(fā)生時(shí)對(duì)其進(jìn)行報(bào)告和補(bǔ)救,這篇文章主要介紹了Java中finally和return的執(zhí)行順序,需要的朋友可以參考下2024-01-01
SpringBoot+Vue實(shí)現(xiàn)動(dòng)態(tài)菜單的思路梳理
這篇文章主要為大家詳細(xì)介紹了利用SpringBoot+Vue實(shí)現(xiàn)動(dòng)態(tài)菜單的思路梳理,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下2022-07-07
Java8接口默認(rèn)靜態(tài)方法及重復(fù)注解原理解析
這篇文章主要介紹了Java8接口默認(rèn)靜態(tài)方法及重復(fù)注解原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04

