码迷,mamicode.com
首页 > 其他好文 > 详细

mybatis 的参数处理

时间:2017-06-02 01:03:23      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:to   pojo   map   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)

       


本文出自 “12392717” 博客,请务必保留此出处http://12402717.blog.51cto.com/12392717/1931426

mybatis 的参数处理

标签:to   pojo   map   mybatis   参数取值   

原文地址:http://12402717.blog.51cto.com/12392717/1931426

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!