文档章节

MyBatis四大核心概念

waylau
 waylau
发布于 06/22 01:09
字数 755
阅读 1245
收藏 38

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。

图片描述

MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper。可以说,了解了这四大核心,便可知 MyBatis 八九。

SqlSessionFactoryBuilder

从命名上可以看出,这个是一个 Builder 模式的,用于创建 SqlSessionFactory 的类。SqlSessionFactoryBuilder 根据配置来构造 SqlSessionFactory。

其中配置方式有两种

1. XML 文件方式

XML 文件方式是作为常用的一种方式:

String resource = "org/mybatis/example/mybatis-config.xml";

InputStream inputStream = Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

mybatis-config.xml 就是我们的配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="${driver}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
        </dataSource>
        </environment>
    </environments>
    <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>

2. Java Config

这是第二种配置方式,通过 Java 代码来配置:

DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();

TransactionFactory transactionFactory = new JdbcTransactionFactory();

Environment environment = new Environment("development", transactionFactory, dataSource);

Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

Java Config 相比较 XML 文件的方式而言,会有一些限制。比如修改了配置文件需要重新编译,注解方式没有 XML 配置项多等。所以,业界大多数情况下是选择 XML 文件的方式。但到底选择哪种方式,这个要取决与自己团队的需要。比如,项目的 SQL 语句不复杂,也不需要一些高级的 SQL 特性,那么 Java Config 则会更加简洁一点;反之,则可以选择 XML 文件的方式。

SqlSessionFactory

SqlSessionFactory 顾名思义,是用于生产 SqlSession 的工厂。

通过如下的方式来获取 SqlSession 实例:

SqlSession session = sqlSessionFactory.openSession();

SqlSession

SqlSession 包含了执行 SQL 的所有的方法。以下是示例:

SqlSession session = sqlSessionFactory.openSession();
try {
Blog blog = session.selectOne(
"org.mybatis.example.BlogMapper.selectBlog", 101);
} finally {
session.close();
}

当然,下面的方式可以做到类型安全:

SqlSession session = sqlSessionFactory.openSession();
try {
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
} finally {
session.close();
}

Mapper

Mapper 顾名思义,是用做 Java 与 SQL 之间的映射的。包括了 Java 映射为 SQL 语句,以及 SQL 返回结果映射为 Java。

比如,下面是一个常见的 Mapper 接口映射文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>

其中 "org.mybatis.example.BlogMapper" 就是我们要射射的接口,selectBlog 就是BlogMapper上的方法。而这个 selectBlog 具体就是要执行“select * from Blog where id = #{id}”这个 SQL 语句。

这样,我们就能通过

Blog blog = session.selectOne(
"org.mybatis.example.BlogMapper.selectBlog", 101);

或者是

BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);

来获取到执行的结果。

当然,如果是采用注解的方式的话,可以省去 XML 文件:

public interface BlogMapper {
@Select("SELECT * FROM blog WHERE id = #{id}")
Blog selectBlog(int id);
}

参考引用

© 著作权归作者所有

共有 人打赏支持
waylau

waylau

粉丝 501
博文 91
码字总数 165019
作品 2
深圳
架构师
私信 提问
加载中

评论(1)

霍尐苩
正在学这里,先收藏了��
MyBatis:实现简单物理分页(Plugin的使用)

MyBatis中的SqlSession接口中提供的分页功能的方法 MyBatis内置的分页处理器,是通过内存进行分页,结合上面的例子就是MyBatis首先执行select * from users,然后获取结果集ResultSet,接着通...

消失er
07/24
0
0
MyBatis使用笔记

MyBatis MyBatis作为一个轻量的SQL映射框架,确实很简单,但是知识点挺多,实际使用中还是会有时想不起来某个标签该怎么写,所以整理了这篇文章,以备查询。由于MyBatis如此简单,使得这一篇...

楠木楠
2016/11/22
17
0
MyBatis 源码分析——介绍

笔者第一次接触跟MyBatis框架是在2009年未的时候。不过那个时候的他并不叫MyBatis,而是叫IBatis。2010年的时候改为现在的名字——MyBatis。这几年过去了,对于笔者来讲有一点陌生了。而且那...

Java小铺
08/10
0
0
Mybatis3.3.x技术内幕(三):Mybatis事务管理(将颠覆你心中目前对事务的理解)

1.说到数据库事务,人们脑海里自然不自然的就会浮现出事务的四大特性、四大隔离级别、七大传播特性。四大还好说,问题是七大传播特性是哪儿来的?是Spring在当前线程内,处理多个数据库操作方...

祖大俊
2016/04/27
3K
4
MyBatis实战(二)-一级缓存原理解析

1 概论 每当我们使用MyBatis开启一次和数据库的会话,MyBatis会创建出一个SqlSession对象表示一次数据库会话 在对数据库的一次会话中,我们有可能会反复地执行完全相同的查询语句,如果不采取...

芥末无疆sss
10/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Hive的三种Join方式

Hive中就是把Map,Reduce的Join拿过来,通过SQL来表示。 参考链接:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins Common/Shuffle/Reduce Join Reduce Join在Hiv......

GordonNemo
9分钟前
0
0
Spark学习记录(三)核心API模块介绍

spark ------------- 基于hadoop的mr,扩展MR模型高效使用MR模型,内存型集群计算,提高app处理速度。 spark特点 ------------- 速度:在内存中存储中间结果。 支持多种语言。Scala、Java、P...

我爱春天的毛毛雨
15分钟前
0
0
PHP5、PHP7安装

11月13日任务 11.10/11.11/11.12 安装PHP5 11.13 安装PHP7 PHP官网www.php.net 当前主流版本为5.6/7.1 cd /usr/local/src/ wget http://cn2.php.net/distributions/php-5.6.32.tar.bz2 tar z......

zgxlinux
16分钟前
0
0
React 项目结构和组件命名之道

摘要: > * 原文地址:[structuring projects and naming components in react](https://hackernoon.com/structuring-projects-and-naming-components-in-react-1261b6e18d76) > * 原文作者:......

阿里云官方博客
16分钟前
2
0
无维护地稳定运行了8 年的 Hyperic HQ

最近在诊断一个系统意外停机时, 发现一个8年前部署部署的Hypeirc HQ 4.2,已经免维护,稳定运行了8年多。提供了及时的诊断信息。单击右下角的蓝色泡泡,可显示报警信息。

MartinKing
30分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部