提到看原始碼,很多同學內心的恐懼的,其實這個從人性的角度來說是非常正常的,因為人們對未知的事物,都是非常恐懼的,其次,你內心可能始終覺得,好像不會原理也還是能工作啊,你的潛意識裡沒有強烈的慾望.從閱讀原始碼的經歷來說,Java三大框架SSM中,Mybatis的原始碼是最適合入門的.
簡單使用
這是一個簡單的Mybatis儲存物件的例子
@Test
public void testSave() throws Exception {
//建立sessionFactory物件
SqlSessionFactory sf = new SqlSessionFactoryBuilder().
build(Resources.getResourceAsStream("mybatis-config.xml"));
//獲取session物件
SqlSession session = sf.openSession();
//建立實體物件
User user = new User();
user.setUsername("toby");
user.setPassword("123");
user.setAge(23);
//儲存資料到資料庫中
session.insert("com.toby.mybatis.domain.UserMapper.add", user);
//提交事務,這個是必須要的,否則即使sql發了也儲存不到資料庫中
session.commit();
//關閉資源
session.close();
}
複製程式碼
<mapper namespace="com.toby.mybatis.domain.UserMapper">
<!--#{}在傳入的物件中找對應的屬性值-->
<!--parameterType傳入的引數是什麼型別-->
<insert id="add" parameterType="com.toby.mybatis.domain.User">
INSERT INTO USER (username,password,age) VALUES (#{username},#{password},#{age})
</insert>
</mapper>
複製程式碼
引出主題
但是在實際中,我們都不是這樣操作的,我們是通過Mapper介面,呼叫介面方法,就能實現CRUD操作,那麼關鍵是,這個介面究竟做了什麼事,才是我們關心的.
只要把下面這段程式碼究竟發生了什麼事弄明白,就明白,這個Mapper介面究竟做了什麼事.
public void testGetObject() throws Exception {
SqlSession session = MybatisUtil.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.get(5L);
System.out.println(user);
session.close();
}
複製程式碼
public interface UserMapper {
public void add(User user);
public User get(Long id);
}
複製程式碼
流程圖
但是我認為,一張流程圖和時序圖就看明白這期間所發生的事
寫在最後
肥朝 是一個專注於 原理、原始碼、開發技巧的技術公眾號,號內原創專題式原始碼解析、真實場景原始碼原理實戰(重點)。掃描下面二維碼關注肥朝,讓本該造火箭的你,不再擰螺絲!