mybatis传入参数类型parameterType和输出结果类型resultType详解

前言

Mybatis的Mapper文件中的select、insert、update、delete元素中都有一个parameterType和resultType属性,parameterType属性用于对应的mapper接口方法接受的参数类型,resultType用于指定sql输出的结果类型。

resultType:

指定sql输出结果类型,总共四种:

1. Map和List;

2. 基本数据类型;

3. pojo类类型。mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到容器List中。所以即使返回是list数组,resultType也是pojo类型;

parameterType:

1. MyBatis的传入参数parameterType类型分两种

   1. 1. 基本数据类型:int,string,long,Date;

   1. 2. 复杂数据类型:类和Map

2. 如何获取参数中的值:

   2.1  基本数据类型:#{value}或${value} 获取参数中的值

   2.2  复杂数据类型:#{属性名}或${属性名}  ,map中则是#{key}或${key}

注:#{}与${}的区别:

#{value}:输入参数的占位符,相当于jdbc的?  防注入   自动添加了‘  ’ 引号!
例如:select * from user where username = #{name}  //输入的参数lisa,就会自动加上引号
变成:select * from user where username = ‘lisa’
注意:value可以写任意变量,没有统一规定

${value}:  不防注入,就是字符串拼接 
 例如:select * from user where username like '%${value}%'  //默认不加引号
注意:只能写value!!!

select * FROM user WHERE username like "%"'s'"%"//是正确的,符合语法,引号的形式只能是这样,不能变!

3.四种传参类型案例:

 3.1 基本数据类型案例

 
     id, car_dept_name, car_maker_name, icon,car_maker_py,hot_type 
 

 3.2 复杂类型--map类型   

 3.3 复杂类型--类类型

 
     update common_car_make 
      
          
             car_dept_name = #{carDeptName,jdbcType=VARCHAR}, 
          
          
             car_maker_name = #{carMakerName,jdbcType=VARCHAR}, 
          
          
             icon = #{icon,jdbcType=VARCHAR}, 
          
          
              car_maker_py = #{carMakerPy,jdbcType=VARCHAR}, 
          
          
              hot_type = #{hotType,jdbcType=BIGINT}, 
          
      
     where id = #{id,jdbcType=BIGINT} 

 3.4 复杂类型--map中包含数组的情况

3.5 包装类  类型

包装对象:Pojo类中的一个属性是另外一个pojo。

在UserMapper.xml中配置sql,如下图:

mybatis传入参数类型parameterType和输出结果类型resultType详解_第1张图片

UserMapeprTest增加测试方法,如下:

// 使用userMapper执行查询,使用包装对象
QueryVo queryVo = new QueryVo();
// 设置user条件
User user = new User();
user.setUsername("张");
// 设置到包装对象中
queryVo.setUser(user);
// 执行查询
List list = userMapper.queryUserByQueryVo(queryVo);

4. Mybatis (ParameterType) 如何传递多个不同类型的参数

4.1 方法一:不需要写parameterType参数

public List getXXXBeanList(String xxId, String xxCode);  

由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始

4.2 方法二:基于注解(最简单)

public List getXXXBeanList(@Param("id")String id, @Param("code")String code);  

  

由于是多参数那么就不能使用parameterType, 这里用@Param来指定哪一个

4.3 方法三:Map封装

public List getXXXBeanList(HashMap map);  


  

其中hashmap是mybatis自己配置好的直接使用就行。map中key的名字是那个就在#{}使用那个,map如何封装就不用了我说了吧。

4.4 方法四:List封装

public List getXXXBeanList(List list); 

 

 

你可能感兴趣的:(Mybatis)