只要你對 MyBatis 有所認識和了解,想必知道 MyBatis 有兩種 SQL 語句映射模式,一種是基於注解,一種是基於XML。
-
基於 XML
<mapper namespace="mapper.UserMapper">
<!--結果集映射(ORM)-->
<resultMap id="userResultMap" type="entity.UserEntity">
<!-- propery表示UserEntity屬性名,column表示tb_user表字段名-->
<id property="id" column="id" />
<result property="userName" column="user_name" />
<result property="password" column="password" />
<result property="name" column="name" />
<result property="age" column="age" />
<result property="sex" column="sex" />
<result property="birthday" column="birthday" />
<result property="created" column="created" />
<result property="updated" column="updated" />
</resultMap>
<!--select查詢語句 id表示接口方法名 resultMap表示引用結果集映射-->
<select id="selectUserByAge" resultMap="userResultMap">
select * from tb_user where age > #{age}
</select>
</mapper>
-
基於注解
@Select("select * from tb_user where age > #{age}")
@Results(value = {
@Result(property = "id",column = "id",id = true),
@Result(property = "userName",column = "userName"),
@Result(property = "password",column = "password"),
@Result(property = "name",column = "name"),
@Result(property = "sex",column = "sex"),
@Result(property = "age",column = "age"),
@Result(property = "birthday",column = "birthday"),
@Result(property = "created",column = "created"),
@Result(property = "updated",column = "updated")
})
public List<UserEntity> selectUserByAge(@Param("age") int age);
以上兩種方式效果是相同的,為此很多缺乏項目經驗的 MyBatis 初學者就會產生一個疑問,那就是 MyBatis 在實際項目開發中到底是基於 XML 還是注解模式開發?
這個問題如果你上網百度一下,會得到很多不同的回答,有支持 XML 的,有支持注解的,有支持混用的,總是這讓初學者更感到困惑了。
其實,這個問題很簡單,初學者壓根沒有必要在那里糾結。
因為實際項目開發中,選擇何種模式開發,並沒有統一的標准,也根本不取決於你,最終取決於你的團隊,更具體說是項目經理或技術精英。
你想一想,作為一個剛入行的程序員,怎么也輪不到你在項目中指手畫腳呀。
不過,如果你是一個求知欲極強,凡事總要打破砂鍋問到底的初學者,請跟我來探究一下這個問題。
首先,我們知道 XML 和注解只是 SQL 語句映射的兩種方式而已,效果都是相同的;但是,這二者之間還是存在一些差異或區別。
想一想,MyBatis 框架開發者為何要設計兩種映射模式呢?目的肯定是為了追求靈活性,增強場景適應性,也給使用者更多的選擇空間。這就意味着,這二者之間自身各有優缺點。
注解模式與 XML 模式對比
-
注解模式
優勢:開發速度快,開發量小
劣勢:難以線上維護(每次修改 SQL 語句都需要重新打包)
-
XML 模式
優勢:便於線上維護(每次修改 SQL 語句不需要重新打包)
劣勢:開發速度慢,開發量大
另外,注解模式開發速度快僅限於簡單 SQL 語句處理,比如單表 CURD 操作之類。對於復雜的 SQL 語句處理,注解模式就顯得有點力不從心,而且會帶來混亂。
問題總結
所以,通過注解模式和 XML 模式的對比,我們可以知道在實際項目開發中,由於考慮便於線上維護以及 SQL 語句的復雜度,一般都會使用 XML 模式;而且有 MyBatis Generator 插件工具可以輔助自動生成 XML 映射文件,大大提高了開發效率。
當然,也可以采用 XML 模式與注解模式混用,也就是簡單 SQL 語句采用注解模式,復雜 SQL 語句采用 XML 模式。