mybatis传入参数类型parameterType和输出结果类型resultType详解(转载的)

前言

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

resultType:
指定sql输出结果类型,总共就两种:

1. 基本数据类型。

2. 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 复杂数据类型:#{属性名}或KaTeX parse error: Expected 'EOF', got '#' at position 15: {属性名} ,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 select from common_car_make where id = #{id,jdbcType=BIGINT} *3.2 复杂类型--map类型* select from common_car_make cm where 1=1 and cm.id = #{id,jdbcType=DECIMAL} and cm.car_dept_name = #{carDeptName,jdbcType=VARCHAR} and cm.car_maker_name = #{carMakerName,jdbcType=VARCHAR} and cm.hot_type = #{hotType,jdbcType=BIGINT} ORDER BY cm.id *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中包含数组的情况* select sum(pro_order_num) proOrderNum,product_id productId,promotion_id promotionId from pro_order where 1=1

//mapKey其实就是#{mapKey}

and

//map中的list同普通的一样,只是在遍历的时候collection要写出map中的List的键值

#{itemOfMapKey,jdbcType=BIGINT}


GROUP BY product_id,promotion_id

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

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

public List getXXXBeanList(String xxId, String xxCode);

select t.* from tableName where id = #{0} and name = #{1} 由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始

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

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

select t.* from tableName where id = #{id} and name = #{code} 由于是多参数那么就不能使用parameterType, 这里用@Param来指定哪一个

4.3 方法三:Map封装

public List getXXXBeanList(HashMap map);

select 字段... from XXX where id=#{xxId} code = #{xxCode} 其中hashmap是mybatis自己配置好的直接使用就行。map中key的名字是那个就在#{}使用那个,map如何封装就不用了我说了吧。

4.4 方法四:List封装

public List getXXXBeanList(List list);

  select 字段... from XXX where id in   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值