博客
关于我
学习在IDEA中使用Mybatis(四)select对应参数
阅读量:392 次
发布时间:2019-03-05

本文共 3563 字,大约阅读时间需要 11 分钟。

MyBatis SELECT功能详解

在MyBatis框架中,SELECT功能是用来从数据库中查询数据的核心操作。通过合理配置,可以实现多种复杂的查询场景。本文将从多个维度详细阐述MyBatis的SELECT功能,包括返回值类型、Map、resultMap以及一些高级特性如分步查询和判别器的使用。

1. 返回值类型:List

MyBatis允许将查询结果封装到List中。这种情况下,resultType属性用于指定返回值的JavaBean类型。

配置方法:

在接口中添加如下方法:

List
getEmpsByLastNameLike(String lastName);

在MyBatis配置文件中添加对应的SQL映射:

这里的resultType属性指定了返回值的类型为Employee类。

测试方法:

在单元测试类中添加以下代码:

// 测试方法一:获取以给定姓氏结尾的员工列表
List
emps = mapper.getEmpsByLastNameLike("Li");
System.out.println("查到的员工数量:" + emps.size());
for (Employee emp : emps) {
System.out.println(emp);
}

2. 返回值类型:Map

MyBatis支持将查询结果封装到Map中。根据查询结果的结构,可以选择不同的封装方式。

(1)单条记录的封装

这种情况下,Map的键可以是查询结果的主键值,值是对应的JavaBean对象。

接口方法定义:

Map
getEmpByIdReturnMap(Integer id);

配置文件中添加映射:

注意:resultType在这种情况下必须是map,并且需要指定键和值的类型。

(2)多条记录的封装

这种情况下,Map的键是主键值,值是对应的JavaBean对象集合。

接口方法定义:

Map
getEmpByLastNameLikeReturnMap(String lastName);

配置文件中添加映射:

测试方法:
// 测试方法一:获取单条记录
Map
empMap = mapper.getEmpByIdReturnMap(1);
System.out.println("查到的员工信息:" + empMap);
// 测试方法二:获取多条记录
Map
empMap = mapper.getEmpByLastNameLikeReturnMap("%s");
System.out.println("查到的员工信息:" + empMap);

3. 使用resultMap进行关联查询

resultMap用于定义自定义的结果集映射规则,适用于单表和多表查询。

(1)基本用法

在接口中定义一个方法,返回自定义封装的JavaBean。

接口方法定义:

@Mapper
public interface EmployeeMapper {
@ResultMap(id = "MySimpleEmp")
Employee getEmpById(Integer id);
}

配置文件中添加映射:

(2)关联查询(多表查询)

假设有一个外键关系,Employee表和Department表之间存在d_id外键。

接口方法定义:

@Mapper
public interface EmployeeMapperPlus {
@ResultMap(id = "MyDifEmp")
Employee getEmpAndDept(Integer id);
}

配置文件中添加映射:

(3)分步查询(延迟加载)

为了提高性能,可以使用延迟加载技术。例如,查询Employee对象时,只有在实际需要Department信息时才查询部门信息。

在全局配置文件中添加如下设置:

4. resultMap — collection定义关联集合封装规则

(1)查询部门对应的所有员工

假设Department类中有一个字段List<Employee> emps,用于存储对应的员工信息。

在接口中定义方法:

@Mapper
public interface DepartmentMapper {
@ResultMap(id = "DeptEmpMap")
Department getDeptWithEmps();
}

配置文件中添加映射:

(2)分步查询实现

EmployeeMapper中定义一个方法,用于分步查询部门对应的员工:

@Mapper
public interface EmployeeMapper {
@ResultMap(id = "EmpDeptListMap")
List
getEmpsByDeptId(Integer deptId);
}

配置文件中添加映射:

(3)多列值传递

resultMap中可以通过指定多个column属性来传递多列值。例如:

5. 判别器(discriminator)

MyBatis支持使用discriminator来根据查询结果的某一列值决定返回值的封装方式。例如:

resultMap中添加判别条件:

这种方式可以根据gender列的值决定是否查询部门信息,或者对返回值进行不同的封装。

通过以上方法,可以充分利用MyBatis的SELECT功能,实现复杂的查询场景。

转载地址:http://pvewz.baihongyu.com/

你可能感兴趣的文章
NIO同步网络编程
查看>>
NIO基于UDP协议的网络编程
查看>>
NIO笔记---上
查看>>
NIO蔚来 面试——IP地址你了解多少?
查看>>
NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
查看>>
NISP国家信息安全水平考试,收藏这一篇就够了
查看>>
NIS服务器的配置过程
查看>>
Nitrux 3.8 发布!性能全面提升,带来非凡体验
查看>>
NiuShop开源商城系统 SQL注入漏洞复现
查看>>
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLog类库使用探索——详解配置
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
NLP 模型中的偏差和公平性检测
查看>>
Vue3.0 性能提升主要是通过哪几方面体现的?
查看>>
NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
查看>>
NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
查看>>
NLP三大特征抽取器:CNN、RNN与Transformer全面解析
查看>>
NLP学习笔记:使用 Python 进行NLTK
查看>>
NLP度量指标BELU真的完美么?
查看>>