mybatis复习(三)映射文件属性详解和动态SQL
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的更多相关文章
- Mybatis(三) 映射文件详解
前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...
- Mybatis SQL映射文件详解
Mybatis SQL映射文件详解 mybatis除了有全局配置文件,还有映射文件,在映射文件中可以编写以下的顶级元素标签: cache – 该命名空间的缓存配置. cache-ref – 引用其它命 ...
- MyBatis 映射文件详解(六)
MyBatis 配置文件类型 MyBatis配置文件有两种类型,如下: 全局配置文件(如 mybatis-config.xml) Mapper XML 映射文件(如 UserMapper.xml) 上 ...
- Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(转)
通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车,开始美好的旅程! 本篇是在SSM框架基础上进行的. 参考文章: 1.Quartz学习——Qua ...
- [转]hibernate三种状态详解
本文来自 http://blog.sina.com.cn/u/2924525911 hibernate 三种状态详解 (2013-04-15 21:24:23) 转载▼ 分类: hibernate ...
- 多表连接的三种方式详解 hash join、merge join、 nested loop
在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的连接方式.多表之间的连接有三种方式:Nested Loops,Hash Join 和 Sort Merge Join.具体适用哪 ...
- elasticsearch系列三:索引详解(分词器、文档管理、路由详解(集群))
一.分词器 1. 认识分词器 1.1 Analyzer 分析器 在ES中一个Analyzer 由下面三种组件组合而成: character filter :字符过滤器,对文本进行字符过滤处理,如 ...
- 《深入理解mybatis原理6》 MyBatis的一级缓存实现详解 及使用注意事项
<深入理解mybatis原理> MyBatis的一级缓存实现详解 及使用注意事项 0.写在前面 MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓 ...
- Hexo系列(三) 常用命令详解
Hexo 框架可以帮助我们快速创建一个属于自己的博客网站,熟悉 Hexo 框架提供的命令有利于我们管理博客 1.hexo init hexo init 命令用于初始化本地文件夹为网站的根目录 $ he ...
- 【C/C++开发】C++11 并发指南三(std::mutex 详解)
本系列文章主要介绍 C++11 并发编程,计划分为 9 章介绍 C++11 的并发和多线程编程,分别如下: C++11 并发指南一(C++11 多线程初探)(本章计划 1-2 篇,已完成 1 篇) C ...
随机推荐
- 【Azure 云服务】云服务(经典)迁移到云服务(外延支持)的八个问题
问题一:云服务( 经典)迁移到外延支持云服务是否需要停机? 通过平台的迁移工具(即验证.准备.提交)进行迁移没有停机时间.但是如果需要准备满足迁移条件,如删除对等互联,使用其他vnet资源则需要额外的 ...
- 【Azure 环境】Azure门户中 Metrics 图表的聚合指标每项具体代表什么意思呢?
问题描述 下图中,指标里的每项聚合指标具体代表什么呢? 问题解答 Azure Metrics 指标中提供了五种基本的聚合类型. Sum - 在聚合间隔内捕获的所有值的总和. 有时称为总聚合. Coun ...
- [Linux] 快速修改hosts访问github
sudo sed -i '/github/d' /etc/hosts sudo bash -c "curl https://gitlab.com/ineo6/hosts/-/raw/mast ...
- 有了net/http, 为什么还要有gin
1. 简介 在Go语言中,net/http 包提供了一个强大且灵活的标准HTTP库,可以用来构建Web应用程序和处理HTTP请求.这个包是Go语言标准库的一部分,因此所有的Go程序都可以直接使用它.既 ...
- Zabbix“专家坐诊”第181期问答汇总
问题一 Q:大佬们,有没有基础的 监控模板 触发器分享下? A:你可以试一下乐维免费版(https://forum.lwops.cn/download ),里面基本的模板全齐. 问题二 Q :orab ...
- [VueJsDev] 日志 - BBTime-LOG
[VueJsDev] 目录列表 https://www.cnblogs.com/pengchenggang/p/17037320.html BBTime-LOG ::: details 目录 目录 B ...
- 【深度学习基础】基于Numpy的循环神经网络实现和反向传播训练
本文是<深度学习进阶:自然语言处理>.<神经网络与深度学习>和<动手学深度学习>的读书笔记.本文将介绍基于Numpy的循环神经网络的前向传播和反向传播实现,包括RN ...
- 基于ESP8266的JSON解析实例分析
什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.采用完全独立于编程语言的文本格式来存储和表示数据.其简洁和层次结构清晰的特点使得 J ...
- Spring Boot命令指定环境启动jar包
原文地址:Spring Boot命令指定环境启动jar包 - Stars-One的杂货小窝 记下通过命令行的方式去改变spring boot项目中的环境配置信息 命令 项目中有以下配置 applica ...
- Github下载release附件变相提速方法
最近找到了个油猴插件,下载2M/s,推荐大家使用Github 镜像访问,加速下载 描述 github上面有许多开源的软件,作者们都打包发布为release版本,我们可以下载打包好的软件,但是,由于国内 ...