目录
概述
作用
Mapper文件的引入
1.使用类路径引入
2.使用本地文件路径引入
3.使用接口类引入
4.使用包名引入
映射文件
主要元素
select标签
select标签常用属性
传递多个参数
1.使用Map传递参数
2. 使用注解传递参数
3.使用JavaBean传递参数
区别
编写mapper接口需要遵循的原则
Mapper映射器是MyBatis中最重要的文件,文件中包含乙组SQL语句(例如查询、添加、删除、修改),这些语句称为映射语句或者SQL映射语句。
一个完整的映射器有Java接口和XML文件(或注解)共同组成,它的作用包括:
- 定义参数类型
- 配置缓存
- 提供SQL语句和动态SQL
- 定义查询结果和POJO的映射关系
在配置文件中,
元素名称 |
描述 |
备注 |
mapper |
映射文件的根节点,只有 |
|
select |
查询语句,最常用、最复杂的元素之一 |
可以自定义参数,返回结果集等 |
insert |
插入语句 |
执行后返回一个整数,代表插入的条数 |
update |
更新语句 |
执行后返回一个整数,代表更新的条数 |
delete |
删除语句 |
执行后返回一个整数,代表删除的条数 |
parameterMap |
定义参数映射关系 |
即将被删除的元素,不建议使用 |
sql |
允许定义一部分的 SQL,然后在各个地方引用它 |
例如,一张表列名,我们可以一次定义,在多个 SQL 语句中使用 |
resultMap |
用来描述数据库结果集与对象的对应关系,它是最复杂、最强大的元素 |
提供映射规则 |
cache |
配置给定命名空间的缓存 |
- |
cache-ref |
其它命名空间缓存配置的引用 |
- |
在MyBatis中,select标签用于映射查询操作。
以上是一个id为selectWebsiteListLikeName的映射语句,参数类型为String,返回结果类型为Website。执行SQL语句时可以定义参数,参数可以是一个简单地参数类型,例如int、float、String;也可以是一个复杂的参数类型,例如JavaBean、Map等。MyBatis提供了强大的映射规则,执行SQL后,MyBatis会将结果集自动映射到指定的JavaBean中。
结果集自动映射规则
为了使数据库的查询结果和返回值类型中的属性能够自动匹配,通常会对
MySQL
数据库表字段名和JavaBean
采用同一套命名规则,即 Java 命名驼峰规则,这样就不需要再做映射了(数据库表字段名和属性名不一致时需要手动映射)。
属性名称 |
描 述 |
备注 |
id |
它和 |
如果命名空间+id不唯一,那么 MyBatis 会抛出异常 |
parameterType |
表示传入 |
支持基本数据类型和 JavaBean、Map 等复杂数据类型 |
resultType |
|
- |
resultMap |
它是映射集的引用,与 |
是 MyBatis 最复杂的元素,可以配置映射规则、级联、typeHandler 等 |
现在需要根据url和name来模糊查询网站信息,显然这涉及到了两个参数。给映射器传递多个参数分为以下三种方法。
使用MyBatis提供的Map接口作为参数。
在WebsiteMapper.xml中定义
在WebsiteMapper接口中定义方法selectWebsiteByMap
public List selectWebsiteByMap(Map params);
使用MyBatis的注解@Param()传递参数
在WebsiteMapper接口中定义方法selectWebsiteByAn()
public List selectWebsiteByAn(@Param("name") String name, @Param("url") String url);
在参数过多的情况下,MyBatis允许组织一个JavaBean,通过简单地setter和getter方法设置参数,提高可读性。
public List selectWebsiteByAn(Website website);
注意:
由于应声文件中statement的parameterType配置只能有一个,所以Mapper接口中发方法的参数只能有一个。
由于DAO层的代码是被业务层调用的,业务层的方法参数不可能只有一个(考虑到业务层逻辑的扩展),所以当业务层调用DAO层的时候,需要将参数适当包装成POJO对象,去调用DAO层的代码。
所以,系统中需要定义适当的POJO类型对象,作为持久层方法的输入参数。