1.写一篇 关于mybatis的总结
1:MyBatis:封装了jdbc的持久层框架
2:MyBatis框架的优点
1)与JDBC相比,减少了50%以上的代码量。
2)MyBatis是最简单的持久化框架,小巧并且简单易学。
3)MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。
4)提供XML标签,支持编写动态SQL语句。
5)提供映射标签,支持对象与数据库的ORM字段关系映射。
3: MyBatis框架的缺点:
1)SQL语句的编写工作量较大,对开发人员编写SQL语句的功底有一定要求。
2)SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
4:SQL映射文件
下面是关于SQL映射文件的几个顶级元素:
mapper:映射文件的根元素节点,只有一个属性namespace(命名空间),作用:
用于区分不同的mapper,全局唯一。
绑定DAO接口,即面向接口编程。当namespace绑定某一接口之后,可以不用写该接口的实体类,MyBatis会通过接口的完整限定名查找到对应的mapper配置来执行SQL语句。因此namespace的命名必须要和接口同名。
resultMap:用来描述数据库结果集和对象的对应关系。
sql:可以重用的SQL块,也可以被其他语句引用。
insert:映射插入语句。
update:映射更新语句。
delete:映射删除语句。
select:映射查询语句。
namespace的命名必须跟某个DAO接口同名,通属于DAO层,所以映射文件与该DAO接口应放置在同一package下。
在不同的mapper文件中,子元素的id可以相同,MyBatis通过namespace和子元素的id联合区分。接口中的方法与映射文件中的SQL语句id应一一对应。
resultType
resultType直接表示返回类型,包括基础数据类型和复杂数据类型。
resultMap
id属性:唯一标识,此id值用于select元素的resultMap属性的引用。
type属性:表示该resultMap的映射结果类型。
result子节点:用于标识一些简单属性,其中column属性表示从数据库中查询的字段名,property则表示查询出来的字段对应的值赋给实体对象的哪个属性。
resultMap是对外部resultMap定义的引用,对应外部resultMap的id,表示返回结果映射到某一个resultMap上。主要应用:数据库字段信息与对象属性不一致或者需要做复杂的联合查询以便自由控制映射结果。
resultType和resultMap本质上是一样的,都是Map数据结构。但是不能同时存在,只是二者选其一使用。
association
association:映射到JavaBean的某个复杂类型属性,即JavaBean内部嵌套一个复杂数据类型属性。association仅处理一对一的关联关系。
属性:
javaType:完整Java类名或者别名。
property:映射数据库列的实体对象的属性。
id
result:
property:映射数据库列的实体对象的属性。
column:数据库列名或别名。
collection
collection元素的作用和association元素的作用类似,只不过collection元素映射的属性是一个集合列表,即JavaBean内部嵌套一个复杂数据类型(集合)属性。
属性:
property:映射数据库列的实体对象的属性。
collection的子元素与association基本一致,用来写集合。
5:使用动态SQL完成多条件查询
if:利用if实现简单的条件选择。
choose(when,otherwise):相当于Java中的switch,通常与when和otherwise搭配,只能匹配一个条件,不推荐使用。
where:简化SQL语句中where的条件判断,并能智能地处理and和or,不必担心多余关键字导致的语法错误,可以匹配多个条件。
set:解决动态更新语句。主要功能和where类似,是在包含的语句前输出一个set,若包含的语句是以逗号结束的,会自动把该逗号忽略掉,再配合if元素就可以动态地更新需要修改的字段。
trim:可以灵活地去除多余的关键字。
foreach:迭代一个集合,通常用于in条件。foreach主要用在构建in条件中,它可以在SQL语句中迭代一个集合。
属性:
item:表示集合中每一个元素进行迭代时的别名。
index:指定一个名称,用于表示在迭代过程中,每次迭代到的位置。
open:表示该语句以什么开始。(如果是in条件语句,以“(”开始)
separator:表示在每次进行迭代之间以什么符号作为分隔符。(如果是in条件语句,以“,”作为分隔符)
close:表示该语句以什么结束。(如果是in条件语句,以“)”结束)
collection:该属性必须指定,不同情况下,该属性的值是不一样的。主要有三种情况:
若入参为单参数且参数类型是一个List的时候,collection属性值为list。
若入参为单参数且参数类型是一个数组的时候,collection属性值为array。
若传入参数为多参数,就需要把它们封装为一个Map进行处理。
1.写一篇 关于mybatis的总结相关推荐
- 【MybBatis细节篇】MyBatis中#{}和${}的区别
[MybBatis细节篇]MyBatis中#{}和${}的区别 #{} 和 ${} 的区别 #{} 和 ${} 的实例:假设传入参数为 1 #{} 和 ${} 的大括号中的值 单个参数的情形 #{} ...
- 如何写一篇好的技术博客
在工作过程中,发现对很多东西都一知半解,不是很透澈,到头来很容易模糊,如果有一篇好的技术博客予以总结,一来即使忘记了,回国头来再看,仍然能 够从自己的思路中恢复:二来总结一下,还会发现一些潜在问题:三 ...
- [译] 如何写一篇杀手级的软件工程师简历
原文地址:How to write a killer Software Engineering résumé 原文作者:Terrence Kuo 译文出自:掘金翻译计划 本文永久链接:github.c ...
- 想写一篇关于.net下COM工作原理的文章
今天想写一篇关于.net下COM工作原理的文章.花了大概3个小时,文章也写的差不多了,可是越写到后来越发现自己的观点以及想法越错误. 边写边查MSDN,最后不得不放弃发布这篇文章了.虽然花了好几个小时 ...
- 如何写一篇MBA论文-涉及matlab建模
如何写一篇MBA论文? 知乎 · 19 个回答方向,具体一点,不要太大.战略管理.薪酬管理.绩效考核.营销管理,客户关系管理.供应链管理.供应商选择与评价,库存问题..论文模式第1章:绪论第2章:现状 ...
- 怎样写一篇优秀论文?看完受益匪浅!
我在念书的时候,有一位欧洲史.英国史的大师 Lawrence Stone ,他目前已经过世了,曾经有一本书访问十位最了不起的史学家,我记得他在访问中说了一句非常吸引人注意的话,他说他英文文笔相当好,所 ...
- Java SSM篇3——Mybatis
Java SSM篇3--Mybatis 1.JDBC存在的问题 数据库连接创建.释放频繁造成系统资源浪费从而影响系统性能 sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大 ...
- 用计算机弹奏曲子童年,5.这首曲子使我想起了我的童年.十.书面表达现在.计算机游戏非常盛行.这是一件好事还是一件坏事?请你用英语写一篇短文来陈述自己的观点.并说明理由.字数:80-120....
5.这首曲子使我想起了我的童年.十.书面表达现在.计算机游戏非常盛行.这是一件好事还是一件坏事?请你用英语写一篇短文来陈述自己的观点.并说明理由.字数:80-120.[查看更多] 题目列表(包括答案和 ...
- 如何写一篇合格的论文(清华大学刘知远)
目录 你需要知道的真相: 一篇论文的典型结构 Introduction 怎么写(先写introduction再写abstract) (1)起手介绍研究任务和意义 (2)随后简介面向这个任务的已有方法 ...
最新文章
- AtCoder Beginner Contest 198 (A ~ F)题解
- 我们应该怎么使用网络中赋予我们的权限
- dobbo 管理端端口_安装 Dubbo 管理控制台
- 一个原生态ajax过程,提交表单的例子
- 深度linux安装spotify,如何在 Linux 上使用 snap 安装 Spotify(声破天)
- 升级鸿蒙的十款手机,华为郑重宣布,第二批升级鸿蒙的十款手机,荣耀30系列上榜!...
- hexo+githup搭建属于自己的博客
- HDU - 1527 取石子游戏(威佐夫博弈)
- c语言三目运算符_C语言中的三目运算符是啥?有何用处?
- python解zuobiaoxi方程_滑坡稳定性分析程序初探---Python版!
- 5.1 Attention(注意力)概述 原理、作用、计算流程
- SQL的bit列名转换成access是/否数据类型,True无效的问题
- 计算广告、推荐系统常用语
- c2c运营流程图_电商运营流程图模板分享,运营的核心都在这里了,快来拿走吧...
- 不能启动安全中心服务器,无法启动windows安全中心的解决办法
- 接口性能测试案例分析
- 【转】资深眼镜人告诉你一些所不为人知的眼镜知识和内幕
- 中山技术学院计算机学院,计算机科学与技术学院
- iOS小知识: 使用bugly上报自定义错误信息进行数据监控
- 利用Tensorflow构建RNN并对序列数据进行建模