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 模式。
MyBatis 项目开发中是基于 XML 还是注解?的更多相关文章
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
项目开发中的一些注意事项以及技巧总结 1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...
- Java项目开发中实现分页的三种方式一篇包会
前言 Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用 ...
- 团队项目开发中,常见的版本控制有svn,git
团队项目开发中,常见的版本控制有svn,git
- Angular 项目开发中父子组件传参
在项目开发中经常会遇到 组件之间传参的问题.今天总结下在使用angular的项目中父子组件传参的问题: 1.父组件向子组件传参: 然后在父组件中 然后在父组件的html中 然后就可以在子组件中使用了 ...
- 《Maven在Java项目开发中的应用》论文笔记(十七)
标题:Maven在Java项目开发中的应用 一.基本信息 时间:2019 来源:山西农业大学 关键词:Maven:Java Web:仓库:开发人员:极限编程; 二.研究内容 1.Maven 基本原理概 ...
- 炼金术(1): 识别项目开发中的ProtoType、Demo、MVP
软件开发是很分裂的,只有不断使用原则和规律,才能带来质量. 只要不是玩具性质的项目,项目应该可以大概划分为0-1,1-10,10-100,100-1000四个种重要阶段.其中,0-1是原型验证性的:1 ...
- 项目开发中的git简单使用
原文地址: https://www.zhuyilong.fun/tech/the-blog-git.html 示例远程仓库地址: https://github.com/zhu-longge/gitWo ...
- 项目开发中Maven的单向依赖-2022新项目
一.业务场景 工作多年,在真实的项目开发中经常会遇到将一个项目拆分成多个工程的情况,比如将一个真实的项目拆分成controller层,service层, dao层,common公共服务层等等.这样拆分 ...
- 关于基于LinphoneSDK通话项目开发中遇到的相关问题
在之前小学期的项目开发当中,我们小组进行的是使用网上开源的LinphoneSDK来开发一款Android端的VOIP电话APP. 因为网上关于这个SDK在安卓端的开发文档相当少,所以我们只能根据少量的 ...
随机推荐
- wap视频广告遇到的问题
最近在做一个wap端的视频广告,耗了很多心力在上面,仍旧做不好.没想到wap浏览器对video标签这么不友好.广告需要在原编辑视频播完后插入并自动播放. ios浏览器点击播放按钮后喜欢自动全屏播放,希 ...
- 数据库MySQL六
介绍什么是JDBC JAVA SE也有 提高综合篇 JDBC(Java Database Connectivity) :java和数据库的连接技术,sun公司推出的一套java应用程序访问数据库的技术 ...
- Day01_04_Java标识符命名规范
Java标识符命名规范 什么是标识符? 在程序中程序员有权利自己命名的单词都是标识符(类名 方法名 变量名 常量名 接口名) 标识符命名规则 标识符用作给变量.类和方法命名 标识符以由大小写字母.数字 ...
- 记一次 .NET 某教育系统API 异常崩溃分析
一:背景 1. 讲故事 这篇文章起源于 搬砖队大佬 的精彩文章 WinDBg定位asp.net mvc项目异常崩溃源码位置 ,写的非常好,不过美中不足的是通览全文之后,总觉得有那么一点不过瘾,就是没有 ...
- 030- 控制语句if…else…
语法: 第一种结构: if(boolean表达式){ java语句; } 解释:如果if后面的boolean表达式是true就执行大括号里面的java语句 如果是false就不执行大括号中的java语 ...
- 360加固保so动态脱壳
环境及工具 手机 : 中兴 U887 系统版本: Android 2.3.5 工具 : IDA pro 6.6 .0101Editor 目前so加壳有很多家,我己知的有 爱加密,梆 ...
- 手动绕过百度加固Debug.isDebuggerConnected反调试的方法
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78237571 1.调用Debug.isDebuggerConnected函数这种反 ...
- hdu5015 矩阵快速幂233(好题)
题意: 给你一个(n+1)*(m+1)的矩阵mat,然后给你mat[0][1] = 233 ,mat[0][2] = 2333,mat[0][3] = 23333...,然后输入mat[1 ...
- POJ2044 深搜+剪枝(云彩下雨)
题意: 有一个城镇,是4*4的大小的,然后你控制一块云彩,2*2的,你每天可以有9种走的方法,上下左右,或者不动,走的时候可以走1或者2步,云彩所在的地方肯定会下雨,然后给你做多365天 ...
- Sqlmap的使用详解
目录 Sqlmap Sqlmap的简单用法 探测指定URL是否存在SQL注入漏洞 查看数据库的所有用户 查看数据库所有用户名的密码 查看数据库当前用户 判断当前用户是否有管理权限 列出数据库管理员角色 ...