本方式试图仅通过mybatis官网提供的文档来学习使用mybatis框架,但最后仍然不得不学习了视频教程才最终成功。即便如此,期间仍然遇到一些官方文档和教学视频都没有明确的问题,靠搜索答案的方式才逐渐解决。
此方法引入的核心包是org.mybatis:mybatis(官网上提供的原始包),下面是总结出的搭建过程。
1. 通过idea创建一个尽量空的springboot工程(SpringInitializer-maven-Java8),然后把java.version改为合适的版本。可以看到现在已经引入的依赖:
org.springframework.boot:spring-boot-starter
org.springframework.boot:spring-boot-starter-test
2. 手动引入org.mybatis:mybatis及驱动和连接池
org.mybatis:mybatis
com.oracle.database.jdbc:ojdbc8
com.alibaba:druid
3. 完成controller、service、serviceImpl、mapper(@mapper||@reposity)、entry的创建,注意添加相关的注解,将相关的类放入容器。
但此时无论如何都没法找到定义的mapper接口类。
4. 创建mybatis-config.xml配置文件,定义好类型别名[包]<typeAliases>、数据源环境参数<environments>、mapper接口[目录]<mappers>,还可以引入外部参数文件,将数据源参数放到另一个文件中,方便修改配置<properties resource="druid.properties" />
这个时候此配置文件没有被使用,mapper接口仍然不会被找到。
5. 使用mybatis-config.xml创建类失败了(跳过吧)
6. 根据IOC原理,可以将mybatis里的配置放在spring-config.xml中,并在其中通过配置的方式生成相关的bean:
dataSource(class=com.alibaba.druid.pool.DruidDataSource)
sqlSessionFactory(class=org.mybatis.spring.SqlSessionFactoryBean)
null(class=org.mybatis.spring.mapper.MapperScannerConfigurer)
要保证配置正确。
7. 在测试类的方法里注入controller组件,调用其方法即可返回数据。
8. 创建了应用的主类XXAppliation,相关注解也加上了,但不能运行,找不到mapper接口类;主类加上MapperScan包扫描,又找不到sqlSessionFactory实例,说明spring-config.xml中的bean没有生效。但测试为什么可以执行成功,并且mapper接口文件去掉@mapper注解也可以正常测试执行。这中间有什么区别,没弄清楚。总之,试图随心所欲搭建工程失败了,暂时只能按照引导创建工程了。
最后注意事项:
spring-config.xml里的扫描的包,要包含controller包,也就是controller包的上级包,不然无法注入。测试类应该是public的,表明是主类,然后其中的方法才能运行(因为拷贝粘贴造成不一致,好长一会都不知道为什么测试方法怎么不行运行了)
留下的问题以后再完善。下一篇直接使用org.mybatis.spring.boot:mybatis-spring-boot-starter直接搭建似乎顺利很多,不需要自己去引入太多的包依赖,希望顺利。