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



浅谈JavaWeb架构演变

浅谈mybatis如何半自动化解耦

详解mybatis配置文件

四  参考文献



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

五 版权区


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

原文地址:https://www.cnblogs.com/wangjiming/p/10399333.html

时间: 2024-08-06 12:30:18

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

【Hibernate步步为营】--详解基本映射

Hibernate进行了分类整合发现其实Hibernate分为三大部分:核心对象.映射.HQL,这三大部分开发过程中最常使用,前几篇讨论了核心对象及对象之间的转换方法,接下来讨论Hibernate的映射使用方法. 一.基本用法 Hibernate一个重要的功能就是映射,它能够在对象模型和关系模型之间转换,是面向对象编程思想提倡使用的,使用映射程序开发人员只需要关心对象模型中代码的编写.对象和关系数据库之间的映射通常是由XML文档来定义的.这个映射文档被设计为易读的,并且可以手动修改.这种映射关系

IT段子手详解MyBatis遇到Spring 秒学Java SSM开发大众点评

第1章 课程概览介绍课程目标.开发内容.功能划分.开发顺序,开发所需要的前置知识及环境准备,并且介绍了与课程相关的前后端分离的思想,架构演进过程.1-1 课程导学1-2 功能划分和开发流程1-3 原料准备1-4 武功秘籍 第2章 开发准备演示前端工程环境搭建以及启动步骤,介绍了后台工程初始SSM框架目录结构,将前后端打通,并将后台管理使用的界面原型加入后台工程中,形成一个完整可用的前后台联动的原型.拓展的谈了谈HTTP API和RESTFul API的趣闻.2-1 HTTP API和RESTfu

Haproxy 安装配置详解-端口映射

Haproxy 简介: HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理. HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接.并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上. HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数.多进

Mybatis映射配置文件&lt;select&gt;的学习

resultMap的使用 当查询的表的列名与实体类的属性名不同时,有三种方式来处理: 1.使用SQL的别名 如:select user_name userName from user 2.如果符合驼峰命名,在setting中开启mapUnderscoreToCamelCase 3.设置resultMap,自定义结果集映射规则,不能和resultType同时使用 例: Type指定映射实体类 <resultMap id="BaseResultMap" type="com.

详解MySql的配置文件my.cnf

1.Windows下MySQL的配置文件是my.ini,一般会在安装目录的根目录. 2.Linux下MySQL的配置文件是my.cnf,一般会放在/etc/my.cnf,/etc/mysql/my.cnf 把MySql下面的配置文件my.cnf详细的做一个说明(Linux环境) 查看版本号的sql命令是:select version(); 首先,先找到my.cnf的路径,如果安装的时候没有做什么修改,那么它的默认路径是在“/etc/my.cnf”这个地方.如果找不到也没有关系,我们可以用两步找到

【配置详解】Quartz配置文件详解

#============================================================================# Configure Main Scheduler Properties 调度器属性#============================================================================ # 在集群中每个实例都必须有一个唯一的instanceId,但是应该有一个相同的instanceName

深入浅出mybatis之启动详解

深入浅出mybatis之启动详解 MyBatis功能丰富,但使用起来非常简单明了,今天我们来追踪一下它的启动过程. 目录 如何启动MyBatis 如何使用MyBatis MyBatis启动过程 如何启动MyBatis 我们知道,SqlSessionFactory是MyBatis中最为核心的组件,每个基于MyBatis的应用都是以一个SqlSessionFactory实例为中心的.SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得,而SqlSess

MyBatis的动态SQL详解

MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑,本文详解mybatis的动态sql,需要的朋友可以参考下 MyBatis 的一个强大的特性之一通常是它的动态 SQL 能力.如果你有使用 JDBC 或其他 相似框架的经验,你就明白条件地串联 SQL 字符串在一起是多么的痛苦,确保不能忘了空 格或在列表的最后省略逗号.动态 SQL 可以彻底处理这种痛苦. 通常使用动态SQL不可能是独立的一部分,MyBatis当然使用一种强大的动态SQL语言来改进这种

J2EE进阶(四)Spring配置文件详解

J2EE进阶(四)Spring配置文件详解 前言 Spring配置文件是用于指导Spring工厂进行Bean生产.依赖关系注入(装配)及Bean实例分发的"图纸".Java EE程序员必须学会并灵活应用这份"图纸"准确地表达自己的"生产意图".Spring配置文件是一个或多个标准的XML文档,applicationContext.xml是Spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件. 下面列举的是