mybatis--5.映射配置parameterType

1      映射配置文件Mapper.xml

通过parameterType完成输入映射,通过resultType和resultMap完成输出映射。

 

1.1        概述

 

1.2        映射类型

 

1.3        resultType映射pojo,map使用方法

结果映射时:查询的列名和映射的pojo属性名

1. 只要有一个一致,就会创建pojo对象,没对应的返回空,通常pojo属性数量大于列。

2.全部不一致,则不会创建pojo对象;

 

1.4        resultMap映射使用方法

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

1、  定义resultMap

2、  使用resultMap作为statement的输出映射类型。

         如果sql查询列名和最终要映射的pojo的属性名不一致,使用resultMap将列名和pojo的属性名做一个对应关系 (列名和属性名映射配置)

 

 

 

2      parameterType--输入映射

2.1        传递简单类型

 

2.2        传递POJO类型(推荐)

 

2.3         传递自定义类(扩展类)

两种方式:1.继承pojo并且新增属性

                     2.自定义一个pojo

 

 

2.4        传递pojo包装类型

       可以定义pojo包装类型扩展mapper接口输入参数的内容。

 

测试代码

 

 

 

2.5        传递Map或hashmap

同传递POJO对象一样,mapkey相当于pojo的属性

测试代码:

Public void testFindUserByHashmap()throws Exception{
       //获取session
       SqlSession session = sqlSessionFactory.openSession();
       //获限mapper接口实例
       UserMapper userMapper = session.getMapper(UserMapper.class);
       //构造查询条件Hashmap对象
       HashMap<String, Object> map = newHashMap<String, Object>();
       map.put("id", 1);
       map.put("username", "管理员");
      
       //传递Hashmap对象查询用户列表
       List<User>list = userMapper.findUserByHashmap(map);
       //关闭session
       session.close();
    } 

异常测试:

传递的map中的key和sql中解析的key不一致。

测试结果没有报错,只是通过key获取值为空。

 

2.6        传递list和数组

参考:https://www.cnblogs.com/ruiati/p/6410339.html

 

数组必须是array

 

3      @param(多参数传递

3.1 List

在上面如果不指定@param注解,然后数据就比较死板

https://blog.csdn.net/u012031380/article/details/54924641

 

3.2   使用map传递复杂类型(包含list)

 


4      注意

4.1        parameterType异常

如果parameterType中指定属性错误,异常,找不到getter方法:

 

org.apache.ibatis.exceptions.PersistenceException:

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

### Cause:org.apache.ibatis.reflection.ReflectionException: There is no getter forproperty named 'userCusto' in 'class cn.itcast.mybatis.po.UserQueryVo'

        

 

         注意:如果将来和spring整合后,不是通过调用getter方法来获取属性值,通过反射强读取pojo的属性值。

 

 

 

4.2        mybatis中#{}和${}的区别是什么?

${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。

 

#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置参数值,比如ps.setInt(0,parameterValue),#{item.name}的取值方式为使用反射从参数对象中获取item对象的name属性值,相当于param.getItem().getName()。

 

4.3        设置jdbcType

 

可以看出,是因为你传入的参数的字段为null对象无法获取对应的jdbcType类型,而报的错误。 
你只要在insert语句中insert的对象加上jdbcType就可以了,修改如下: 
#{menuTitle,jdbcType=VARCHAR} 

这样就可以解决以上错误了。 

 源代码文件:http://download.csdn.net/detail/qq_26553781/9762724

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值