一  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系列文章


浅谈JavaWeb架构演变

浅谈mybatis如何半自动化解耦

详解mybatis配置文件

四  参考文献


【01】http://www.mybatis.org/mybatis-3/zh/configuration.html#

五 版权区


  • 转载博客,必须注明博客出处
  • 博主网址:http://www.cnblogs.com/wangjiming/
  • 如您有新想法,欢迎提出,邮箱:2098469527@qq.com

详解mybatis映射配置文件的更多相关文章

  1. Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...

  2. 详解Mybatis拦截器(从使用到源码)

    详解Mybatis拦截器(从使用到源码) MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能. 本文从配置到源码进行分析. 一.拦截器介绍 MyBatis 允许你在 ...

  3. HTTPD之二————HTTPD服务详解————httpd的配置文件常见设置

    HTTPD之二----HTTPD服务详解----httpd的配置文件常见设置 HTTP服务器应用 http服务器程序 httpd apache nginx lighttpd 应用程序服务器 IIS,a ...

  4. Mybatis基础:Mybatis映射配置文件,Mybatis核心配置文件,Mybatis传统方式开发

    一.Mybatis快速入门 1.1 框架介绍 框架是一款半成品软件,我们可以基于这个半成品软件继续开发,来完成我们个性化的需求! 框架:大工具,我们利用工具,可以快速开发项目 (mybatis也是一个 ...

  5. 详解mybatis配置文件

    在前面两篇文章中,大致与大家分享了基于Java的ORM框架,Mybatis基本架构和Mybatis实现CRUD的基本原理与流程,在本篇文章中,继续与大家分享Mybatis配置文件. 通过研究Mybat ...

  6. mybatis 学习笔记 -详解mybatis 及实例demo

    快速入门1 要点: 首先明白mybatis 是什么 这是一个持久层的框架.之前叫做ibatis.所以,在它的代码中出现ibatis这个词的时候,不要感到惊讶.不是写错了,它确实就是这个样子的. 首先, ...

  7. yum 命令详解-yum仓库配置文件详解

    yum安装的优点 1.必须得有网络,通过网络获取软件. 2.管理rpm包 3.自动解决依耐 4.命令简单好用 5.生产最佳实践 yum命令详解 # linux安装软件的三种方式 1.rpm安装 2.源 ...

  8. 深入详解Mybatis的架构原理与6大核心流程

    MyBatis 是 Java 生态中非常著名的一款 ORM 框架,目前在一线互联网大厂中应用广泛,Mybatis已经成为了一个必会框架. 如果你想要进入一线大厂,能够熟练使用 MyBatis 开发已经 ...

  9. MyBatis映射配置文件详解

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-// ...

随机推荐

  1. hashmap,hashTable concurrentHashMap 是否为线程安全,区别,如何实现的

    线程安全类 在集合框架中,有些类是线程安全的,这些都是jdk1.1中的出现的.在jdk1.2之后,就出现许许多多非线程安全的类. 下面是这些线程安全的同步的类: vector:就比arraylist多 ...

  2. Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class android.sup

    解决:找不到资源文件: 系统会根据分辨率来选择加载不同drawable下文件夹的资源,如果只在一个文件下放了资源文件,不同的分辨率设备的会报错.

  3. Hbuilder之开发Python

    .开发之前,安装Python 3.6 在Mac上安装Python 如果你正在使用Mac,系统是OS X 10.8~10.10,那么系统自带的Python版本是2.7.要安装最新的Python 3.6, ...

  4. 浅谈java中的"=="和eqals区别

    在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String(&qu ...

  5. MySQL中横表和竖表相互转换

    一  竖表转横表 1. 首先创建竖表 create table student ( id varchar(32) primary key, name varchar (50) not null, su ...

  6. Hessian基础入门案例

    Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单.快捷.采用的是二进制RPC协议,因为采用的是二进制协 ...

  7. Springboot+Atomikos+Jpa+Mysql实现JTA分布式事务

    1 前言 之前整理了一个spring+jotm实现的分布式事务实现,但是听说spring3.X后不再支持jotm了,jotm也有好几年没更新了,所以今天整理springboot+Atomikos+jp ...

  8. SSM-MyBatis-09:Mybatis中SqlSession的close为什么能造成事务的回滚

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 经过上几次的查找,笔者我就简单的说一下查找的思路,留给读者自己实践 同样找到sqlsession的实现类,-- ...

  9. Java公开课-02.抽象类和接口

    在讲述抽象类和接口之前,扯点别的:封装,继承,多态,我只做个简单的涉略 一,封装 1.体现: 将变量和方法放到一个类中 私有字段封装成共有属性 2.this: 如果发现成员变量的名称和方法参数的名称相 ...

  10. 关于Linux虚拟化技术KVM的科普 科普一(先用起来!)

    是骡子是马是拉出来溜溜,通过<KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机>跑一遍,就会对KVM.QEMU-KVM有个大概的认识了. qemu-kvm已经不单独存在,qemu加上 ...