详解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 "-// ...
随机推荐
- HTML学习笔记6:列表标签
列表标签 什么是列表标签呢? 以平台区分有什么游戏? 手游 pc游戏 家用机游戏 掌机游戏 以游戏类型区分有什么游戏? RPG ARPG MMORPG ACT FPS 以上两种就是一种列表标签 ...
- 基于DP的矩阵连乘问题
当多个连续可乘矩阵做乘法时,选择正确的做乘顺序可以有效减少做乘法的次数,而选择的方法可以很容易的通过DP实现. 原理就是对于每一个所求矩阵,搜索所有可以相乘得到它的方法,比较它们的消耗,选取最小值作为 ...
- QT窗体的小技巧
1.界面透明 setWindowOpacity(0.8);//构造函数中加此句,1为不透明,0为完全透明,0.8为80%不透明. 2.设置背景图片 QPixmap pixmap = QPixmap(& ...
- 【转】asp.net获取当前页面的url地址
设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli "http://"是协议名 "www.jb5 ...
- 使用webpack打包后的vue项目如何运行(express)
我们知道使用webpack打包vue项目后会生成一个dist文件夹,dist文件夹下有html文件和其他css.js以及图片等,那么打包后的文件该如何正确运行呢? 倘若直接打开html文件,会报如下错 ...
- HTML DOM对象的属性和方法
HTML DOM对象的属性和方法 HTML DOM 对象有几种类型: 1.Document 类型 在浏览器中,Document 对象表示整个 HTML 文档. 1.1属性 引用文档的子节点 docum ...
- Java并发之Condition
在使用Lock之前,我们使用的最多的同步方式应该是synchronized关键字来实现同步方式了.配合Object的wait().notify()系列方法可以实现等待/通知模式.Condition接口 ...
- 由清除float原理到BFC
关于浮动 设置为浮动的元素会脱离当前文档流,向左或向右移动直到边缘遇到另一个浮动元素或者到达边界.普通元素不会对齐造成影响. 浮动是把双刃剑,在给我们的布局带来便利的同时有一些缺点需要我们去解决.例如 ...
- 二十三、Hadoop学记笔记————Spark简介与计算模型
spark优势在于基于内存计算,速度很快,计算的中间结果也缓存在内存,同时spark也支持streaming流运算和sql运算 Mesos是资源管理框架,作为资源管理和任务调度,类似Hadoop中的Y ...
- jQuery-01:on live bind delegate
摘自:https://www.cnblogs.com/moonreplace/archive/2012/10/09/2717136.html moonreplace这位大牛的 当我们试图绑定一些事件到 ...