1 简介
1.1 单参数
在 Mybatis 中, 很多时候, 我们传入接口的参数只有一个。 对应接口参数的类型有两种, 一种是基本的参数类型, 一种是 JavaBean 。
例如在根据主键获取对象时, 我们只需要传入一个主键的参数即可。 而在插入, 更新等操作时, 一般会涉及到很多参数, 我们就使用 JavaBean 。
1.2 多参数
但是, 在实际的情况中, 我们遇到类似这样的情况可能:
比如 获取一段时间产生的日志信息, 日志对应的 JavaBean 只有一个日期, 那我们使用该 JavaBean 就无法满足我们的要求。
又比如我们进行模糊搜索, 搜索条件只有两个, 但对应的 JavaBean 有 50+ 个成员变量, 那创建对应的 JavaBean 就过于浪费了。
对此, 我知道的有如下几种方法
2 多个接口参数的两种使用方式
2.1 Map 方法(不推荐)
Map 方法的使用很简单, 就是将对应的参数以 key-value 的方式存储, key 对应 SQL 中的参数名字, value 对应需要传入的参数值。
以获取一段时间内存储的用户为例
2.1.1 创建接口方法
/** * 获取一段时间内的用户 * @param params * @return */ List<Student> selectBetweenCreatedTime(Map<String, Object> params);
该方法返回的是多个记录, 因此使用 List 作为返回值。
2.1.2 配置对应的SQL
<select id="selectBetweenCreatedTime" parameterType="java.util.Map" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from student where gmt_created > #{bTime, jdbcType=TIMESTAMP} and gmt_created < #{eTime, jdbcType=TIMESTAMP} </select>
id 与 之前创建的方法名一样。
2.1.3 调用
@Test public void testSelectBtweenCreatedTimeMap() { Map<String, Object> params = new HashMap<>(); Calendar bTime = Calendar.getInstance(); // month 是从0~11, 所以9月是8 bTime.html" target="_blank">html" target="_blank">set(2018, Calendar.AUGUST, 29); params.put("bTime", bTime.getTime()); Calendar eTime = Calendar.getInstance(); eTime.set(2018,Calendar.SEPTEMBER,2); params.put("eTime", eTime.getTime()); SqlSession sqlSession = null; try { sqlSession = sqlSessionFactory.openSession(); StudentMapper studentMapper = (StudentMapper) sqlSession.getMapper(StudentMapper.class); List<Student> students = studentMapper.selectBetweenCreatedTime(params); for (int i = 0; i < students.size(); i++) { System.out.println(students.get(i)); } } catch (Exception e) { e.printStackTrace(); } finally { if (sqlSession != null) { sqlSession.close(); } } }
调用方法很简单, 传入相应的 Map 参数即可。 此时, Map 中的 key 对应。 因此, 在此例子中传入的参数
2.2 @Param 方法(推荐)
@Param方法就是使用注解的方式,
2.2.1 创建接口方法
/** * 获取指定时间内的对象 * @param pbTime 开始时间 * @param peTime 结束时间 * @return */ List<Student> selectBetweenCreatedTimeAnno(@Param("bTime")Date pbTime, @Param("eTime")Date peTime);
@Param(“bTime”)就是告诉 mybatis , 参数 pbTime 在 SQL 语句中用 bTime 作为 key 。
也就是说, mybatis 帮我们完成了调用时, 类似 params.put(“bTime”, pbTime) 这个过程。
2.2.2 配置 SQL 语句
<select id="selectBetweenCreatedTimeAnno" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from student where gmt_created > #{bTime, jdbcType=TIMESTAMP} and gmt_created < #{eTime, jdbcType=TIMESTAMP} </select>
此处的 bTime 对应** @Param(“bTime”)** 中的 bTime , 需要完全一致。
eTime也是一样。
2.2.3 调用
在调用时, 不需要创建 Map 了, 只需要按参数提示传入对应的实际参数即可。
@Test public void testSelectBtweenCreatedTimeAnno() { Map<String, Object> params = new HashMap<>(); Calendar bTime = Calendar.getInstance(); // month 是从0~11, 所以9月是8 bTime.set(2018, Calendar.AUGUST, 29); Calendar eTime = Calendar.getInstance(); eTime.set(2018,Calendar.SEPTEMBER,2); SqlSession sqlSession = null; try { sqlSession = sqlSessionFactory.openSession(); StudentMapper studentMapper = (StudentMapper) sqlSession.getMapper(StudentMapper.class); List<Student> students = studentMapper.selectBetweenCreatedTimeAnno(bTime.getTime(), eTime.getTime()); for (int i = 0; i < students.size(); i++) { System.out.println(students.get(i)); } } catch (Exception e) { e.printStackTrace(); } finally { if (sqlSession != null) { sqlSession.close(); } } }
3 @Param 的优势
Map 方式的缺点就是需要手动创建 Map , 并对 SQL 中的参数进行赋值。其缺点:
相比于 Map 方式, 使用 @Param 时, 我们在使用上就像调用方法一样, 传入对应的实际参数即可。 调用时基本不会出错。
4 Github
相应代码, 可以访问 我的Github-helloMybatis
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
这是我的映射器 我拥有的firmDBName是从我的“主数据库”中获得的。 > 如果我在第二个查询中省略了${firmDBName},则该查询试图访问我的主数据库,并抛出表“primarydb.frm_dealer_type”未找到。因此,它基本上是试图在我的主数据库中搜索一个名为“frm_dealer_type”的表。 如果我尝试重写@result null 我想要一个解决方案来将我的参数fir
本文向大家介绍Mybatis的几种传参方式详解,包括了Mybatis的几种传参方式详解的使用技巧和注意事项,需要的朋友参考一下 前言 前几天恰好面试一个应届生,问了一个很简单的问题:你了解过Mybatis中有几种传参方式吗? 没想到其他问题回答的很好,唯独这个问题一知半解,勉强回答了其中两种方式。 于是这篇文章就来说一说Mybatis传参的几种常见方式,给正在面试或者准备面试的朋友巩固一下。 单个
本文向大家介绍详解Mybatis(五)Mapper接口,包括了详解Mybatis(五)Mapper接口的使用技巧和注意事项,需要的朋友参考一下 (1)Mapper接口和原理 Mapper组建 1、Mapper文件和Mapper接口应该放在同一个接口中 2、Mapper文件中的namespace应该设置为Mapper接口的全限定名称 3、Mapper文件中的操作元素ID对应Mapper接口的方法名称
主要内容:1. SQL 语句映射,2. 结果集映射,3. 关系映射为了简化 XML 的配置,MyBatis 提供了注解。我们可以通过 MyBatis 的 jar 包查看注解,如下图所示。 以上注解主要分为三大类,即 SQL 语句映射、结果集映射和关系映射。下面分别进行讲解。 1. SQL 语句映射 1)@Insert:实现新增功能 2)@Select:实现查询功能 3)@SelectKey:插入后,获取id的值 以 MySQL 为例,MySQL 在插入一条数据后
我有一个问题与mybatis注释查询以下错误。 组织。阿帕奇。伊巴蒂斯。结合BindingException:未找到参数“strDateStart”。可用参数为[0,1,param1,param2] 下面是mapper类中的代码。 与query中的参数和method中的args使用相同的名称,我可以在具有相同参数的条件中多次使用吗?