MyBatis中SQL映射文件
Posted 一宿君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis中SQL映射文件相关的知识,希望对你有一定的参考价值。
学习目标
- 列举下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语句返回值类型的完整类名或别名
#{}和${}的区别演示
以上是关于MyBatis中SQL映射文件的主要内容,如果未能解决你的问题,请参考以下文章