详解mybatis映射配置文件
一 mybatis 映射文件结构
mybatis映射配置文件存在如下顶级元素,且这些元素按照如下顺序被定义。
- cache – 给定命名空间的缓存配置。
- cache-ref – 其他命名空间缓存配置的引用。
- resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
- parameterMap – 已废弃!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除,这里不会记录。
- sql – 可被其他语句引用的可重用语句块。
- insert – 映射插入语句
- update – 映射更新语句
- delete – 映射删除语句
- select – 映射查询语句
二 mybatis映射配置文件顶级元素分析
(一)CRUD
在映射配置文件中,基本的CRUD操作定义如下
<!--select by id-->
<select id="getUserInfoById" resultType="UserInfo">
SELECT user_name ,user_addr FROM user_info WHERE user_id=#{user_id}
</select> <!--insert-->
<insert id="addUserInfo" useGeneratedKeys="true">
INSERT INTO user_info(user_name,user_addr)VALUES(#{user_name},#{user_addr})
</insert> <!--update-->
<update id="updateUserInfo">
UPDATE user_info set user_name=#{user_name} WHERE user_id=#{user_id}
</update> <!--delete-->
<delete id="delUserInfoById">
DELETE FROM user_info WHERE user_id=#{user_id}
</delete>
1.#{}表示占位符,相当于?,#{}需要经过预处理,能防止SQL漏洞注入,当然,也可以使用${},只是不能防止漏洞注入。
2.select语句有很多属性
id -- 唯一标识select语句
parameterType --参数类型
paramerterMap -- 参数映射
resultType -- 返回类型
resultMap -- 返回类型映射
flushCache -- 当语句被调用时,是否清除本地缓存或二级缓存
useCache -- 是否使用二级缓存
timeout -- 在抛出异常之前,驱动程序等待数据库返回请求结果的秒数
fetchSize -- 每次批量返回的结果行数
statementType -- 使用STATEMENT,PREPARED 或 CALLABLE 的一个
resultSetType -- 使用FORWARD_ONLY,SCROLL_SENSITIVE 或 SCROLL_INSENSITIVE 中的一个
<select
id="selectPerson"
parameterType="int"
parameterMap="deprecated"
resultType="hashmap"
resultMap="personResultMap"
flushCache="false"
useCache="true"
timeout="10000"
fetchSize="256"
statementType="PREPARED"
resultSetType="FORWARD_ONLY">
(二)resultType
resultType可表示返回基本类型,也可表示返回复杂对象类型(包括自定义类型)
1.返回基本类型
<select id="listUserInfo" resultType="int">
SELECT userId FROM user_info
</select>
2.返回复杂类型
<select id="getUserInfoById" resultType="UserInfo">
SELECT user_name ,user_addr FROM user_info WHERE user_id=#{user_id}
</select>
(三)resultMap
resultMap主要解决TABLE字段与JavaBean映射不匹配问题。
举个例子:
定义一个JavaBean
public class UserInfo {
String userName;
String addr;
//setter和getter
}
SQL语句:
DROP TABLE IF EXISTS `user_info`;
CREATE TABLE `user_info` (
`user_id` int(5) NOT NULL AUTO_INCREMENT,
`user_name` varchar(50) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`user_addr` varchar(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
PRIMARY KEY (`user_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; SET FOREIGN_KEY_CHECKS = 1;
通过如上发现,user_name与userName不匹配,user_addr与addr不匹配。
通过resultMap就能很好地解决该问题
<resultMap id="userInfoMap" type="UserInfo">
<result property="userName" column="user_name"/>
<result property="addr" column="user_addr"/>
</resultMap>
property表示JavaBean,column表示table字段
(四)SQL
sql语句,定义可重用语句。
<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.addr </sql>
引定义好的sql
<select id="listUserInfo" resultMap="userInfoMap">
SELECT
<include refid="userColumns">
<property name="alias" value="t1"/>
</include>
FROM user_info t1
</select>
(五)cache &cache-ref
cache和cache-ref比较重要,放在下篇文章讲解。
三 Mybatis系列文章
四 参考文献
【01】http://www.mybatis.org/mybatis-3/zh/configuration.html#
五 版权区
- 转载博客,必须注明博客出处
- 博主网址:http://www.cnblogs.com/wangjiming/
- 如您有新想法,欢迎提出,邮箱:2098469527@qq.com
详解mybatis映射配置文件的更多相关文章
- Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件
封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...
- 详解Mybatis拦截器(从使用到源码)
详解Mybatis拦截器(从使用到源码) MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能. 本文从配置到源码进行分析. 一.拦截器介绍 MyBatis 允许你在 ...
- HTTPD之二————HTTPD服务详解————httpd的配置文件常见设置
HTTPD之二----HTTPD服务详解----httpd的配置文件常见设置 HTTP服务器应用 http服务器程序 httpd apache nginx lighttpd 应用程序服务器 IIS,a ...
- Mybatis基础:Mybatis映射配置文件,Mybatis核心配置文件,Mybatis传统方式开发
一.Mybatis快速入门 1.1 框架介绍 框架是一款半成品软件,我们可以基于这个半成品软件继续开发,来完成我们个性化的需求! 框架:大工具,我们利用工具,可以快速开发项目 (mybatis也是一个 ...
- 详解mybatis配置文件
在前面两篇文章中,大致与大家分享了基于Java的ORM框架,Mybatis基本架构和Mybatis实现CRUD的基本原理与流程,在本篇文章中,继续与大家分享Mybatis配置文件. 通过研究Mybat ...
- mybatis 学习笔记 -详解mybatis 及实例demo
快速入门1 要点: 首先明白mybatis 是什么 这是一个持久层的框架.之前叫做ibatis.所以,在它的代码中出现ibatis这个词的时候,不要感到惊讶.不是写错了,它确实就是这个样子的. 首先, ...
- yum 命令详解-yum仓库配置文件详解
yum安装的优点 1.必须得有网络,通过网络获取软件. 2.管理rpm包 3.自动解决依耐 4.命令简单好用 5.生产最佳实践 yum命令详解 # linux安装软件的三种方式 1.rpm安装 2.源 ...
- 深入详解Mybatis的架构原理与6大核心流程
MyBatis 是 Java 生态中非常著名的一款 ORM 框架,目前在一线互联网大厂中应用广泛,Mybatis已经成为了一个必会框架. 如果你想要进入一线大厂,能够熟练使用 MyBatis 开发已经 ...
- MyBatis映射配置文件详解
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-// ...
随机推荐
- C#高级编程笔记之第三章:对象和类型
类和结构的区别 类成员 匿名类型 结构 弱引用 部分类 Object类,其他类都从该类派生而来 扩展方法 3.2 类和结构 类与结构的区别是它们在内存中的存储方式.访问方式(类似存储在堆上的引用类型, ...
- 完全关闭Hyper-v的方法
众所周知Hyper-v和vmware有冲突,开启Hyper-v功能vmware就不能使用,但即使关闭了也是如此,这是因为功能没有被完全关闭,这里整理下方法,我自己在两台机子亲测有效. win+x,a, ...
- (function($){...})(jQuery) 含义 【转】
经常用,今天总结一下,下文摘自某网友的总结: (function($){...})(jQuery)实际上是匿名函数,不懂得朋友可以继续往下看. 这里实际上是匿名函数 function(arg){... ...
- python while 循环语句
Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务.其基本形式为: while 判断条件: 执行语句-- 执行语句可以是单个语句或语句 ...
- 深入理解.net - 3.类型Type
说到类型,.NET技术是基于通用类型系统(CTS,Common Type System)的,而CTS又是构建于公共语言架构(CLI,Common Language Infrastructure)之上, ...
- OpenApi开放平台架构实践
背景 随着业务的发展,越来越多不同系统之间需要数据往来,我们和外部系统之间产生了数据接口的对接.当然,有我们提供给外部系统(工具)的,也有我们调用第三方的.而这里重点讲一下我们对外的接口. 目前,我们 ...
- 杨老师课堂_Java核心技术下之控制台模拟微博用户注册案例
案例设计背景介绍: 编写一个新浪微博用户注册的程序,要求使用HashSet集合实现. 假设当用户输入用户名.密码.确认密码.生日(输入格式yyyy-mm-dd为正确).手机号码(手机长度为11位,并 ...
- java定时任务调度-Timer(1)
一.定义 有且仅有一个后台线程对多个业务线程进行定时定频率的调度 二. Timer ----> Timer Task (中有run();方法) 通过 new Timer().schedul ...
- Java IO基础总结
Java中使用IO(输入输出)来读取和写入,读写设备上的数据.硬盘文件.内存.键盘......,根据数据的走向可分为输入流和输出流,这个走向是以内存为基准的,即往内存中读数据是输入流,从内存中往外写是 ...
- C# Ioc、DI、Unity、TDD的一点想法和实践
面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP). 依赖倒置原则(DIP):一种软件架构设计的原则(抽象概念) 控制反转( ...