博客
关于我
学习在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/

你可能感兴趣的文章
NuttX 构建系统
查看>>
NutUI:京东风格的轻量级 Vue 组件库
查看>>