mybatis 传递多个参数
来源:互联网 发布:虫虫钢琴软件 编辑:程序博客网 时间:2024/06/05 23:06
mybatis传递多个参数
在我们以前的例子中都是传递了一个参数,接下来将介绍传递多个参数的3种方式。
map接口传递参数
在mybatis中允许map接口通过键对值传递多个参数。
首先我们先编写映射器接口:
public List<Role> findRolesByMap(Map<String,Object> paramMap);
设置参数为map类型,然后编写映射文件
<select id="findRolesByMap" parameterType="map" resultType="role"> SELECT id, roleName, note FROM role WHERE roleName LIKE CONCAT('%',#{roleName},'%') AND note LIKE CONCAT('%',#{note},'%') </select>
让parameterType设置为map,接下来进行测试
sqlSession = SqlSessionFactoryUtils.openSession(); RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class); Map<String,Object> paramMap = new HashMap<String,Object>(); paramMap.put("roleName", 1); paramMap.put("note", 1); List<Role> role = roleMapper.findRolesByMap(paramMap);
通过打印的日志,我们发现key值对应的就是我们的参数#{roleName}和#{note}。
使用注解传递多个参数
使用map传递参数的缺点就是可读性不好,为此,mybatis提供了注解方式。@Param 通过它可以去定义映射器的参数名称。通常把接口方法定义为
public List<Role> findRolesByMap(@Param("roleName")String roleName , @Param("note")String note);
更改测试代码
sqlSession = SqlSessionFactoryUtils.openSession(); RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class); List<Role> role = roleMapper.findRolesByMap("1","1");
即使不更改parameterType,让mybatis自己配置就好,涉及到底层知识。
但是当参数有很多时候,还有java bean方式供我们选择。
java bean 方式
首先定义一个参数的POJO
public class RoleParams { private String roleName; private String note; public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } public String getNote() { return note; } public void setNote(String note) { this.note = note; }}
然后修改我们接口的方法
public List<Role> findRolesByMap(RoleParams param);
最后用测试代码测试,得出结果。
sqlSession = SqlSessionFactoryUtils.openSession(); RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class); RoleParams param = new RoleParams(); param.setNote("1"); param.setRoleName("1"); List<Role> role = roleMapper.findRolesByMap(param);
混合使用
在某些情况下,我们需要两个pojo的属性作为参数,这也是可行的,并且是合理的。首先需要设置接口方法的参数
public List<Role> findRolesByMap(@Param("param1")RoleParam1 param1,@Param("param2")RoleParam2 param2);
这两个pojo就是将上一个例子中两个属性拆分。
然后更改我们的映射文件
<select id="findRolesByMap" parameterType="map" resultType="role"> SELECT id, roleName, note FROM role WHERE roleName LIKE CONCAT('%',#{param2.roleName},'%') AND note LIKE CONCAT('%',#{param1.note},'%') </select>
注意sql中的参数选择方式。请自己编写测试代码进行测试。
总结
- 使用map传递参数导致了业务可读性的丧失,增加后期维护的难度。
- 采用注解方式传递参数,受到参数个数影响,当参数个数较少时它是不错的选择
- 当参数个数较多时,java bean是个不错的选择。
- 对于混合使用要明确参数的合理性,在sql中注意是哪个对象的哪个参数。
阅读全文
0 0
- Mybatis传递多个参数
- Mybatis传递多个参数
- Mybatis传递多个参数
- mybatis传递多个参数
- mybatis传递多个参数
- Mybatis传递多个参数
- Mybatis传递多个参数
- MyBatis传递多个参数,
- Mybatis传递多个参数
- Mybatis传递多个参数
- MyBatis传递多个参数
- mybatis 传递多个参数
- mybatis传递多个参数
- mybatis传递多个参数
- mybatis传递多个参数的问题
- mybatis 多个参数传递获取,基础教程
- MyBatis传递多个参数的写法
- Mybatis 多个参数传递解决方案
- 启动第三方的Activity,service
- WireShark如何抓取本地localhost的包
- 计算机如何执行取数指令
- [python]leetcode(79). Word Search
- hibernate错误总结
- mybatis 传递多个参数
- com.opensymphony.xwork2.config.ConfigurationException: Unable to load configuration.
- IAR for 430软件的简单使用
- QT之信号槽(一)
- 1006. 换个格式输出整数 (15)
- 百炼 3468:电池的寿命
- zookeeper注册配置与启动
- mybatis 分页参数 RowBounds
- 数据结构实验之链表二:逆序建立链表