【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
#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配置文件
<!-- 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等
@Service
public class CommonServiceImpl implements CommonService {
@Autowired
private SysInfoMapper sysInfoMapper;
@Autowired
private LocationMapper locationMapper;
3.2SQL解析
当api接口层收到调用请求时,会传入需要执行的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>在参数映射存在的时候通过参数构造方法来实例化。
来源:oschina
链接:https://my.oschina.net/u/2312022/blog/757495