【MyBatis】输入映射和输出映射

 

   在mybatis中,我们需要通过输入和输出映射来指定输入(参数)和输出(返回值)的类型。

【输入映射】

在mapper的statement中,我们通过parameterType指定输入参数的类型,类型可以是简单类型、hashMap以及pojo的包装类型。

1、简单类型,比如int,我们可以直接进行使用,例如:

 


 
  1. <select id="findUserByID" parameterType="int" resultType="user">

  2. select * from user where id = #{id}

  3. </select>

  4. <select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">

  5. select * from user where username LIKE '%${value}%'

  6. </select>

 

      这两条statement的查询条件都是一个,所以我们可以直接使用int或者String作为参数的输入类型,但是如果我们需要两个或者更多的条件时,就需要用到pojo的包装类型啦。

2、pojo包装类型,简单来说就是将所有数据包装成一个简单地Java对象,直接传入该java对象进行查询。

 


 
  1. <select id="findUserList" parameterType="UserQueryVo" resultType="UserCustom">

  2. select * from user

  3. where user.sex = #{userCustom.sex} AND user.username like '%${userCustom.username}%'

  4. </select>

 

    类UserQueryVo是在原来User类的基础上进行了重新封装,封装的过程中可以扩展需要的条件。

3、hashMap类型,在使用hashMap时需要注意,查询的条件比如说ID和性别是作为key值放在hashMap中,value值是查询的具体条件,比如:

 


 
  1. <select id="findUserByMap" parameterType="java.util.Map" resultType="user">

  2. select * from user

  3. where user.sex = #{sex} AND user.username = #{username}

  4. </select>

 

【输出映射】

      在mapper的statement中,我们通过resultType指定输出参数的类型,类型可以是简单类型和pojo的包装类型。使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象。只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象,不一致的属性的值为null。

1、简单类型:例如查询数据总数,需要的输出类型为int型,如下:

 


 
  1. <select id="findUserCount" parameterType="cn.itcast.mybatis.po.UserQueryVo" resultType="int">

  2. SELECT count(*) FROM USER

  3. </select>

 

2、pojo对象和pojo对象列表:不管是输出的pojo单个对象还是一个list列表,在mapper.xml中resultType指定的类型是一样的。

 


 
  1. <select id="findUserList" parameterType="cn.itcast.mybatis.po.UserQueryVo"

  2. resultType="cn.itcast.mybatis.po.UserCustom">

  3. SELECT * FROM USER

  4. </select>

  5. <select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">

  6. SELECT * FROM USER WHERE username LIKE '%${value}%'

  7. </select>

 

3、resultMap:如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。

 


 
  1. <mapper namespace="com.itcast.mybatis.mapper.UserMapper">

  2. <!-- 使用resultMap定义别名进行匹配查询

  3. 如果这个resultMap在其它的mapper文件中,前边需要加namespace

  4. -->

  5. <!-- 定义resultMap

  6. 将SELECT id id_,username username_ FROM USER 和User类中的属性作一个映射关系

  7.  
  8. type:resultMap最终映射的java对象类型,可以使用别名

  9. id:对resultMap的唯一标识

  10. -->

  11. <resultMap type="user" id="userResultMap">

  12. <!-- id表示查询结果集中唯一标识

  13. column:查询出来的列名

  14. property:type指定的pojo类型中的属性名

  15. 最终resultMap对column和property作一个映射关系 (对应关系)

  16. -->

  17. <id column="id_" property="id"/>

  18. <!--

  19. result:对普通名映射定义

  20. column:查询出来的列名

  21. property:type指定的pojo类型中的属性名

  22. 最终resultMap对column和property作一个映射关系 (对应关系)

  23. -->

  24. <result column="username_" property="username"/>

  25. +

  26. </resultMap>

  27. <!-- 使用resultMap-->

  28. <select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">

  29. SELECT id id_,username username_ FROM USER WHERE id=#{value}

  30. </select>

  31. </mapper>

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值