<article class="post-content" style="box-sizing: border-box; display: block;">
yBatis 作為互聯(lián)網(wǎng)數(shù)據(jù)庫映射工具界的“上古神器”,訓(xùn)有四大“神獸”墅茉,謂之:SqlSessionFactoryBuilder命黔、SqlSessionFactory、SqlSession就斤、Mapper悍募。可以說洋机,了解了這四大核心搜立,便可知 MyBatis 八九。
SqlSessionFactoryBuilder
從命名上可以看出槐秧,這個(gè)是一個(gè) Builder 模式的,用于創(chuàng)建 SqlSessionFactory 的類忧设。SqlSessionFactoryBuilder 根據(jù)配置來構(gòu)造 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 文件的方式而言址晕,會(huì)有一些限制膀懈。比如修改了配置文件需要重新編譯,注解方式?jīng)]有 XML 配置項(xiàng)多等谨垃。所以启搂,業(yè)界大多數(shù)情況下是選擇 XML 文件的方式。但到底選擇哪種方式刘陶,這個(gè)要取決與自己團(tuán)隊(duì)的需要胳赌。比如,項(xiàng)目的 SQL 語句不復(fù)雜匙隔,也不需要一些高級的 SQL 特性疑苫,那么 Java Config 則會(huì)更加簡潔一點(diǎn);反之纷责,則可以選擇 XML 文件的方式捍掺。
SqlSessionFactory
SqlSessionFactory 顧名思義,是用于生產(chǎn) SqlSession 的工廠再膳。
通過如下的方式來獲取 SqlSession 實(shí)例:
SqlSession session = sqlSessionFactory.openSession();
SqlSession
SqlSession 包含了執(zhí)行 SQL 的所有的方法挺勿。以下是示例:
SqlSession session = sqlSessionFactory.openSession();
try {
Blog blog = session.selectOne(
"org.mybatis.example.BlogMapper.selectBlog", 101);
} finally {
session.close();
}
當(dāng)然,下面的方式可以做到類型安全:
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 返回結(jié)果映射為 Java。
比如湃番,下面是一個(gè)常見的 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上的方法。而這個(gè) selectBlog 具體就是要執(zhí)行“select * from Blog where id = #{id}”這個(gè) SQL 語句吠撮。
這樣尊惰,我們就能通過
Blog blog = session.selectOne(
"org.mybatis.example.BlogMapper.selectBlog", 101);
或者是
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
來獲取到執(zhí)行的結(jié)果。
當(dāng)然泥兰,如果是采用注解的方式的話弄屡,可以省去 XML 文件:
public interface BlogMapper {
@Select("SELECT * FROM blog WHERE id = #{id}")
Blog selectBlog(int id);
}