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

本文共 3537 字,大约阅读时间需要 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。

接口方法定义:

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

配置文件中添加映射:

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

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

接口方法定义:

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

配置文件中添加映射:

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

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

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

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

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

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

在接口中定义方法:

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

配置文件中添加映射:

(2)分步查询实现

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

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

配置文件中添加映射:

(3)多列值传递

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

5. 判别器(discriminator)

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

resultMap中添加判别条件:

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

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

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

你可能感兴趣的文章
node防xss攻击插件
查看>>
noi 1996 登山
查看>>
noi 7827 质数的和与积
查看>>
NOI2010 海拔(平面图最大流)
查看>>
NOIp2005 过河
查看>>
NOIP2011T1 数字反转
查看>>
NOIP2014 提高组 Day2——寻找道路
查看>>
NOIp模拟赛二十九
查看>>
Nokia5233手机和我装的几个symbian V5手机软件
查看>>
Non-final field ‘code‘ in enum StateEnum‘
查看>>
none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
查看>>
None还可以是函数定义可选参数的一个默认值,设置成默认值时实参在调用该函数时可以不输入与None绑定的元素...
查看>>
NOPI读取Excel
查看>>
NoSQL&MongoDB
查看>>
NoSQL介绍
查看>>
Notadd —— 基于 nest.js 的微服务开发框架
查看>>
Notepad ++ 安装与配置教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
Notepad++在线和离线安装JSON格式化插件
查看>>
notepad++最详情汇总
查看>>
notepad如何自动对齐_notepad++怎么自动排版
查看>>