Mybatis中@MapperScan和@Mapper註解,Spring中的@Repository註解

一、@Mapper和@MapperScan註解

使用 @Mapper,最終 Mybatis 會有一個攔截器,會自動的把 @Mapper 註解的接口生成動態代理類。這點可以在 MapperRegistry 類中的源代碼中查看。


Mybatis中@MapperScan和@Mapper註解,Spring中的@Repository註解

@Mapper 註解針對的是一個一個的接口,相當於是一個一個 Mapper.xml 文件。而一個接口一個接口的使用 @Mapper,太麻煩了,於是 @MapperScan 就應用而生了。@MapperScan 配置一個或多個包路徑,自動的掃描這些包路徑下的類,自動的為它們生成代理類。

Mybatis中@MapperScan和@Mapper註解,Spring中的@Repository註解


類似於如下的Mybatis Mapper配置:

Mybatis中@MapperScan和@Mapper註解,Spring中的@Repository註解


二、Spring與Mybatis 中的@Repository與@Mapper

@Mapper 是 Mybatis 的註解,和Spring沒有關係,@Repository是Spring的註解,用於聲明一個Bean。

1. Mybatis中的@Mapper註解

使用 Mybatis 有 XML 文件或者註解的兩種使用方式,如果是使用 XML 文件的方式,我們需要在配置文件中指定 XML 的位置,這裡只研究註解開發的方式。

在 Spring 程序中,Mybatis 需要找到對應的 mapper,在編譯的時候動態生成代理類,實現數據庫查詢功能,所以我們需要在接口上添加 @Mapper 註解。

@Mapper

public interface OrderDao {

...

}


2. Spring中的@Repository註解

@Repository用於聲明 dao 層的 bean,如果我們要真正地使用 @Repository 來進行開發,那是基於代碼的開發,簡單來說就是手寫 JDBC。

和@Service、@Controller一樣,我們將@Repository添加到對應的實現類上。

@Repositorypublic class OrderDaoImpl implements OrderDao{        @Override    public int insertOrder(){        JdbcTemplate template = new JdbcTemplate();        ...    }}

3. @Mapper、@Repository、@MapperScan註解

@Mapper 一定要有,否則 Mybatis 找不到 mapper。Mybatis中MapperScannerConfigurer 自動掃描將Mapper接口生成代理注入到Spring容器。

Mybatis中@MapperScan和@Mapper註解,Spring中的@Repository註解

@Repository 可有可無,可以消去依賴注入的報錯信息。

@MapperScan 可以替代 @Mapper。



分享到:


相關文章: