首先show 配置
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置druid连接池=============================== -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driverClass}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- SqlSessionFactory配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 加载mybatis核心配置文件 -->
<property name="configLocation" value="classpath:/jdbc/mybatis/SqlMapConfig.xml"/>
<property name="mapperLocations" value="classpath:service/mybatisdao/*.xml" />
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
</bean>
(当前方法会把配置读取创建一个sqlSessionFactoryBuilder,包括普通的配置和xxx.xml的配置)SqlSessionFactoryBean(buildSqlSessionFactory方法)-> SqlSessionFactoryBuilder(build方法)
上述过程中最复杂的过程还是buildSqlSessionFactory中的一些方法,有兴趣的可以自己看。其中包括了.xml如何转化为MappedStatement对象的操作。
接下来是curd的流程
(这里进行select操作,SqlSessionTemplate本身代理了一个DefaultSqlSessiondurian)SqlSessionTemplate(select方法) -> DefaultSqlSession(select) -> SimpleExecutor(父类的query方法)-> BaseExecutor (queryFromDatabase方法) -> SimpleExecutor(重写的doQuery方法) -> SimpleStatementHandler(query方法真正执行sql)
非常的复杂很显然,今天写的几篇是我这6天看源码的收获。离开舒适区的第一步。加油