一、@Mapper和@MapperScan註解
使用 @Mapper,最終 Mybatis 會有一個攔截器,會自動的把 @Mapper 註解的接口生成動態代理類。這點可以在 MapperRegistry 類中的源代碼中查看。
@Mapper 註解針對的是一個一個的接口,相當於是一個一個 Mapper.xml 文件。而一個接口一個接口的使用 @Mapper,太麻煩了,於是 @MapperScan 就應用而生了。@MapperScan 配置一個或多個包路徑,自動的掃描這些包路徑下的類,自動的為它們生成代理類。
類似於如下的Mybatis Mapper配置:
二、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容器。
@Repository 可有可無,可以消去依賴注入的報錯信息。
@MapperScan 可以替代 @Mapper。
閱讀更多 軟件架構 的文章