1. 程式人生 > >第一章 認識Mybatis的核心元件

第一章 認識Mybatis的核心元件

1、可以從http://www.softpedia.com/get/Programming/Other-Programming-Files/MyBatis.shtml下載mybatis的jar包。

2、mybatis的核心元件

mybatis是由4個部分構成,sqlsessionFactoryBuilder(構造器),他會根據配置或程式碼來生成sqlSessionFactory,採用的是分佈構建的Builder模式。

SqlSessionFactory(工廠介面):依靠它來生成sqlsession,使用的是工廠模式。

    它有兩個實現類,分別是SqlSessionManager和DefaultSqlSessionFactory。一般而言是由DefaultSqlSessionFactory實現的。SqlSessionManager使用在多執行緒的環境中,它的具體實現依靠DefaultSQLSessionFactory。

sqlsession(回話):一個既可以傳送sql執行返回結果,也可以獲取Mapper的介面。

SqlMapper:mybatis新設計存在的元件,它是由一個Java介面和xml檔案構成,需要給出對應的sql和對映規則。它負責傳送sql去執行,並返回結果。

3、使用xml構建sqlsessionfactory

<?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>

    <typeAliases><!--定義類的別名-->

            <typeAlias alias="role" type="com.learn.ssm.charpter2.pojo.Role"/>

    </typeAliases>

    <environments default="development">   
        <environment id="development">
            <transactionManager type="JDBC"/> <!--這裡採用jdbc管理方式,然後<dataSource>採用mybatis內部提供的連線池港式-->
            <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>

然後可以通過一段程式碼生成sqlSessionfactory了。

SqlSessionFactory sqlsf = null;

String resource = "mybatis-config.xml";

InputStream inputstr;

try{

    inputstr = Resources.getResourceAsStream(resource);

    Sqlsf = new SqlSessionFactoryBuilder().build(inputstr);

} catch(IOException e){

    e.printStackTrace();

}

SqlSessionFactoryBuilder是通過xml檔案建立一個sqlsessionfactory的一個例項。

4、SqlSession介面

實現類有兩個:DefaultSqlSession和SqlSessionManager。後面的一個在多執行緒的環境下是使用的。

SqlSession類似jdbc中的connection物件,代表著連結資源的啟用。有以下三個作用:

        獲取Mapper介面。

        傳送sql給資料庫。

        控制資料庫事物。

可以用下面的程式碼來獲取mapper介面和管理事務:

SqlSession sqls = null;

try{

    sqls = SqlSessionFactory.openSession();

    //sql語句等處理和管理程式碼

     sqls.commit();

}catch(Exception ex){

    sqls.rollback();

}finally{

    if(sqls != null){

        sqls.close();

    }

}

5、對映器

mapper是最重要最複雜的元件,它是由一個介面和對應的xml檔案組成,可以配置以下內容:

    描述對映規則

    提供sql語句,並可以配置sql引數模型,返回型別,快取重新整理資訊等

    配置快取

    提供動態的sql

實現對映器的方式有兩種,xml配置和註解形式。先定義pojo如下:

public class     Role{

    private Long  id;

    private String name;

.....

set和get方法

}

xml定義對映器分為兩個部分,介面和xml;

介面:

public interface RoleMapper{

    public Role getRole(long id);

}

<?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.RoleMapper">
    <select id="getRole" resultType="Long">
            select * from t-role where id = #{id}
    </select>
</mapper>

註解實現:

public interface RoleMapper{

    @Select ("select * from t_role where id =#id"

    public Role getRole(Long id);

}

sqlsession 傳送sql

 Role role = (Role)sqls.selectionOne("com.....getRole",1L);

用mapper介面傳送sql:

RoleMapper rp = sqls.getMapper(RoleMapper.class);

Role role = rp.getRole(1L);

6、生命週期

(1)sqlsessionfactorybuilder的作用在於建立sqlsessionfactory,建立完成後就失去了作用。

(2)sqlsessionfactory是操作mybatis資料庫的長期存在

(3)sqlsession是一個事物處理請求,當事物處理結束,也隨之結束。

(4)mapper它的生命週期與sqlsession一樣。