mybatis 的参数处理

1、接口中传递参数不同数量时的情况处理:

a、单个参数的情况:

mybatis不会做特殊处理,可以使用 #{参数名/任意名}:取出参数值。(可以看到上面的输出结果没有任何问题。)

b、多个参数的情况:

如果按照上面的方式指定,即如下图所示,会出异常。(这样截图太多,不写地太过详细)

注:可以看到,异常报错提示中,只能够以索引值或者 param1,param2,... 的方式来指定。

c、命名参数的形式指定:在指定的方法中添加 @Param("指定参数名") 注解即可。(可以看到下面的输出结果正常。)

2、定义的接口可以传递  POJO、Map 以及 TO(Transfer Ojbect,数据传输对象):

a、如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入 pojo:

即  #(属性名):取出传入的 pojo 的属性值(之前博文中已经介绍)

b、如果多个不是业务逻辑中的数据,没有对应的 pojo,不是经常使用,为了方便,我们也可以传入 map 对象:

也是 #(key):取出 map 中对应的值

注:可以看到,用 Map 类型的对象传输后,输出结果没有出错。

c、如果多个参数不是业务模型中的数据,但是经常要使用,推荐来编写一个 TO。如:

Page{

int index;

int size;

}

3、参数值的获取 #{} 和 ${} 的区别:

#{}:可以获得 map 中的值或者是 pojo 对象属性的值

${}:可以获得 map 中的值或者是 pojo 对象属性的值

区别:

#{}:是以预编译的形式,将参数设置到 sql 语句中。(可以防止 sql 注入)

${}:取出的值直接拼接在 sql 语句中,会有安全问题。

在大多数情况下,我们取参数的值都应该使用 #{} 方式。但是,原生 jdbc 不支持占位符的地方我们可以使用 ${} 进行取值。比如分表、排序......(按照年份分表拆分等)

注:如上图所示,sql 语句中的表名不是参数设置的位置,在运行时会直接报错。

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘tbl_employees‘ where id = 2 and last_name = ‘littleJM‘‘ at line 1

    注:如上图所示,sql 语句中把 #{tableName} 修改为 ${tableName},测试代码输出的结果就没有问题了。

    附:(参数取值需要注意的地方)

举例:

-  public Employee getEmp(Integer id,@Param("e")Employee emp);

取值: id ==>  {param1}  lastName ==> #{param2.lastName/e.lastName}

-  public Employee getEmpById(List<Integer> ids);

取值:取出第一个 id 的值: #{list[0]}

如果是 Connection(List、Set) 类型或者是数组,也会特殊处理,也是把传入的 list 或者是数组封装在 map 中。key:如果为 Connection,则取值为 collection。如果为 List,还可以使用这个 key(list)。(数组为 array)

时间: 2024-10-19 11:39:44

mybatis 的参数处理的相关文章

mybatis 传递参数的方法总结

有三种mybatis传递参数的方式: 第一种 mybatis传入参数是有序号的,可以直接用序号取得参数 User selectUser(String name,String area); 可以在xml配置文件中写 <select id="selectUser" resultMap="BaseResultMap"> select * from user_user_t where user_name = #{0} and user_area=#{1} <

【转载】Mybatis多参数查询映射

转载地址:http://www.07net01.com/zhishi/402787.html 最近在做一个Mybatis的项目,由于是接触不久,虽然看了一下资料,但在实际开发中还是暴 露了很多问题,其中最让我头疼的就是selete的parameterType问题,网上这类的帖子虽然有 但是不全,很多情况下很难找到你想要的答案. 为此我对这个问题进行了总结,希望对像我这样的新手有一定的帮助. (一)单个参数 public List<XXBean> getXXBeanList(String xxC

MyBatis传递参数

MyBatis传递参数 一.使用 map 接口传递参数 在 MyBatis 中允许 map 接口通过键值对传递多个参数,把接口方法定义为 : public List<Role> findRolesByMap(Map<String , Object> parameterMap); 此时,传递给映射器的是一个 map对象,使用它在 SQL 中设置对应的参数,如代码清单, 参数 roleName 和 note , 要求的是 map 的键 <select id=" find

【mybatis源码学习】mybatis的参数处理

一.mybatis的参数处理以及参数取值 1.单个参数 mybatis不做任何处理 取值方式: ? #{参数名/任意名} <!-- Employee getEmpById(Integer id); --> <select id="getEmpById" resultType="com.mxc.bean.Employee"> select * from employee where id=#{id} </select> 2.多个参数

【MyBatis】解析MyBatis传入参数的问题

一.单个参数: public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean"> select t.* from tableName t where t.id= #{id} </select> 其中方法名和ID一致,

Mybatis多参数查询映射

最近在做一个Mybatis的项目,由于是接触不久,虽然看了一下资料,但在实际开发中还是暴露了很多问题,其中最让我头疼的就是selete的parameterType问题,网上这类的帖子虽然有但是不全,很多情况下很难找到你想要的答案.为此我对这个问题进行了总结,希望对像我这样的新手有一定的帮助. (一)单个参数public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList" para

mybatis 单一参数时的动态语句

多参数时,可以传对象或封装成map public void getBookList(String publisher,String author){ Map<String,Object> maps = new HashMap<String, Object>(); maps.put("publisher", publisher); maps.put("author", author); this.getListByEntity("ge

Mybatis传入参数为map

Mapper: List<AdPayConfigEntity> selectByAdType(@Param("status") Integer... status); XML:<select id="selectByAdType" parameterType="map" resultMap="BaseResultMap"> SELECT * from sky_ad_pay_config WHERE ad

MyBatis传入参数为集合 list 数组 map写法

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有item,index,collection,open,separator,close.item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性