第一章 認識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一樣。