写点什么

理解 MyBatis 是如何在 Spring 容器中初始化的,java 上传视频

用户头像
极客good
关注
发布于: 刚刚

<artifactId>spring-context-support</artifactId>


<version>5.2.0.RELEASE</version>


</dependency>


<dependency>


<groupId>org.springframework</groupId>


<artifactId>spring-jdbc</artifactId>


<version>5.2.0.RELEASE</version>


</dependency>


<dependency>


<groupId>org.springframework</groupId>


<artifactId>spring-tx</artifactId>


<version>5.2.0.RELEASE</version>


</dependency>


<dependency>


<groupId>org.apache.commons</groupId>


<artifactId>commons-dbcp2</artifactId>


<version>2.7.0</version>


</dependency>


<dependency>


<groupId>com.h2database</groupId>


<artifactId>h2</artifactId>


<version>1.4.199</version>


</dependency>


本文重在演示 MyBatis 的初始化过程,所以没有复杂的 SQL,数据库用的是嵌入式数据库 h2。


然后我们在?com.hyd.mybatis3test?包下面创建一个?SpringMyBatisApplication?类,代码在前面给过了。


对应的 DataSource 初始化实现如下:


@Bean


public DataSource dataSource() {


BasicDataSource dataSource = new BasicDataSource();


dataSource.setDriverClassName("org.h2.Driver");


dataSource.setUrl("jdbc:h2:mem:test");


return dataSource;


}


[](


)2. SqlSessionFactoryBean 初始化


=================================================================================================


SqlSessionFactoryBean 是对 SqlSessionFactory 初始化过程的封装,Spring 会?在适当的时候执行这个初始化过程,得到最终的 SqlSessionFactory 对象。


SqlSessionFactoryBean 的创建过程如下(注意方法签名在前面的基础上有变动):


@Bean


public SqlSessionFactoryBean sqlSessionFactory(


DataSource dataSource,


ResourcePatternResolver resolver


) throws Exception {


SqlSessionFactoryBean bean = new SqlSessionFactoryBean();


bean.setDataSource(dataSource);


bean.setMapperLocations(resolver.getResources("classpath*:mappers/*.xml"));


return bean;


}


其中:


  • 第一个参数 dataSource 就是前面生成的数据源对象;

  • 第二个参数 resolver 是 Spring 自动提供的,用于搜索指定路径下的所有 xml 文件。本文不会包含 xml 文件,所以这个配置是无效的,这行可以不写,不过写了也不影响程序运行。


[](


)3. MapperScannerConfigurer 初始化


====================


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


===============================================================================


MapperScannerConfigurer 的职责是在指定路径下搜索所有的 Mapper 接口类(参考它的?postProcessBeanDefinitionRegistry()?方法),并通过 MapperFactoryBean 将其注册到 MapperRegistry 中。


@Bean


public MapperScannerConfigurer mapperScannerConfigurer() {


MapperScannerConfigurer configurer = new MapperScannerConfigurer();


configurer.setBasePackage("com.hyd.mybatis3test");


return configurer;


}


[](


)4. 验证初始化过程成功


=================================================================================


为了验证上面的初始化过程完成了,我们在?com.hyd.mybatis3test?包下面创建一个 Mapper 类:


@Mapper


public interface SampleMapper {


@Update("create table if not exists user(id int)")


void createUserTable();


}


以及一个 Service 类:


@Service


public static class SampleService {


@Autowired


private SampleMapper sampleMapper;


@PostConstruct


public void init() {


sampleMapper.createUserTable();


}


}


然后别忘了在 SpringMyBatisApplication 顶上添加一个?@ComponentScan(“com.hyd.mybatis3test”)?注解,否则 Spring 会找不到 SampleService。


运行 SpringMyBatisApplication.main() 方法,我们就能在输出中找到这样的内容:


...


SampleMapper.createUserTable - ==> Preparing: create table if not exists user(id int)


SampleMapper.createUserTable - ==> Parameters:


SampleMapper.createUserTable - <== Updates: 0


...

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
理解 MyBatis 是如何在 Spring 容器中初始化的,java上传视频