為了賬號安全,請及時綁定郵箱和手機立即綁定

MyBatis四大核心概念

2018.06.22 01:08 7886瀏覽

本文講解 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);
}

參考引用

點擊查看更多內容

本文原創發布于慕課網 ,轉載請注明出處,謝謝合作

25人點贊

若覺得本文不錯,就分享一下吧!

評論

相關文章推薦

正在加載中
意見反饋 幫助中心 APP下載
官方微信

舉報

0/150
提交
取消
lpl竞猜