JavaEE-SSM:003 Mybatis的對映器及各元件生命週期
1.對映器是什麼?
它包含一個xml配置檔案和一個對應的Mapper介面
xml可以提供動態SQL,配置Sql引數型別,返回值型別,快取,重新整理,提供對映規則等
Mapper是對xml檔案的對映,實際上配置好xml檔案後就不再操作xml檔案,直接操作Mapper介面操作資料庫即可。
2.POJO物件
資料庫語句所需要的引數或者資料庫語句執行的結果都會對映到一個實體類上去,這是典型的ORM的思想,將對資料庫的操作屬性值轉換成一個POJO類,極大的簡化了資料持久化的操作難度。
例如:
public class Role { private Long id; private String roleName; private String note; }
3.一個Mapper中的方法就代表一條資料庫操作
Mapper介面的一個方法就是一條資料庫操作,它的函式引數就是Sql語句的輸入引數,它的返回值就是Sql語句執行結果 向POJO類的對映的結果。
例如:下圖中,輸入引數是一個Long型別的id,查詢結果就是一個Role物件。Mybatis可以實現自動對映,前提要配置好xml檔案
將Mapper.xml新增到mybatis-config.xml檔案中:
或者
4.Mapper.xml檔案的配置
一個由Select包含的節點對應著一條SQL語句,也就是一個SQL操作。
id = "getRole"就對應著上述的RoleMapper介面的一個方法名,這就表示,Mapper介面的那個方法就和當前的select語句綁定了,操作那個介面函式就是操作這條資料庫語句。
parameterType指定的是輸入的引數型別。這裡根據介面函式的定義,輸入引數是一個Long型別的id,所以此處是long型別
resultType指定的是輸入的引數型別,根據介面函式的定義,輸出引數是一個Role型別,所以此處應該是Role的全限定名。
但是,還記得嗎?在mybatis-config.xml函式中,有這麼一處程式碼:
<typeAliases> <typeAlias alias="role" type="com.learn.ssm.chapter3.pojo.Role" /> </typeAliases>
這裡有了一個類別名的定義,所以此處使用的是別名--role
5.通過Mapper介面操作資料庫
RoleMapper mapper = sqlSession.getMapper(RoleMapper.class); //通過sqlSession獲取對應的Mapper
Role role = mapper.getRole(1L); //此處操作的是RoleMapper介面函式
6.各元件的生命週期
SqlSessionFactoryBuilder就是為了從配置檔案中讀取配置並生成SqlSessionFactory,所以生成SqlSessionFactory後,立即銷燬即可。
SqlSessionFactory是一個數據庫連線池,儲存在專案中,通過單例模式在應用中共享即可。
SqlSession就是一條資料庫連線,執行完語句後,直接關閉連線即可。
Mapper是一個SqlSession中執行的介面,基本上跟隨SqlSession或者早於SqlSession釋放即可。