本文共 2974 字,大约阅读时间需要 9 分钟。
mybatis的xml映射文件传入一个基本类型的参数时,如果只是做普通的sql查询语句,例如select * from ui_test_case where 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中 MaprequestParams = 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(Listidlist);
xml文件
对于单独传递的List或Array类型,在sql映射文件中映射时,只能通过list或array来引用。但是如果对象有属性的类型为List或Array,则在sql映射文件的foreach元素中,可以直接使用属性名字来引用。
Mapper层(Dao层)ListselectByExample(UserExample example);
xml文件
UserExample类有一个属性为oredCriteria,其类型为List,所以在foreach元素里直接用属性名oredCriteria引用这个List即可。
item=”criteria”表示使用criteria这个名字引用每一个List或Array中的集合元素转载地址:http://bhtii.baihongyu.com/