@Mapper註解的使用
One
在用idea寫一個實現類時引用了mapper類的來呼叫dao層的處理,使用@Autowired註解時被標紅線,找不到bean。
解決辦法:在mapper加@mapper或者@repository註解。
這兩種註解的區別在於:
1、使用@mapper後,不需要在spring配置中設定掃描地址,通過mapper.xml裡面的namespace屬性對應相關的mapper類,spring將動態的生成Bean後注入到ServiceImpl中。
2、@repository則需要在Spring中配置掃描包地址,然後生成dao層的bean,之後被注入到ServiceImpl中
TWO
前言:
從mybatis3.4.0開始加入了@Mapper註解,目的就是為了不再寫mapper對映檔案(那個xml寫的是真的蛋疼。。。)。很噁心的一個事實是原始碼中並沒有對於這個註解的詳細解釋
現在我們通過一個簡易的maven專案去了解@Mapper註解的使用方式
完整專案請訪問我的github專案地址下載
- 構建一個maven的web專案,目錄結構如下:
- 匯入相應的依賴
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
\3. 上程式碼
//UserDAO
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import entity.User;
/**
* 新增了@Mapper註解之後這個介面在編譯時會生成相應的實現類
*
* 需要注意的是:這個介面中不可以定義同名的方法,因為會生成相同的id
* 也就是說這個介面是不支援過載的
*/
@Mapper
public interface UserDAO {
@Select("select * from user where name = #{name}")
public User find(String name);
@Select("select * from user where name = #{name} and pwd = #{pwd}")
/**
* 對於多個引數來說,每個引數之前都要加上@Param註解,
* 要不然會找不到對應的引數進而報錯
*/
public User login(@Param("name")String name, @Param("pwd")String pwd);
}
測試類程式碼
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import dao.UserDAO;
import entity.User;
public class TestCase {
@Test
public void testMapper() {
ApplicationContext ac = new ClassPathXmlApplicationContext("spring-mybatis.xml");
UserDAO dao = ac.getBean(UserDAO.class);
User u1 = dao.find("hehe");
User u2 = dao.login("hehe", "123");
System.out.println(u1.getName().equals(u2.getName()));
}
}
測試結果:
問題
我發現,Mapper註解可寫可不寫啊,你這裡不寫也不會報錯,我下載了你的專案試過了,請問這是為什麼 ?????
在SSM專案裡面,因為在你的配置檔案中注入了MapperScannerConfigurer(目的是將你的Dao變成bean),所以 不用寫@Mapper註解,但是Springboot專案中,假如你沒有寫@Mapper註解在你的Dao介面上,那麼注入dao介面是會失敗的,@Mapper就是告訴spring這是你指定的mapper
相關文章
- 《手寫Mybatis》第4章:Mapper XML的解析和註冊使用MyBatisAPPXML
- 註解@PropertySource的使用
- Java註解的使用Java
- @responseBody註解的使用
- @ResponseBody註解和@RequestBody註解使用
- Spring的@PropertySource註解使用Spring
- java中的註解使用Java
- 應該是最好的eggnog-mapper功能註釋教程APP
- Mybatis是如何將Mapper介面註冊到Spring IoC的MyBatisAPPSpring
- Java註解解析-搭建自己的註解處理器(CLASS註解使用篇)Java
- 使用 @SpringBootApplication 註解Spring BootAPP
- @GrpcServise 註解的作用和使用RPC
- 如何使用JPA的@Formula註解?ORM
- Spring管理的@Configuration註解使用Spring
- Spring MVC 常用註解的使用SpringMVC
- Spring中@Import註解的使用SpringImport
- Java註解與反射的使用Java反射
- springBoot自定義註解的使用Spring Boot
- myBatis——註解,#{}與${},resultMap的使用MyBatis
- mybatis-plus原始碼解析(二)----基於@MapperScan註解掃描載入MapperMyBatis原始碼APP
- 解決mapper重名問題APP
- mybatis中@Mapper使用介紹MyBatisAPP
- 註解@PropertySource使用 springbootSpring Boot
- Spring(使用註解配置)Spring
- Typescript註解使用案例TypeScript
- 使用註解開發
- Java 如何優雅的使用註解Java
- AspectJ 使用的一些註解
- Spring的@Qualifier註解使用說明Spring
- 瞭解Linux系統中的Device Mapper機制:使用者空間LinuxdevAPP
- 【肥朝】圖解原始碼 | MyBatis的Mapper原理圖解原始碼MyBatisAPP
- 03-Spring IOC容器的基本使用(註解的使用)Spring
- @NoArgsConstructor、@Getter、@Setter註解及Lombok的使用StructLombok
- SpringBoot dubbo 的簡單使用註解版本Spring Boot
- spring boot使用註解的方式整合mybaitsSpring BootAI
- Swagger3註解使用Swagger
- 【Spring註解驅動開發】使用@Scope註解設定元件的作用域Spring元件
- Java中的註解-自定義註解Java