mybatis映射文件属性详解和动态SQL笔记

<SELECT>

id = ""  唯一标识
parameterType = "" 表示传入SQL语句的参数类的全限定名或者别名,它是一个可选属性,因为
mybatis可以根据TypeHandler 推断出具体传入的参数.默认值为unset(依赖于驱动)
resultType = "" 从SQL中返回的参数类型的全限定名或者别名.如果是集合类型,那么返回的应该
就是集合可以包含的类型,返回时可以使用resultType 或 resultMap
resultMap = "" 表示外部resultMap的命名引用.返回时可以使用resultMap或者resultType
flushCache 表示在调用sql语句后 是否需要MyBatis 清空之前查询的本地缓存和二级缓存.值
为布尔值 默认为false.如果设置为true,任何时候只要SQL语句被调用,都会清空本地缓存和
二级缓存.
useCache 用于控制二级缓存的开启和关闭.其值为布尔值 默认为true 表示查询结果存入二级缓存
timeout 用于设置超时时间 单位秒 超出时抛出异常
fetchSize 获取记录的总条数设定 其默认值为unset
statementType 用于设置mybatis使用哪个JDBC的Statement工作,其值为 STATEMENT PREPARED(默认)
和CALLABLE,分别对应JDBC中的Statement PreparedStatement和CallableStatement
resultSetType = "" 指定结果集的类型 可设置为 FORWARD_ONLY SCROLL_SENSITIVE或SCROLL_INSENSITIVE
默认值依赖于驱动

<insert>

 keyProperty="id" (仅在insert和update有用) 此属性作用将插入或更新操作时的返回值赋值给实体类的某个属性,
通常会设置主键,如果为联合主键多个值之间用逗号隔开
keyColumn = "" (仅在insert和update有用) 此属性用于设置第几列是主键,当主键列不是表中的第一列时需要设置.
联合主键时,逗号隔开
useGeneratedKeys = "" (仅在insert和update有用) 此属性会使Mybatis使用JDBC的getGeneratedKeys()
方法来获取数据库内部产生的主键,如MySql和sqlServer自动递增的字段,默认为false.
主键不支持自动增长或者 数据库中没有设置为自定增长
<selectKey keyProperty="id" resultType="Integer" order="BEFORE" >
select if(max(id) is null , 1, max(id) +1) as newId from 表名
</selectKey>
order="" 属性可以被设置为BEFORE或AFTER。如果设置为BEFORE,那么它会首先执行<selectKey>元素中的配置来设置
主键,然后执行插入语句;如果设置为AFTER,那么它会先执行插入语句,然后执行<selectKey>元素中的配置内容

<update>

update 和 delete属性一致  与insert一样执行完后返回一条记录整数

<resultMap>

<resultMap id="resultMap" type="com.example.mybatisplus.pojo.User">
<constructor>
<idArg column="id" javaType="Integer"/>
<arg column="name" javaType="String"/>
<arg column="age" javaType="Integer"/>
</constructor>
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<result property="createTime" column="create_time"/>
<association property="id"/>
<collection property="id" />
<discriminator column="" javaType="">
<case value="1" resultMap="" resultType=""/>
<case value="0" resultMap="" resultType=""/>
</discriminator>
</resultMap>

<resultMap> 元素表示结果映射集,是MyBatis中最重要也是最强大的元素。它的主要作用是定义映射规则、级联的更新以及
定义类型转化器等。
id = "" 唯一标识
type = "" 需要映射的实体
子元素<constructor>用于配置构造方法(当一个POJO中未定义无参的构造方法时,就可以使用<constructor>元素进行配置)
子元素 <id/> 用于表示哪个列是主键
子元素<result/>用于表示POJO和数据表中普通列的映射关系 属性property="id" 表示实体类属性名,column 表示数据表列名
<association>和<collection>用于处理多表时的关联关系
<discriminator>元素主要用于处理一个单独的数据库查询返回很多不同数据类型结果集的情况。
column="" 设置要进行鉴别比较值的列名。
javaType="" 指定列的类型,保证使用相同的Java类型来比较值。
<case value="">
value:该值为discriminator标签column属性用来匹配的值。
resultMap:当column的值和value的值匹配时,可以配置使用resultMap指定的映射,resultMap优先级高于resultType。
resultType:当column的值和value的值匹配时,用于配置使用resultType指定的映射
</case>
</discriminator>

动态SQL

  <if test="name != null and name != '' ">
like concat('%', #{xxx}, '%')
</if>
问题? 如果想要更新某一个对象,就需要发送所有的字段给持久化对象,然而实际应用中,大多数情况下都是更新的某一个或几个字段。
如果更新的每一条数据都要将其所有的属性都更新一遍,那么其执行效率是非常差的。
方案: 使用了<set>和<if>元素相结合的方式来组装update语句。其中<set>元素会动态前置SET关键字,同时也会消除SQL语句中最后一个多余的逗号;
<if>元素用于判断相应的字段是否传入值,如果传入的更新字段非空,就将此字段进行动态SQL组装,并更新此字段,否则此字段不执行更新。
<set>
<if test="name != null and name != '' ">
name = #{xxx},
</if>
<if test="age != null and age != '' ">
age = #{xxx},
</if>
</set>

in
<foreach collection="list" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
· item:配置的是循环中当前的元素。
· index:配置的是当前元素在集合的位置下标。
collection:配置的list是传递过来的参数类型(首字母小写),它可以是一个array、list(或collection)、Map集合的键、
POJO包装类中数组或集合类型的属性名等。
· open和close:配置的是以什么符号将这些集合元素包装起来。
· separator:配置的是各个元素的间隔符。
like concat('%', #{xxx}, '%') concat在oracle中无效 此时需要使用<bind>元素拼接
<select>
<bind name = "pattern_name" value = " '%'+ name +'%' "/>
select * from user
where name like #{pattern_name}
</select>
value = " '%'+ name +'%' " name 可以写_parameter.getName()也可以直接使用传入的字段属性名 既name


mybatis复习(三)映射文件属性详解和动态SQL的更多相关文章

  1. Mybatis(三) 映射文件详解

    前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...

  2. Mybatis SQL映射文件详解

    Mybatis SQL映射文件详解 mybatis除了有全局配置文件,还有映射文件,在映射文件中可以编写以下的顶级元素标签: cache – 该命名空间的缓存配置. cache-ref – 引用其它命 ...

  3. MyBatis 映射文件详解(六)

    MyBatis 配置文件类型 MyBatis配置文件有两种类型,如下: 全局配置文件(如 mybatis-config.xml) Mapper XML 映射文件(如 UserMapper.xml) 上 ...

  4. Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(转)

    通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车,开始美好的旅程! 本篇是在SSM框架基础上进行的. 参考文章: 1.Quartz学习——Qua ...

  5. [转]hibernate三种状态详解

    本文来自 http://blog.sina.com.cn/u/2924525911 hibernate 三种状态详解 (2013-04-15 21:24:23) 转载▼   分类: hibernate ...

  6. 多表连接的三种方式详解 hash join、merge join、 nested loop

    在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的连接方式.多表之间的连接有三种方式:Nested Loops,Hash Join 和 Sort Merge Join.具体适用哪 ...

  7. elasticsearch系列三:索引详解(分词器、文档管理、路由详解(集群))

    一.分词器 1. 认识分词器  1.1 Analyzer   分析器 在ES中一个Analyzer 由下面三种组件组合而成: character filter :字符过滤器,对文本进行字符过滤处理,如 ...

  8. 《深入理解mybatis原理6》 MyBatis的一级缓存实现详解 及使用注意事项

    <深入理解mybatis原理> MyBatis的一级缓存实现详解 及使用注意事项 0.写在前面   MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓 ...

  9. Hexo系列(三) 常用命令详解

    Hexo 框架可以帮助我们快速创建一个属于自己的博客网站,熟悉 Hexo 框架提供的命令有利于我们管理博客 1.hexo init hexo init 命令用于初始化本地文件夹为网站的根目录 $ he ...

  10. 【C/C++开发】C++11 并发指南三(std::mutex 详解)

    本系列文章主要介绍 C++11 并发编程,计划分为 9 章介绍 C++11 的并发和多线程编程,分别如下: C++11 并发指南一(C++11 多线程初探)(本章计划 1-2 篇,已完成 1 篇) C ...

随机推荐

  1. [golang] 变量声明和初始化 var, :=, new() 和 make()

    [golang] 变量声明和初始化 var, :=, new() 和 make() 说明 go语言中,提供了多种变量声明和初始化的方法.这里着重一一说明.并提供一个简单的指南. 指南 使用make() ...

  2. Java 递归方法的使用 + 例子

    1 /* 2 * 递归方法的使用 3 * 1.递归方法:一个方法体内调用它自身 4 * 2.方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制 5 * 递归一定要想已知方向 ...

  3. 被 两个 vetur 玩惨了的几天,可不是vue-helper的锅

    最近由idea 转 vscode,因为 由原来一个项目变成7个项目了,2G内存不够看. 然后发现点击组件跳转不好使,装个vue-helper也是有一部分不好使. 下载vue-helper源码一通查,发 ...

  4. Python使用pyecharts库构建股票交易 可交互可视化展示——基于Tushare大数据开放社区

    Python使用pyecharts库构建股票交易 可交互可视化展示--基于Tushare大数据社区 1.前言 大家好!欢迎各位访问我的博客,今天给大家分享的是 python使用pyecharts库构建 ...

  5. 用python进行二进制bin文件合并

    一 基本概念 bin文件合并是嵌入式中常用的,这里给一个实例. 二  实例分析 import os import argparse import hashlib offset1 = 0x0010000 ...

  6. MYSQL 是如何保证binlog 和redo log同时提交的?

    MYSQL 一个事务在提交的时候能够保证binlog和redo log是同时提交的,并且能在宕机恢复后保持binlog 和redo log的一致性. 先来看看什么是redo log 和binlog,以 ...

  7. libwebsockets支持外部eventloop变更

    早些年还在使用2.4+版本,现在最新版已经到4.1+,centos 7也使用3.+版本.对于使用外部eventloop相关的接口发生了大的变更.libev也应为早早对iouring支持,4+版本亲睐l ...

  8. SparseTable ST表

    Sparse Table ST表是一个静态二维数组st[i][j],作用是快速查询(O(1))区间最值(不只是最值,可重复贡献问题都可以用),st[i][j]代表的是在以引索i为起点,长度为\(2^j ...

  9. postgresql关于array类型有交集(包含查询数据任意元素,有重叠&&)的一些查询方法以及sqlalchemy语句实现

    表接结构如下 class MachineFixDoc(Base): """ 设备报修单,代理或用户向公司申请报修 """ __tablena ...

  10. 【Oracle】通过LogMiner实现Oracle数据同步迁移

    写在前面 最近在研究如何实现Oracle数据库之间的数据同步,网上的资料确实比较少.最好用的Oracle数据库同步工具是:GoldenGate ,而GoldenGate是要收费的.那么还有什么好的办法 ...