MyBatis 源码分析系列文章导读 (8)

到这里,我们把所有的准备工作都做完了。那么接下来,写点测试代码测试一下。

public class MyBatisTest { private SqlSessionFactory sqlSessionFactory; @Before public void prepare() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); inputStream.close(); } @Test public void testOne2One() { SqlSession session = sqlSessionFactory.openSession(); try { ArticleDao articleDao = session.getMapper(ArticleDao.class); ArticleDO article = articleDao.findOne(1); AuthorDO author = article.getAuthor(); article.setAuthor(null); System.out.println(); System.out.println("author info:"); System.out.println(author); System.out.println(); System.out.println("articles info:"); System.out.println(article); } finally { session.close(); } } @Test public void testOne2Many() { SqlSession session = sqlSessionFactory.openSession(); try { AuthorDao authorDao = session.getMapper(AuthorDao.class); AuthorDO author = authorDao.findOne(1); List<ArticleDO> arts = author.getArticles(); List<ArticleDO> articles = Arrays.asList(arts.toArray(new ArticleDO[arts.size()])); arts.clear(); System.out.println(); System.out.println("author info:"); System.out.println(author); System.out.println(); System.out.println("articles info:"); articles.forEach(System.out::println); } finally { session.close(); } } }

第一个测试方法用于从数据库中查询某篇文章,以及相应作者的信息。它的运行结果如下:

MyBatis 源码分析系列文章导读

第二个测试方法用于查询某位作者,及其所写的所有文章的信息。它的运行结果如下:

MyBatis 源码分析系列文章导读

到此,MyBatis 的使用方法就介绍完了。由于我个人在平时的工作中,也知识使用了 MyBatis 的一些比较常用的特性,所以本节的内容也比较浅显。另外,由于演示示例比较简单,这里也没有演示 MyBatis 比较重要的一个特性 -- 动态 SQL。除了以上所述,有些特性由于没有比较好的场景去演示,这里也就不介绍了。比如 MyBatis 的插件机制,缓存等。对于一些较为生僻的特性,比如对象工厂,鉴别器。如果不是因为阅读了 MyBatis 的文档和一些书籍,我还真不知道它们的存在,孤陋寡闻了。所以,对于这部分特性,本文也不会进行说明。

综上所述,本节所演示的是一个比较简单的示例,并非完整示例,望周知。

4.2 在 Spring 中使用

在上一节,我演示了单独使用 MyBatis 的过程。在实际开发中,我们一般都会将 MyBatis 和 Spring 整合在一起使用。这样,我们就可以通过 bean 注入的方式使用各种 Dao 接口。MyBatis 和 Spring 原本是两个完全不相关的框架,要想把两者整合起来,需要一个中间框架。这个框架一方面负责加载和解析 MyBatis 相关配置。另一方面,该框架还会通过 Spring 提供的拓展点,把各种 Dao 接口及其对应的对象放入 bean 工厂中。这样,我们才可以通过 bean 注入的方式获取到这些 Dao 接口对应的 bean。那么问题来了,具有如此能力的框架是谁呢?答案是mybatis-spring。那其他的不多说了,下面开始演示整合过程。

我的测试项目是基于 Maven 构建的,所以这里先来看一下 pom 文件的配置。

<project> <!-- 省略项目坐标配置 --> <properties> <spring.version>4.3.17.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <!-- 省略其他依赖 --> </dependencies> </project>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsyfs.html