MyBatis
输入映射和输出映射
传递POJO的包装对象:输入映射
开发步骤:
a.需求分析
b.根据需求定义包装的POJO对象
c.根据需求定义mapper.java接口和相应的mapper.xml配置文件
d.在sqlMapConfig.xml中加载配置文件并编写测试代码进行测试
a.需求分析
完成用户信息的综合查询 需要传入的查询条件比较复杂(可能包含用户信息,或者其他相关的详细信息, 比如与用户相关的商品信息、订单信息等)
b.根据需求定义包装的POJO对象
POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通的JavaBeans,是为了避免和EJB混淆所创造的简称。
- 查询到结果后把查询到的复杂数据进行封装
UserCustom.java:
public
- 查询条件比较复杂:对查询条件进行封装
UserQueryVO.java:
public
c.根据需求定义mapper.java接口和相应的mapper.xml配置文件
UserCustomMapper.java:
public
UserCustomMapper.xml:
d.在sqlMapConfig.xml中加载配置文件并编写测试代码进行测试
加载配置文件:
<package name="com.guigu.mybatis.c_mapper"></package>
测试代码:
UserCustomMapperTest
测试结果:
输出映射
a.ResultType
ResultType就是把查询到的结果封装为指定的对象,然后输出
需要查询的列名和POJO中的属性必须一致,否则封装不成功,从而导致查询不到数据
b.输出简单类型
需求:查询用户的总数(在上述案例的基础上完成)
- 在UserCustomMapper.xml中配置
- 在UserCustomMapper.java中添加方法
- 编写测试代码进行测试
测试结果:
c.输出POJO对象和POJO列表
需求:查询用户的总数(在上述案例的基础上完成)
- 在UserCustomMapper.xml中配置
- 在UserCustomMapper.java中添加方法
- 编写测试代码进行测试
测试结果:
测试结果:
d.ResultMap
问题分析:在实际开发中针对多表查询,为了区分相同列名而导致查询结果的二义性,通常会为查询出来的列名起别名,但如果是通过resultType进行映射无法匹配相应的数据,导致数据查询失败
测试结果:虽然数据能够查询,但结果且无法正确映射到输出结果中,导致查询失败
因此为了解决上述问题,提出解决方案:如果查询出的列名和POJO属性不一致,可以通过定义一个resultMap定义类名和POJO进行映射完成查询。
- 在UserCustomMapper.xml中配置
- 在UserCustomMapper.java中添加方法
- 编写测试代码进行测试
测试结果:数据正常显示