一、MappedStatement是什麼?
MappedStatement是MyBatis中非常重要的一個核心對象,它表示一條語句的映射信息,包含SQL語句、輸入參數映射規則、輸出參數映射規則等。每一條語句在MyBatis中都必須由MappedStatement來描述。
MappedStatement的定義如下:
public final class MappedStatement { // ... private SqlCommandType sqlCommandType; private Configuration configuration; private String resource; private String fetchSize; private String id; // ... }
其中SqlCommandType是枚舉類型,表示SQL語句的類型(SELECT、UPDATE、INSERT、DELETE);configuration是MyBatis全局的配置對象;resource表示XML映射文件的路徑;fetchSize表示抓取大小;id是MappedStatement在全局配置中的唯一標識符。
二、MappedStatement的作用
MappedStatement是MyBatis中心,它的作用非常關鍵。主要體現在以下三個方面:
1、語句的解析和構建
MappedStatement解析XML映射文件中的語句,構建對應的PreparedStatement對象,並執行SQL語句,將查詢結果映射成Java對象返回給應用程序。
例如,對於下面的SQL語句:
SELECT * FROM user WHERE id = #{id}
MyBatis會解析該語句,構建對應的PreparedStatement對象,並執行SQL語句。查詢結果將映射成Java對象並返回給應用程序。
2、參數的映射和處理
MappedStatement解析XML映射文件中定義的參數映射規則,將傳入的Java對象映射成SQL語句中需要的對象,並綁定到PreparedStatement對象的佔位符上,從而執行對應的SQL語句。
例如,對於下面的Java對象:
public class User { private int id; private String name; // ... }
對應的XML映射文件語句為:
SELECT * FROM user WHERE id = #{id}
MyBatis會解析XML映射文件,將User對象中id屬性的值映射到SQL語句中的#{id},並綁定到PreparedStatement對象的佔位符上。
3、結果集的映射處理
MappedStatement解析XML映射文件中定義的輸出結果的映射規則,將執行SQL語句返回的結果集映射成Java對象或Java集合,並返回給應用程序。
例如,對於下面的Java對象:
public class User { private int id; private String name; // ... }
對應的XML映射文件語句為:
SELECT * FROM user WHERE id = #{id}
MyBatis會解析XML映射文件,將查詢結果映射成User對象,並返回給應用程序。
三、MappedStatement的使用
MappedStatement是MyBatis中心,是每一條語句的核心描述對象,因此,對於MyBatis開發者來說,熟悉MappedStatement的使用是非常重要的。
下面是MappedStatement使用的示例代碼:
// 創建Configuration對象 Configuration configuration = new Configuration(); // 創建SqlSessionFactoryBuilder對象 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); // 創建SqlSessionFactory對象 SqlSessionFactory factory = builder.build(configuration); // 獲取SqlSession對象 SqlSession sqlSession = factory.openSession(); // 獲取Mapper接口代理對象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); // 調用Mapper接口中定義的方法查詢數據 User user = mapper.selectById(1);
四、小結
MappedStatement是MyBatis中很重要的核心對象,它描述了一條語句的映射信息,並負責解析和構建PreparedStatement對象、參數的映射和處理、結果集的映射處理等工作。對於MyBatis開發者來說,理解並熟悉MappedStatement的使用,可以幫助我們更好的使用MyBatis實現我們的業務需求。
原創文章,作者:OISYB,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/333772.html