详解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 "-// ...
随机推荐
- MySQL技术内幕 InnoDB存储引擎(笔记)
1. InnoDB 体系架构 其中,后台程序主要负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据. 此外将已经修改的数据刷新到磁盘文件,同时保证在数据库发生异常的时候Innodb能恢复正常 ...
- C# 中Datatime类用法总结
C# 中Datatime类用法总结 收集了一些记录下来,这些有的是从网上找的,有些是自己使用到的: DateTime dt = DateTime.Now; dt.ToString();//2005-1 ...
- python中@classmethod @staticmethod区别
Python中3种方式定义类方法, 常规方式, @classmethod修饰方式, @staticmethod修饰方式. class A(object): def foo(self, x): prin ...
- 第6次结对作业--郑锦伟&古维城
第6次结对作业 在线英语学习平台客户端原型 1.结对成员 郑锦伟 2015034643034 古维城 2015034643033 2.原型设计工具实现-Photoshop 3.需求分析 使用NABCD ...
- 【Android学习笔记】Android Studio简单断点调试
首先点击断点调试按钮运行App 启动之后,会弹出如下图的提示框,不要管,几秒之后这个弹框会自动消失,然后App会成功运行. 下面介绍一下断点调试的相关操作按钮对应的功能: 按钮1的功能:从当前断点跳到 ...
- 令状态寄存器访问指令(MRS,MSR)
ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据. 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器.每个位的含义如下图: 分成了4部分: 1,条件标志位 N(Negative) ...
- python selenium鼠标键盘操作(ActionChains)
用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击.双击.点击鼠标右键.拖拽等等.而selenium给我们提供了一个类来处理这类事件--ActionChains sele ...
- window安装mysql5.7解压版(解决乱码问题)
♣安装mysql两种方法 ♣下载mysql5.7解压版 ♣配置步骤 ♣解决服务无法启动 ♣解决乱码 1.安装mysql两种方法 MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的.如果 ...
- 数码相框(LCD、I2C)
一:项目介绍 该项目最终实现的功能很简单,手指在触摸屏左滑(下一张图片),右滑(上一张图片) 1.1软硬件资源 硬件:pc机,ARM Cortex-A9开发板 软件:linux ...
- Android 自定义ViewGroup手把手教你实现ArcMenu
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37567907 逛eoe发现这样的UI效果,感觉很不错,后来知道github上有这 ...