第二章,SQL映射文件

Mybatis

文章目录

第二章,SQL映射文件

一,SQL映射的XML文件
  • MyBatis 真正的强大在于映射语句,专注于SQL,功能强大,SQL映射的配置却是相当
  • 简单SQL映射文件的几个顶级元素(按照定义的顺序)
    • mapper -- namespace
    • cache -- 配置给定命名空间的缓存
    • cache-ref -- 从其他命名空间引用缓存配置
    • resultMap --用来描述数据库结果集和对象的对应关系
    • sql -- 可以重用的SQL块,也可以被其他语句引用
    • insert -- 映射插入语句
    • update -- 映射更新语句
    • delete -- 映射删除语句
    • select -- 映射查询语句
二,重要元素
2.1,mapper元素
  • namespace:命名空间
    • namespace和子元素的id联合保证唯一,区别不同的mapper
    • 绑定DAO接口
      • namespace的命名必须跟某个接口同名
      • 接口中的方法与映射文件中SQL语句id一一对应
2.2,select元素
  • select是MyBatis中最常用的元素之一

  • select语句有很多属性可以详细配置每一条语句

    • id:命名空间中唯一的标识符;接口中的方法与映射文件中的SQL语句id一一对应
    • parameterType:传入SQL语句的参数类型
      • 基础数据类型:int、String、Date等;只能传入一个,通过#{参数名}即可获取传入的值
      • 复杂数据类型:Java实体类、Map等;通过#{属性名}或者#{map的keyName}即可获取传入值
    • resultType:SQL语句返回值类型的完整类名或别名
    • resultMap :对外部resultMap的引用
      • 应用场景:数据库字段信息与对象属性不一致;复杂的联合查询,自由控制映射结果
      • resultMap自动映射匹配前提:字段名与属性名一致
      • resultMap的自动映射级别-autoMappingBehavior
        • PARTIAL(默认):自动匹配所有
    • 其中resultType,resultMap二者不能同时存在,本质上都是Map数据结构
    属性 描述
    id 在命名空间中唯一的标识符,可以被用来引用这条语句
    parameterType 将会传入这条语句的参数类的完全限定名或别名
    resultType 从这条语句中返回的期望类型的类的完全限定名或别名。注意集合情形,那应该是集合可以包含的类型,而不能是集合本身。使用resultType或resultMap,但不能同时使用
    resultMap 命名引用外部的resultMap
    flushCache 将其设置为true,不论语句什么时候被调用,都会导致缓存被清空。默认值:false
    useCache 将其设置为true,将会导致本条语句的结果被缓存。默认值:true
    timeout 这个设置驱动程序等待数据库返回请求结果,并抛出异常时间的最大等待值。默认不设置(驱动自行处理)
    fetchSize 这是暗示驱动程序每次批量返回的结果行数
    statementType STATEMENT,PREPARED或CALLABLE的一种。让MyBatis选择使用Statement,PreparedStatement或CallableStatement。默认值:PREPARED
    resultSetType FORWARD_ONLY|SCROLL_SENSITIVE|SCROLL_INSENSITIVE中的一种。默认是不设置(驱动自行处理)
2.3,insert元素
xml 复制代码
<insert  id="add" parameterType="User" >
 insert into  smbms_user (userCode,userName,userPassword) 
		values ( #{userCode},#{userName},#{userPassword})
</insert>
2.4,update元素
xml 复制代码
<update id ="modify" parameterType="User">
update smbms_user set userCode = #{userCode},
	         userName = #{userName},
              userPassword = #{userPassword}  where id = #{id}
</update>
2.5,delete元素
xml 复制代码
<delete id ="deleteUserById" parameterType="int">
	delete from smbms_user where id = #{id}
</delete>
  • 注意:insert、update、delete元素均没有resultType属性
三,resultMap
3.1,resultMap属性
  • id:resultMap的唯一标识;type:Java实体类
3.2,resultMap子元素
  • id:一般对应数据库中该行的主键id,设置此项可提高MyBatis性能
  • result:映射到JavaBean的某个"简单类型"属性
  • association:映射到JavaBean的某个"复杂类型"属性,比如JavaBean类
    • 复杂的类型关联,一对一
    • 内部嵌套:映射一个嵌套JavaBean属性
    • 属性
      • property:映射数据库列的实体对象的属性;javaType:完整Java类名或者别名;resultMap:引用外部resultMap
    • 子元素
      • id
      • result
        • property:映射数据库列的实体对象的属性
        • column:数据库列名或者别名
  • collection:映射到JavaBean的某个"复杂类型"属性,比如集合
    • 复杂类型集合,一对多
    • 内部嵌套:映射一个嵌套结果集到一个列表
    • 属性
      • property:映射数据库列的实体对象的属性;ofType:完整Java类名或者别名(集合所包括的类型);resultMap:引用外部resultMap
    • 子元素
      • id
      • result
        • property:映射数据库列的实体对象的属性
        • column:数据库列名或者别名
四,缓存
4.1,MyBatis缓存
  • 一级缓存
  • 二级缓存
4.2,二级缓存的配置
  • MyBatis的全局cache配置
  • 在Mapper XML文件中设置缓存,默认情况下是没有开启缓存的
  • 在Mapper XML文件配置支持cache后,如果需要对个别查询进行调整,可以单独设置cache
相关推荐
Dylan的码园37 分钟前
以二叉树问题为基础的递归调试学习(上)
java·学习·算法·leetcode·r-tree
少许极端40 分钟前
算法奇妙屋(九)-栈
java·数据结构·算法·
shepherd11144 分钟前
破局延时任务(下):Spring Boot + DelayQueue 优雅实现分布式延时队列(实战篇)
java·spring boot·后端
听风吟丶1 小时前
深入解析 Spring Boot 自动配置:原理、实践与进阶
java·数据库·sql
风语者日志1 小时前
[LitCTF 2023]这是什么?SQL !注一下 !
android·数据库·sql
lang201509281 小时前
Spring Boot 核心技巧与实战指南
java·数据库·spring boot
SimonKing1 小时前
Spring Boot还能这样玩?同时监听多个端口的黑科技
java·后端·程序员
日月星辰Ace1 小时前
JDK 工具学习系列(三):javadoc 命令实用教程
java
亚林瓜子1 小时前
SpringBoot中使用tess4j进行OCR(在macos上面开发)
java·spring boot·macos·ocr·lstm·tess4j
狂团商城小师妹2 小时前
JAVA国际版同城打车源码同城服务线下结账系统源码适配PAD支持Android+IOS+H5
android·java·ios·小程序·交友