MyBatis入門學習
MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名為MyBatis 。2013年11月遷移到Github。
MyBatis是一個優秀的持久層框架,它對jdbc的操作數據庫的過程進行封裝,使開發者只需要關注 SQL 本身,而不需要花費精力去處理例如注冊驅動、創建connection、創建statement、手動設置參數、結果集檢索等jdbc繁雜的過程代碼。
架構圖:

1、 mybatis配置
SqlMapConfig.xml,此文件作為mybatis的全局配置文件,配置了mybatis的運行環境等信息。
mapper.xml文件即sql映射文件,文件中配置了操作數據庫的sql語句。此文件需要在SqlMapConfig.xml中加載。
2、 通過mybatis環境等配置信息構造SqlSessionFactory即會話工廠
3、 由會話工廠創建sqlSession即會話,操作數據庫需要通過sqlSession進行。
4、 mybatis底層自定義了Executor執行器接口操作數據庫,Executor接口有兩個實現,一個是基本執行器、一個是緩存執行器。
5、 Mapped Statement也是mybatis一個底層封裝對象,它包裝了mybatis配置信息及sql映射信息等。mapper.xml文件中一個sql對應一個Mapped Statement對象,sql的id即是Mapped statement的id。
6、 Mapped Statement對sql執行輸入參數進行定義,包括HashMap、基本類型、pojo,Executor通過Mapped Statement在執行sql前將輸入的java對象映射至sql中,輸入參數映射就是jdbc編程中對preparedStatement設置參數。
7、 Mapped Statement對sql執行輸出結果進行定義,包括HashMap、基本類型、pojo,Executor通過Mapped Statement在執行sql后將輸出結果映射至java對象中,輸出結果映射過程相當於jdbc編程中對結果的解析處理過程。
入門案例:
mybaits的代碼由github.com管理
下載地址:https://github.com/mybatis/mybatis-3/releases
1.1.1. 創建java工程

1.1.2. 加入jar包

1.1.3. 加入配置文件
如下圖創建資源文件夾config,加入log4j.properties和SqlMapConfig.xml配置文件

1.1.4. log4j.properties(用來輸出日志)
在config下創建log4j.properties如下:
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
1.1.5. SqlMapConfig.xml (SqlMapConfig.xml是mybatis核心配置文件,配置文件內容為數據源、事務管理。)
在config下創建SqlMapConfig.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>
<!-- 和spring整合后 environments配置將廢除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事務管理 -->
<transactionManager type="JDBC" />
<!-- 數據庫連接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
</configuration>
1.1.6. 創建pojo
pojo類作為mybatis進行sql映射使用,po類通常與數據庫表對應,
User.java如下:
Public class User {
private Integer id;
private String username;// 用戶姓名
private String sex;// 性別
private Date birthday;// 生日
private String address;// 地址
get/set……
1.1.7. sql映射文件
在config下的sqlmap目錄下創建sql映射文件User.xml:
<?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">
<!-- namespace:命名空間,用於隔離sql,還有一個很重要的作用,后面會講 -->
<mapper namespace="test">
</mapper>
1.1.7. 第七步:加載映射文件
mybatis框架需要加載Mapper.xml映射文件
將users.xml添加在SqlMapConfig.xml,如下:

1.1.8. 映射文件:
在user.xml中添加select標簽,編寫sql:
<?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">
<!-- namespace:命名空間,用於隔離sql,還有一個很重要的作用,后面會講 -->
<mapper namespace="test">
<!-- id:statement的id 或者叫做sql的id-->
<!-- parameterType:聲明輸入參數的類型 -->
<!-- resultType:聲明輸出結果的類型,應該填寫pojo的全路徑 -->
<!-- #{}:輸入參數的占位符,相當於jdbc的? -->
<select id="queryUserById" parameterType="int"
resultType="cn.itcast.mybatis.pojo.User">
SELECT * FROM `user` WHERE id = #{id}
</select>
</mapper>
1.1.9. 測試程序:
測試程序步驟:
1. 創建SqlSessionFactoryBuilder對象
2. 加載SqlMapConfig.xml配置文件
3. 創建SqlSessionFactory對象
4. 創建SqlSession對象
5. 執行SqlSession對象執行查詢,獲取結果User
6. 打印結果
7. 釋放資源
MybatisTest編寫測試程序如下:
public class MybatisTest {
private SqlSessionFactory sqlSessionFactory = null;
@Before
public void init() throws Exception {
// 1. 創建SqlSessionFactoryBuilder對象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2. 加載SqlMapConfig.xml配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 3. 創建SqlSessionFactory對象
this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
}
@Test
public void testQueryUserById() throws Exception {
// 4. 創建SqlSession對象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 5. 執行SqlSession對象執行查詢,獲取結果User
// 第一個參數是User.xml的statement的id,第二個參數是執行sql需要的參數;
Object user = sqlSession.selectOne("queryUserById", 1);
// 6. 打印結果
System.out.println(user);
// 7. 釋放資源
sqlSession.close();
}
}
運行結果:

