本文共 3563 字,大约阅读时间需要 11 分钟。
在MyBatis框架中,SELECT功能是用来从数据库中查询数据的核心操作。通过合理配置,可以实现多种复杂的查询场景。本文将从多个维度详细阐述MyBatis的SELECT功能,包括返回值类型、Map、resultMap以及一些高级特性如分步查询和判别器的使用。
MyBatis允许将查询结果封装到List中。这种情况下,resultType属性用于指定返回值的JavaBean类型。
在接口中添加如下方法:
ListgetEmpsByLastNameLike(String lastName);
在MyBatis配置文件中添加对应的SQL映射:
这里的resultType属性指定了返回值的类型为Employee类。
在单元测试类中添加以下代码:
// 测试方法一:获取以给定姓氏结尾的员工列表Listemps = mapper.getEmpsByLastNameLike("Li");System.out.println("查到的员工数量:" + emps.size());for (Employee emp : emps) { System.out.println(emp);}
MyBatis支持将查询结果封装到Map中。根据查询结果的结构,可以选择不同的封装方式。
这种情况下,Map的键可以是查询结果的主键值,值是对应的JavaBean对象。
接口方法定义:
MapgetEmpByIdReturnMap(Integer id);
配置文件中添加映射:
注意:resultType在这种情况下必须是map,并且需要指定键和值的类型。
这种情况下,Map的键是主键值,值是对应的JavaBean对象集合。
接口方法定义:
MapgetEmpByLastNameLikeReturnMap(String lastName);
配置文件中添加映射:
// 测试方法一:获取单条记录MapempMap = mapper.getEmpByIdReturnMap(1);System.out.println("查到的员工信息:" + empMap);// 测试方法二:获取多条记录Map empMap = mapper.getEmpByLastNameLikeReturnMap("%s");System.out.println("查到的员工信息:" + empMap);
resultMap用于定义自定义的结果集映射规则,适用于单表和多表查询。
在接口中定义一个方法,返回自定义封装的JavaBean。
接口方法定义:
@Mapperpublic interface EmployeeMapper { @ResultMap(id = "MySimpleEmp") Employee getEmpById(Integer id);} 配置文件中添加映射:
假设有一个外键关系,Employee表和Department表之间存在d_id外键。
接口方法定义:
@Mapperpublic interface EmployeeMapperPlus { @ResultMap(id = "MyDifEmp") Employee getEmpAndDept(Integer id);} 配置文件中添加映射:
为了提高性能,可以使用延迟加载技术。例如,查询Employee对象时,只有在实际需要Department信息时才查询部门信息。
在全局配置文件中添加如下设置:
假设Department类中有一个字段List<Employee> emps,用于存储对应的员工信息。
在接口中定义方法:
@Mapperpublic interface DepartmentMapper { @ResultMap(id = "DeptEmpMap") Department getDeptWithEmps();} 配置文件中添加映射:
在EmployeeMapper中定义一个方法,用于分步查询部门对应的员工:
@Mapperpublic interface EmployeeMapper { @ResultMap(id = "EmpDeptListMap") List getEmpsByDeptId(Integer deptId);} 配置文件中添加映射:
在resultMap中可以通过指定多个column属性来传递多列值。例如:
MyBatis支持使用discriminator来根据查询结果的某一列值决定返回值的封装方式。例如:
在resultMap中添加判别条件:
这种方式可以根据gender列的值决定是否查询部门信息,或者对返回值进行不同的封装。
通过以上方法,可以充分利用MyBatis的SELECT功能,实现复杂的查询场景。
转载地址:http://pvewz.baihongyu.com/