MyBatis 的基本要素—SQL 映射文件
MyBatis 真正的强大在于映射语句,相对于它强大的功能,SQL 映射文件的配置却是相当简单。对比 SQL 映射配置和 JDBC 代码,发现使用 SQL 映射文件配置可减少 50% 以上的代码,并且MyBatis 专注于SQL,对于开发人员来说,也可极大限度地进行 SQL 调优,以保证性能。
SQL 映射文件的几个顶级元素(按照定义的顺序)
➣ mapper:映射文件的根元素节点,只有一个属性 namespace(命名空间) 。
namespace 作用如下
1、用于区别不同的 mapper,namespace 和 子元素的 id 联合保证全局唯一。
2、绑定DAO接口。即面向接口编程,当 namespace 绑定某一接口之后,可以不用书写该接口的实现类,MyBatis 会通过接口的完整限定名查找到对应的 mapper 配置来执行 SQL 语句。因此 namespace 的命名必须跟某个接口同名,接口中的方法与映射文件中 SQL 语句 id 一一对应。
➣ cache :配置给定命名空间的缓存
➣ cache-ref :从其他命名空间引用缓存配置
➣ resultMap:用来描述数据库结果集和对象的对应关系
➣ sql:可以重用的 SQL 块,也可以被其他语句引用
➣ insert:映射插入语句
➣ update:映射更新语句
➣ delete:映射删除语句
➣ select:映射查询语句
关于 MyBatis 的 SQL 映射文件中的 mapper 元素的 namespace 属性有如下要求。
(1) namespace 的命名必须跟某个 DAO 接口同名,同属于 DAO 层,故代码结构上,映射文件与该 DAO 接口应放置在同一 package 下,并且习惯上都是以 Mapper 结尾( UserMapper.java、 UserMapper.xml)。
(2)在不同的 mapper 文件中,子元素的 id 可以相同,MyBatis 通过 namespace 和子元素的 id 联合区分。接口中的方法与映射文件中 SQL 语句 id 应一一对应。
Mybatis 中的别名
完全限定名:如:cn.mybatis.pojo.User
别名:User / user
对于普通的 Java 类型,有许多内建的类型别名,并且它们对大小写不敏感。如:基础数据类型 “string” ,这是一个别名,代表 String ,属于一个内建的类型别名。
| 别名 | string | int | byte | long | short | integer | arraylist | double | float | boolean | date | map | hashmap | list | decimal | bigdecimal | object | collection | iterator |
| 映射的类型 | String | Integer | Byte | Long | Short | Integer | ArrayList | Double | Float | Boolean | Date | Map | HashMap | List | BigDecimal | BigDecimal | Object | Collection | Iterator |
说明:
1、除了内建的类型别名外,还可以为自定义的类设置别名,使用 ( typeAliases )在 mybatis-config.xml 中的设置,在映射文件中可直接使用别名,以减少配置文件的代码。
2、别名对大小写不敏感,即不区分大小写。
select 元素
select:表示查询语句,是 MyBatis 最常用的元素之一,select 语句有很多属性可以详细配置每一条语句。
常用属性如下:
id 属性:命名空间中唯一的标识符,与 DAO 接口中某一方法名一一对应,可以被用来引用这条语句。DAO 接口中的方法名与映射文件中的 SQL 语句 id 一一对应。
resultType 属性:表示 SQL 查询语句返回值类型的完全限定名或别名。
parameterType 属性:表示查询语句传入参数的类型的完全限定名或别名。它支持基础数据类型和复杂数据类型。说明:参数传递使用 #{参数名}
基础数据类型:int、String、Date等,只能传入一个,通过#{参数名}即可获取传入的值。
复杂数据类型:Java实体类、Map等,通过 #{属性名} 或者 #{map 的 keyName}即可获取传入值
说明:
1、insert、update、delete 元素的 id 属性、parameter 属性与 select 元素用法一样。
2、insert、update、delete 元素中均没有 resultType 属性,只有查询操作需要对返回结果类型(resultType / resultMap)进行相应的指定。
Mybatis 的 SQL 映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace=""> <select id="" resultType="" parameterMap="">
SQL 语句 ......
</select> </mapper>
MyBatis 的基本要素—SQL 映射文件的更多相关文章
- 初始MyBatis、SQL映射文件
MyBatis入门 1.MyBatis前身是iBatis,是Apache的一个开源项目,2010年这个项目迁移到了Google Code,改名为MyBatis,2013年迁移到GitHub.是一个基于 ...
- Mybatis sql映射文件浅析 Mybatis简介(三)
简介 除了配置相关之外,另一个核心就是SQL映射,MyBatis 的真正强大也在于它的映射语句. Mybatis创建了一套规则以XML为载体映射SQL 之前提到过,各项配置信息将Mybatis应用的整 ...
- Mybatis sql映射文件浅析 Mybatis简介(三) 简介
Mybatis sql映射文件浅析 Mybatis简介(三) 简介 除了配置相关之外,另一个核心就是SQL映射,MyBatis 的真正强大也在于它的映射语句. Mybatis创建了一套规则以XML ...
- MyBatis -- sql映射文件具体解释
MyBatis 真正的力量是在映射语句中. 和对等功能的jdbc来比价,映射文件节省非常多的代码量. MyBatis的构建就是聚焦于sql的. sql映射文件有例如以下几个顶级元素:(按顺序) cac ...
- MyBatis 创建核心配置文件和 SQL 映射文件
Mybatis 的两个配置文件(mybatis-config.xml 和 xxxMapper.xml)都为 xml 类型,因此在 eclipse 中创建 xml 文件命名为相应的 mybatis-c ...
- SSM - Mybatis SQL映射文件
MyBatis 真正的力量是在映射语句中.和对等功能的jdbc来比价,映射文件节省很多的代码量.MyBatis的构建就是聚焦于sql的. sql映射文件有如下几个顶级元素:(按顺序) cache配置给 ...
- Mybatis中的Mapper.xml映射文件sql查询接收多个参数
我们都知道,在Mybatis中的Mapper.xml映射文件可以定制动态SQL,在dao层定义的接口中定义的参数传到xml文件中之后,在查询之前mybatis会对其进行动态解析,通常使用#{}接收 ...
- Mybatis(二) SQL映射文件
SQL映射文件 单条件查询 1. 在UserMapper接口添加抽象方法 //根据用户名模糊查询 List<User> getUserListByName(); 2. 在UserMappe ...
- Mybatis SQL映射文件详解
Mybatis SQL映射文件详解 mybatis除了有全局配置文件,还有映射文件,在映射文件中可以编写以下的顶级元素标签: cache – 该命名空间的缓存配置. cache-ref – 引用其它命 ...
随机推荐
- C#中,JSON字符串转换成对象。
在前台提交(post)的数据中.除了强类型的数据外,还有一个额外的json数据提交 在这里我的办法是,在前台把json对象转换成字符串,然后提交. 测试demo 前台: @using(Html.Beg ...
- sql 2005 win7 64 数据引擎
有个箭头,下拉,选择服务器名(就是本机的名称),如果没有就选择浏览更多,看能搜索出不还没的话就手动输入localhost
- HDU 1517:A Multiplication Game
A Multiplication Game Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- hdoj--1877--又一版 A+B(水题)
又一版 A+B Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- libnids TCP数据流重组,显示TCP连接过程的程序总无法捕获数据包解决办法:
法一: 指定可用网卡: nids_params.device="lo"; 法二: nids.h中有这么一段: struct nids_chksum_ctl { u_int ne ...
- bzoj 1621: [Usaco2008 Open]Roads Around The Farm分岔路口【dfs】
模拟就行--讲道理这个时间复杂度为啥是对的??? #include<iostream> #include<cstdio> using namespace std; int k, ...
- Ray Wenderlich 的 Objective-C编码规范
由于我正在准备模仿饿了么这个app,到时可能有些iOS开发者参与进来.这时如果每个人的Objective-C编码风格都不一样,这样不易于保持代码一致性和难以Code Review.所以我在网上搜索到 ...
- System.AppDomain类详解(一)
AppDomain是CLR(Common Language Runtime:公共语言运行库),它可以加载Assembly.创建对象以及执行程序. AppDomain是CLR实现代码隔离的基本机制. 每 ...
- 观察者模式(observer)c++实现
1意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 2别名 依赖(Dependents), 发布-订阅(Publish-Subscribe ...
- MVC之模型绑定
1.前言 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方 ...