當我們使用MyBatis時,往往會有以下操作:
1,添加@MapperScan註解,或者在配置文件中使用<mybatis:scan>進行設置。這一步設置的是需要掃描的Mapper文件路徑,比如這樣:
@Configuration
@EnableTransactionManagement
@MapperScan({"com.macro.mall.mapper","com.macro.mall.dao"})
public class MyBatisConfig {
}
2,編寫Mapper.java接口文件,比如:
public interface OmsOrderDao {
List<OmsOrder> getList(@Param("queryParam") OmsOrderQueryParam queryParam);
int delivery(@Param("list") List<OmsOrderDeliveryParam> deliveryParamList);
OmsOrderDetail getDetail(@Param("id") Long id);
}
Mapper接口類可以不用註解,也可以不用寫實現類。
在ServiceImpl或者其他什麼類中,添加Mapper接口作爲屬性,並且使用@Autowired註解,比如:
@Service
public class OmsOrderServiceImpl implements OmsOrderService {
@Autowired
private OmsOrderDao orderDao;
...
}
3,在配置文件中指定Mapper.xml文件的路徑,比如在SpringBoot的yml格式配置文件中可以這麼寫:
mybatis:
mapper-locations:
- classpath:dao/*.xml
- classpath*:com/**/mapper/*.xml
4,編寫Mapper.xml文件,與Mapper.java文件對應,比如在xml文件中使用以下寫法:
<mapper namespace="com.macro.mall.dao.OmsOrderDao">
就可以關聯到具體的Mapper接口。
另外,我們可以在Mapper.java中的方法上使用註解並編寫動態sql,實現和Mapper.xml文件一樣的效果。
5,調用Mapper接口。
使用起來並不難,下面一系列文章主要關注的就是,我們做的這些諸多配置和操作,從Spring和MyBatis源碼的角度,是如何生效的。
因此,接下來的源碼分析將按照SpringIOC的加載順序,分析以下幾個關鍵點的部分源碼:
1,@MapperScan註解生效,根據配置路徑掃描Mapper接口文件,創建BeanDefinition。
2,@Autowired註解生效,創建Mapper接口代理,注入sqlSessionFactory和sqlSessionTemplate。
3,注入sqlSessionFactory時,根據配置路徑掃描xml文件,和Mapper接口代理綁定。
4,mybatis配置項的加載過程
5,調用Mapper接口時,使用接口代理完成數據庫查詢等操作。