MyBatis传递参数
MyBatis传递参数
一、使用 map 接口传递参数
在 MyBatis 中允许 map 接口通过键值对传递多个参数,把接口方法定义为 :
public List<Role> findRolesByMap(Map<String , Object> parameterMap);
此时,传递给映射器的是一个 map对象,使用它在 SQL 中设置对应的参数,如代码清单, 参数 roleName 和 note , 要求的是 map 的键
<select id=” findRolesByMap ” parameterType=”map” resultType=”role”>
select id, role name as roleName , note from t_role
where role name like concat ( ’%’, #{ roleName } ,’%’)
and note like concat ( ’%’, #{ note } ,’%’)
</select>
严格来说,map 适用 几乎所有场景 , 但是我们用得不多。原因有两个:首先 , map 是一个键值对应的集合,
使用者要通过阅读它的键 ,才能明了其作用 ; 其次 ,使用 map 不能限定其传递的数据类型 ,
因此业务性质不强 ,可读性差 ,使用者要读懂代码才能知道需要传递什么参数给它 ,
所以不推荐用这种方式传递多个参数。
二、使用注解传递多个参数
MyBatis 为 开发者提供了 一个注解@Param ( org.apache. atis .annotations.Param ),
可以通过它去定义映射器的参数名称 , 使用它可 以得到更好的可读性, 把接 口 方法定义为:
public List<Role> findRolesByAnnotation (@Param (”roleName” ) String rolename ,@Param (”note” ) String note) ;
此时代码的可读性大大提高了,能明确参数 roleName 是角色名称,而 note 是备注 , 一 目了然 , 这个时候需要修改映射文件的代码,如代码清单
<select id=” findRolesByAnnotation ” resultType=”role ”>
select 工 d , role name as roleName , note from t_role
where role name like concat (’%’,#{ roleName },’%’)
and note like concat ( ’% ’,#{ note },’%’)
</select>
注意 ,此时并不需要给出 parameterType 属性,让 MyBatis 自动探索便可以了 。如果 SQL 很复杂,拥有大于 10 个参数 ,
那么接口方法的参数个数就多了,使用起来就很不容易,不过不必担心, MyBatis 还提供传递 Java Bean 的形式。
三、通过 JavaBean 传递多个参数
先定义一个参数的 POJO一RoleParams,如代码清单
public class RoleParams {
private String roleName ;
private String note ;
/**setter and getter**/
}
此时把接口方法定义为:
public List<Role> findRolesByBean(RoleParams roleParam);
JavaBean 的属性 roleName 代表角色名称,而 note 代表备注 ,代码清单
<select id=”findRolesByBean” parameterType= ”cn.lzc.ssm.mybatis.po.RoleParams” resultType=”role” >
select id, role name as roleName, note from t_role
where role name like concat ( ’%’, #{roleName },’%’ )
and note like concat ( ’%’, #{note }, ’%’)
</select>
四、混合使用
在某些情况下可能需要混合使用几种方法来传递参数。举个例子,查询一个角色,可以通过角色名称和备注进行查询,与此同时还需要支持分页,而分页的 POJO 实现如代码清单
public class PageParams {
private int start ;
private int limit;
/*******setter and getter*********/
}
这个时候接口设计如下
public List<Role> findByMix (@Param (”params”) RoleParams roleParams ,@Param (”page”) PageParam PageParam) ;
这样不仅是可行的,也是合理的,当然 MyBatis 也为此做了支持,把映射文件修改为如代码清单
<select id=”findByMix” resultType=”role” >
select id, role name as roleName , note from t_role
where role name like
concat (’%’, #{params.roleName}, ’%’}
and note like concat ( ’%’, #{params.note} ,’%’)
limit #{page.start}, #{page.limit}
</select>
这样就能使用混合参数了,其中 MyBatis 对 params 和 page 这类 Java Bean 参数提供
EL (中间语言)支持,为编程带来了很多的便利。
五、总结
描述了 4 种传递多个参数的方法,对各种方法加以点评和总结,以利于我们在实际操作中的应用。
- 使用 map 传递参数导致了业务可读性的丧失,导致后续扩展和维护的困难,在实际的应用中要果断废弃这种方式。
- 使用@Param 注解传递多个参数,受到参数个数 ( n )的影响。当 n<=5 时, 这是最佳的传参方式,它比用 Java Bean 更好,因为它更加直观 ; 当 n> 5 时, 多个参数将给调用带来困难,此时不推荐使用它。
- 当参数个数多于 5 个时,建议使用 Java Bean 方式。
- 对于使用混合参数的,要明确参数的合理性。
MyBatis传递参数的更多相关文章
- mybatis 传递参数的方法总结
有三种mybatis传递参数的方式: 第一种 mybatis传入参数是有序号的,可以直接用序号取得参数 User selectUser(String name,String area); 可以在xml ...
- mybatis传递参数的方法
一.传递一个参数 例:根据员工编号查询员工的基本信息 1.在dao接口中声明一个方法 2.在mapper中实现该方法 3.测试 /** * 传递一个参数 */ public class Test02 ...
- Mybatis传递参数的几种方式
使用Map传递 优点:直接在sql中取出key即可 缺点:适用于小项目,不符合大公司规范 对象传递参数 优点:符合标准规范 缺点:麻烦 3.只有一个基本类型参数的情况下,直接在sql中取中 4.多个参 ...
- mybatis传递参数到mapping.xml
第一种方案 ,通过序号传递 DAO层的函数方法 Public User selectUser(String name,String area); 对应的Mapper.xml <select id ...
- Mybatis传递参数的三种方式
第一种: Dao层使用@Param注解的方法 VersionBox getVersionByVersionNumAndVersionType(@Param("versionNum" ...
- mybatis 传递参数的两种方式与模糊匹配 很重要
- MyBatis(二):Select语句传递参数的集中方案
从别人说的方案中看出,传递参数方案还挺多,不如自己整理下,以便以后使用过程中有个笔记回忆录. 1.传递一个参数的用法: 配置文件 <select id="getById" r ...
- Mybatis 传递多个参数
Mybatis提供了4种传递多个参数的方法: 1 Map sql语句 接口 调用方法 这个方法虽然简单易用,但是存在一个弊端:Map存储的元素是键值对,可读性不好. 2 注解 使用MyBatis的参数 ...
- MyBatis DAO层传递参数到mapping.xml 几种方式
Dao层传递参数到mapping.xml文件的几种方式:(Mybatis传值总结) 第一种:传递单个参数 Dao层Code片段: /** * 根据articleId查询XXXX详情. * * @par ...
随机推荐
- Java知多少(83)面板基础:JPanel和JScrollPane
面板有两种,一种是普通面板(JPanel),另一种是滚动面板(JScrollPane). JPanel 面板是一种通用容器,JPanel的作用是实现界面的层次结构,在它上面放入一些组件,也可以在上面绘 ...
- CLOS网络架构与FATTREE胖树拓扑
FatTree拓扑结构是由MIT的Fares等人在改进传统树形结构性能的基础上提出的,属于switch-only型拓扑. 整个拓扑网络分为三个层次:自上而下分别为边缘层(edge).汇聚层(aggre ...
- Mysql系列四:数据库分库分表基础理论
一.数据处理分类 1. 海量数据处理,按照使用场景主要分为两种类型: 联机事务处理(OLTP) 面向交易的处理系统,其基本特征是原始数据可以立即传送到计算机中心进行处理,并在很短的时间内给出处理结果. ...
- Spring 3 Java Based Configuration with @Value
Springsource has released the Javaconfig Framework as a core component of Spring 3.0. There is a tre ...
- duilib进阶教程 -- XML嵌套及自定义控件 (4)
代码下载:http://download.csdn.net/detail/qq316293804/6433937 之前入门教程里已经讲过了自定义控件,这里借着迅雷播放器再次举个例子. 1.我们先给迅雷 ...
- tomcat 下安装 MantisBT
环境 OS:win8.1 up1 64bit tomcat :9.0.0 64bit php: php-7.1.7-nts-Win32-VC14-x64.zip postgres: postgresq ...
- [转]ubuntu bits/predefs.h:没有那个文件或目录
[转]ubuntu bits/predefs.h:没有那个文件或目录 (2012-04-28 10:09:38) 转载▼ 标签: it 分类: Linux In file included from ...
- 通过USB转TTL串口下载stm32程序
目录: 1.硬件及其接线 2.驱动及软件 3.下载程序测试 1.硬件及其接线 1.1 USB转TTL刷机板(CH340模块升级小板) 1.2 主芯片STM32F103C8T6开发板 1.3接线 1.3 ...
- 写写我的硕士三年【zz】
昨天我们组的10bit-40M ADC测出来了,自己终于能松口气,可以无牵无挂的毕业了.晚上老板bg全组毕业生,喝了很多,我对老板说:"这3年在组里,我是把它当作事业来做的!"是的 ...
- ThinkPHP框架 基础 链接数据库
在第一次成功访问应用入口文件的时候,会显示出一个系统默认的欢迎页面并自动在APPLication文件夹里生成三个文件夹,如下,第一次访问应用文件路径:localhost/tr/index.php ...