天天看點

MyBatis學習(一)簡單入門程式

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();

}

}

 運作結果: