zoukankan      html  css  js  c++  java
  • 输入(parameterType)与输出(resultType、resultMap)映射的区别

    输出映射:

       resultType

    :   主要针对于从数据库中提取相应的数据出来

      使用resultType时我们应该注意:sql查询的列名要和resultType指定pojo的属性名相同,指定相同属性方可映射成功,如果sql查询的列名要和resultType指定pojo的属性名全部不相同(或是部分不相同),则映射到pojo对象中的对应属性为null。例如有时候我们不需要查询select * from user where id = ?而是select username,address _address where id = ? 此时我们给查询的address列名给了一个别名_address,这样我们通过查询表中address的数据然后在将它映射到User对象时,该对象的address属性就为null,即没将从表中查询到的address数据映射到user对象的address属性中。

      此时resultMap就出现了。如果sql查询列名和最终要映射的pojo的属性名不一致,使用resultMap就可以将列名和pojo的属性名做一个对应关系 (列名和属性名映射配置)。


      resultMap

    使用resultMap需要在UserMapper.xml中进行配置:

    然后在UserMapper.xml中使用它:

     UserMapper.java文件中:

     测试类代码:

     运行测试类发现,即使我们查询的列名与User对象的属性不一样,但是我们的确映射成功了。

    输入映射: 

      parameterType:

    通过parameterType传入简单类型或对象,我们之前讲过了,接下来我们要讲的是parameterType传递pojo包装对象。可以定义pojo包装类型扩展mapper接口输入参数的内容。

    看下我们的需求:定义查询条件查询用户信息,需要向statement输入查询条件,查询条件可以有user信息、商品信息等等。

    首先我们在domain包下创建UserCustom类并继承User,

     

    UserCustom类用于对User属性进行扩展(例如User中只有用户信息,而我们可以在UserCustom中加入商品信息),然后再创建User的包装类UserQueryVo.java:

    UserMapper.xml中添加如下配置信息:

    UserMapper.java中添加方法:

    然后便可以进行测试:

    可能出现的异常:如果在parameterType中指定了错误的属性名时会出现如下异常:

    org.apache.ibatis.exceptions.PersistenceException: ### Error querying database.  Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'userCusto' in 'class cn.itcast.mybatis.po.UserQueryVo'### Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'userCusto' in 'class cn.itcast.mybatis.po.UserQueryVo'

      

     

  • 相关阅读:
    古人诗词之王安石
    关于周期函数的命题
    Strum—Lioville问题
    计算反常积分
    【面积原理】计算级数和
    【洛谷P6046】纯粹容器
    【洛谷P3631】方格染色
    【牛客挑战赛48 E】速度即转发
    【CF103D】Time to Raid Cowavans
    【洛谷P4280】逆序对
  • 原文地址:https://www.cnblogs.com/wangjinnan97/p/12937613.html
Copyright © 2011-2022 走看看