(二)MyBatis中SQL映射文件

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。(二)MyBatis中SQL映射文件,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

学习目标

  • 列举下SQL映射文件的几个顶级元素?
  • resultType和resultMap的区别是什么?
  • MyBatis多参数如何处理?有几种方法?
  • mapper元素的namespace属性的作用是什么?
  • 不同的SQL映射文件,元素的id必须不同吗?
  • association和collection元素的理解?

MyBatis基本要素(回顾)

1 核心对象

  • SqlSessionFactoryBuilder
  • SqlSessionFactory
  • SqlSession
  • 通过SqlSession实例直接运行映射的SQL语句
  • 基于mapper接口接口的方式执行SQL语句
    在这里插入图片描述

2 系统核心配置文件

  • properties
  • typeAliases
  • environments
  • mappers

3 SQL映射文件

  • 掌握通过SQL映射文件进行增删改查
  • 掌握参数的作用
  • 掌握resultMap的作用
  • 了解Cache的使用
  • SQL映射文件中几个顶级元素(按照定义的顺序)
    • mapper-namespace(命名空间,在mybatis中,映射文件中的namespace是用于绑定Dao接口的,即面向接口编程。当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应要执行的SQL语句。)
    • cache 配置给定命名空间的缓存
    • cache-ref 从其他命名空间中引入缓存配置
    • resultMap 用来描述数据库结果集和对象的字段对应关系(即使类中属性和数据库表只字段不一致时,可以使用映射)
    • sql 可以重用的SQL块,也可以被其他语句引用
    • insert 映射插入语句
    • update 映射更新语句
    • delete 映射删除语句
    • select 映射查询语句

3.1 mapper

namespace:命名空间

  • namespace和子元素的id联合保证唯一,区别不同的mapper
  • 绑定DAO接口
  • namespace的命名必须跟某个接口同名
  • 接口中的方法与映射文件中的SQL语句id必须一一对应

    小贴士:
    如果namespace处写了mapper文件对应的DAO接口,但是实际却没有创建对应的DAO接口,这时候调用mapper映射文件,执行相应SQL也不会报错,只不过执行id的方法略有不同,MyBatis内部机制在编译执行SQL代码前,先找到对应mapperDao接口,如果没有,则会创建临时的接口,以供执行SQL语句使用。演示如下:
    在这里插入图片描述
    在这里插入图片描述

  • 如果创建了对应的实体类mapper接口,执行SQL,调用id方法执行如下:

    在这里插入图片描述
    在这里插入图片描述

3.2 select

  • select是MyBatis中最常见的元素之一
  • select语句有很多属性可以详细配置每一条语句
  • id

    命名空间中唯一的标识符
    接口中的方法与映射文件中的SQL语句id一一对应

  • parameterType

    传入SQL语句的参数类型
    基础数据类型:

    • int、String、Date
    • 只能传入一个参数,通过 #{参数名} 即可获取传入的值
    • 只能传入一个参数,通过 ${value} 即可获取传入的值,但是此种方法会有注入式攻击,不安全(不推荐使用)
  • #{} 表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。#{}可以有效防止注入。#{}可以接收简单类型或pojo属性值。如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。(推荐使用)
  • ${} 表示拼接SQL串,通过可以将parameterType传入的内容拼接在SQL中,且不进行jdbc转换,可以接收简单类型转换或pojo属性值,如果parameterType传输单个简单类型值,花括号中只能是value。(不推荐使用)

    复杂数据类型:

    • Java实体类、Map等
    • 通过 #{属性名} 或者 #{map的keyName} 即可获取传入值
  • resultType

    SQL语句返回值类型的完整类名或别名

#{}和${}的区别演示
  • #{}可防止注入式攻击——${}会有注入式攻击
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 然后我们所说的注入式攻击如下所示:

    在这里插入图片描述

  • 我们将上述选中的SQL语句赋值到oracle可视化操作工PL/SQL中,显示如下:

    在这里插入图片描述

总结归纳

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/189466.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!