博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis中不同类型的传入参数处理方法
阅读量:4093 次
发布时间:2019-05-25

本文共 2974 字,大约阅读时间需要 9 分钟。

一、基本数据类型

mybatis的xml映射文件传入一个基本类型的参数时,如果只是做普通的sql查询语句,例如select * from ui_test_case where id=#{id} 程序会正确执行。

注意:id为传入参数,这个id可以被任何名称替换。因为id表示的是传入的值,而不是参数名

但如果要实现动态sql或模糊sql查询时,处理则不同

具体实例
传入一个string类型参数,使用if标签实现动态sql功能,在执行<if test="dateTimeType == 'OneDay'.toString()">时,程序报错
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘dateTimeType ’ in ‘class java.lang.String’

解决方式一:必须将传入参数使用“_parameter”代替

当传入参数的个数为 1 时,此方法可奏效

解决方式二:在dao层使用@Param注解

@Mapperpublic interface UITestCaseMapper extends BaseMapper
{ public List
findAllUICasesByModuleId(Integer moduleId); public Integer statisticalNewAddUICasesByOneDayOrOneWeekOrOneMonth(@Param("dateTimeType") String dateTimeType);}

解决方式三:将传入参数组装成Map数据类型

传入Map类型参数,直接通过#{keyname}就可以引用到键对应的值。使用@param注释其实也是将参数组装成一个Map数据结构,和直接传递Map类型参数没有区别
Controller层

@RequestMapping(value = "/statisticalNewAddUICasesByOneDay", method = RequestMethod.GET)    public Integer statisticalNewAddUICasesByOneDay(){        // 将传入参数放入map中        Map
requestParams = new HashMap
(); requestParams.put("dateTimeType", "OneDay"); return uiTestCaseService.statisticalNewAddUICasesByOneDayOrOneWeekOrOneMonth(requestParams); }

Mapper层(Dao层)

@Mapperpublic interface UITestCaseMapper extends BaseMapper
{ public List
findAllUICasesByModuleId(Integer moduleId); // 方法参数是map数据类型 public Integer statisticalNewAddUICasesByOneDayOrOneWeekOrOneMonth(Map
requestParams);}

二、复杂对象类型

传入Java复杂对象类型, sql映射语句中就可以直接引用对象的属性名了,这里的属性名是实实在在的真实的名字,不是随意指定的。

insert into ui_test_case (case_module_id, title, creater, create_time, case_type, run_stable, review_status) values (#{caseModuleId}, #{title}, #{creater}, #{createTime}, #{caseType}, #{runStable}, #{reviewStatus})

这里的caseModuleId、title等变量名都是UITestCase类中定义好的

如果要在if标签中判断传入的UITestCase参数,仍然要使用_parameter来引用传递进来的实际参数值,因为传进来的UITestCase对象的名字是任意的。

判断UITestCase对象

如果判断对象的属性,则直接引用属性名字就可以了。

三、集合类型

传递一个List或Array类型的对象作为参数,MyBatis会自动的将List或Array对象包装到一个Map对象中,List类型对象会使用list作为键名,而Array对象会用array作为键名

集合类型通常用于构造IN条件,sql映射文件中使用foreach元素来遍历List或Array元素

Mapper层(Dao层)

User selectUserInList(List
idlist);

xml文件

对象中的集合属性

对于单独传递的List或Array类型,在sql映射文件中映射时,只能通过list或array来引用。但是如果对象有属性的类型为List或Array,则在sql映射文件的foreach元素中,可以直接使用属性名字来引用。

Mapper层(Dao层)

List
selectByExample(UserExample example);

xml文件

UserExample类有一个属性为oredCriteria,其类型为List,所以在foreach元素里直接用属性名oredCriteria引用这个List即可。

item=”criteria”表示使用criteria这个名字引用每一个List或Array中的集合元素

转载地址:http://bhtii.baihongyu.com/

你可能感兴趣的文章
Node.js-模块和包
查看>>
Node.js核心模块
查看>>
express的应用
查看>>
NodeJS开发指南——mongoDB、Session
查看>>
Express: Can’t set headers after they are sent.
查看>>
2017年,这一次我们不聊技术
查看>>
实现接口创建线程
查看>>
Java对象序列化与反序列化(1)
查看>>
HTML5的表单验证实例
查看>>
JavaScript入门笔记:全选功能的实现
查看>>
程序设计方法概述:从面相对象到面向功能到面向对象
查看>>
数据库事务
查看>>
JavaScript基础1:JavaScript 错误 - Throw、Try 和 Catch
查看>>
SQL基础总结——20150730
查看>>
SQL join
查看>>
JavaScript实现页面无刷新让时间走动
查看>>
CSS实例:Tab选项卡效果
查看>>
前端设计之特效表单
查看>>
前端设计之CSS布局:上中下三栏自适应高度CSS布局
查看>>
Java的时间操作玩法实例若干
查看>>