
MyBatis中使用parameterType向SQL语句传参,parameterType后的类型可以是基本类型int,String,HashMap和java自定义类型。 在SQL中引用这些参数的时候,可以使用两种方式#{parameterName}或者${parameterName}, 首先,我们说一下这两种引用参数时
比如根据id或者字段条件查询获取表中的某一个字段值
User Sel(int id); //根据id查询
有时候我们需要模糊查询或者是全表查询,返回的数据是多条的, 那么可以把多条数据保存到list里面的。
这里需要注意的是返回是List类型 但是resultType依然是javaBean, 有些人会困惑这里怎么不是集合类型呢?其实透过现象看本质, 还是JavaBean。
当我们在查询的时候返回一条数据的时候,我们可以把{字段名,字段值}封装成Map结构。
一 其实可以看成是多个参数的:
二 可以看做是加了注解
三
可以把参数封装到Map里面 有些时候我们的业务数据查询没有定义对应的POJO,就进行参数的封装 *** 作。
mybatis自定义拦截器(一)基本使用
mybatis自定义拦截器(二)对象详解
1 不同拦截类型执行顺序:
2 多个插件拦截的顺序?
需要注意的是,因为拦截器Aa和拦截器Bb均是拦截的StatementHandler对象,所以拦截器B在此获取StatementHandler的时候,获取的是代理对象。
3 多个插件plugin()和intercept()方法的执行顺序
先执行每个插件的plugin方法,若是@Intercepts注解标明需要拦截该对象,那么生成类型对象的代理对象。(即使该插件需要拦截该类型对象,但是依旧会执行下一个插件的plugin方法)。知道执行完毕所有的plugin方法。在执行每个Intercept方法。
自定义拦截器必须使用mybatis提供的注解来声明我们要拦截的类型对象。
Mybatis插件都要有Intercepts [in特赛婆斯] 注解来指定要拦截哪个对象哪个方法。我们知道,Pluginwrap方法会返回四大接口对象的代理对象,会拦截所有的方法。在代理对象执行对应方法的时候,会调用InvocationHandler处理器的invoke方法。
具体规则如下:
如果我们的拦截器需要一些变量对象,而且这个对象是支持可配置的。
类似于Spring中的@Value("${}")从 applicationproperties 文件中获取。
使用方法:
方法中获取参数: propertiesgetProperty("username");
问题:但是为什么不直接使用@Value("${}") 获取变量?
解答:因为mybatis框架本身就是一个可以独立使用的框架,没有像Spring这种做了很多的依赖注入。
这个方法的作用是就是让mybatis判断,是否要进行拦截,然后做出决定是否生成一个代理。
需要注意的是:每经过一个拦截器对象都会调用插件的plugin方法,也就是说,该方法会调用4次。根据@Intercepts注解来决定是否进行拦截处理。
解答:判断是否拦截这个类型对象(根据@Intercepts注解决定),然后决定是返回一个代理对象还是返回原对象。
故我们在实现plugin方法时,要判断一下目标类型,是本插件要拦截的对象时才执行Pluginwrap方法,否则的话,直接返回目标本身。
我们知道,mybatis只能拦截四种类型的对象。而 intercept 方法便是处理拦截到的对象。比如我们要拦截 StatementHandler#query(Statement st,ResultHandler rh) 方法,那么 Invocation 就是这个对象, Invocation 中有三个参数。
orgapacheibatisreflectionSystemMetaObject#forObject :方便的获取对象中的值。
案例:将参数拼接到sql语句。
因为已经执行了ParameterHandler拦截器,故Statement对象已经是完全拼接好的SQL语句。
一个MappedStatement对象对应Mapper配置文件中的一个select/update/insert/delete节点,主要描述的是一条sql语句。其属性为:
>
1查看parameterType的类型是不是javautilList类型,如果是的话,看foreach 的collection属性是不是list,
因为 传递一个 List 实例或者数组作为参数对象传给 MyBatis,MyBatis 会自动将它包装在一个 Map 中,用名称在作为键。List 实例将会以“list” 作为键,而数组实例将会以“array”作为键
2看一下foreach里面的值有没有传递进来
3看foreach里面的名称字段是否写错
4还有就是我用Mybatis的时候,用mysql的值插入自动增长值,里面的key我在数据库中没有设置自动增长,然后我又用了selectkey,所以也会出现这种情况
--------------------------------------------------------------------
还有一种情况是item的属性不对,我在使用通用Map的时候,发现此问题。
通用Map的好处是减少了对Bean的书写,问题是如果数据库的查询结果为Null,对应属性的key也就不存在。
你好,很高兴为你解答
Mybatis的Mapper文件中的select、insert、update、delete元素中有一个parameterType属性,用于对应的mapper接口方法接受的参数类型
可以接受的参数类型有基本类型和复杂类型。
mapper接口方法一般接受一个参数,可以通过使用@Param注释将多个参数绑定到一个map做为输入参数
简单数据类型
mapper接口方法:
User selectByPrimaryKey(Integer id);sql映射:
<selectid="selectByPrimaryKey"resultMap="BaseResultMap"parameterType="javalangInteger">select
<includerefid="Base_Column_List"/>
from basetb_user
where id = #{id,jdbcType=INTEGER}
</select>
希望对你有帮助
以上就是关于关于mybatis的使用之怎么传递参数总结全部的内容,包括:关于mybatis的使用之怎么传递参数总结、mybatis里面xml文件中resultType值说明、mybatis(3)—自定义拦截器(上)基础使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)