MyBatis 项目开发中是基于 XML 还是注解?

只要你对 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 模式。

上一篇:POJ SETI 高斯消元 + 费马小定理


下一篇:POJ 2065 高斯消元求解问题