#1.mybatis簡介
mybatis是一個基於java的持久層框架,支持普通sql查詢/存儲過程/對象映射,它使用xml配置或者註解配置來作映射,將普通java對象映射到數據庫中。
#2.mybatis功能分層
2.1api接口層:xx.mapper,它提供給外部開發人員使用,開發人員經過使用這些api來操做數據庫。
2.2數據處理層:xx.mapping,它負責SQL查找/解析/執行等操做,以及返回結果映射處理。
2.3基礎支撐層:包括數據庫鏈接、事務管理、配置加載等。
#3.mybatis執行流程
3.1加載spring-mybatis配置文件java
<!-- sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath:com/readygo/missBang/mapper/*.xml" /> </bean> <!-- 自動掃描 將Mapper接口生成代理注入到Spring--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.readygo.missBang.mapper" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean>
詳解配置
1>加載配置文件時,會new一個SqlSessionFactory的實例,該實例有兩個屬性
1.dataSource:初始化數據庫配置信息
2.mapperLocations:初始化全部的xxMapper.xml(即上述提到的xx.mapping),完成預編譯,將結果存放到JDBC中的preparedStatement類中。
3.掃描全部的mybatis接口,即xxMapper.java,將接口注入到spring中,其實是初始化全部的接口,示例以下,如初始化SysInfoMapper等spring
@Service public class CommonServiceImpl implements CommonService { @Autowired private SysInfoMapper sysInfoMapper; @Autowired private LocationMapper locationMapper;
3.2SQL解析
當api接口層收到調用請求時,會傳入須要執行的SQL的方法與參數,示例sql
userMapper.selectCount(phoneNumber);
接口爲userMapper,傳入方法selectCount,參數phoneNumber。
mybatis會根據SQL的id去預編譯的存儲類(preparedStatement)的映射文件中去查找該id,找到了,傳入SQL參數,而後對整個SQL語句進行解析,解析成最終要執行的SQL語句。
3.3SQL執行
將SQL語句送進數據庫執行,返回執行結果。
3.4結果映射(resultMap/resultType) 執行完sql語句,mybatis會使用一個對象工廠(ObjectFactory)實例來處理結果映射。該對象工廠須要作的事情是實例化目標類,經過兩種方式實例化目標類:1>經過默認構造方法;2>在參數映射存在的時候經過參數構造方法來實例化。數據庫