zoukankan      html  css  js  c++  java
  • 传参在mybatis的sql映射文件中正确获取

    1、单个参数:
    非自定义对象
    传参:getStuById(Integer id);
    取值:#{id}
    单个基本类型参数,随便取值都行;#{ok}
    对象:
    传参:saveStudent(Student student)
    取值:#{属性名}

    2、多个参数:
    传参:getStudentByLastNameAndAge(String lastName,Integer age)
    取值:#{参数名}不好使;报错提示可用的参数是[0,1,param1,param2]
    可用的取值方式:
    1)#{参数索引} #{0} #{1}
    2)#{param参数第几个} #{param1} #{param2}
    原因:一但方法传入了多个参数以后,mybatis会进行一个处理;把这些参数全部放在一个map中;
    map中的key就是参数的索引,或者是param1...N

    3、命名参数:我们可以使用@Param注解来指定mybatis在给多个参数封装map的时候,这个参数使用的key;默认参数索引或者paramx
    传参:public Student getStudentByLastNameAndAge(@Param("lastName")String lastName,@Param("age")Integer age);
    取值:#{命名的参数名}或者#{paramx}


    什么时候用基本类型传参:不将参数封装成pojo直接传给mybatis;很少用到;
    有些方法的参数是业务无关的;



    4、POJO:我们这么建议;如果我们传递的参数正好是业务逻辑定义的pojo,就用pojo;
    传参:saveStudent(Student student);
    取值:#{属性名}

    5、Map(集合);
    传参:public Student getStuByLastNameAndAge(Map<String, Object> map);
    取值:#{key}

    不管传什么?如果单个参数,mybatis直接就拿来用,如果多个参数,mybatis会将多个参数封装进一个map中,
    封装参数用的key默认是0,1,paramx。。。,我们可以使用@Param("key")为这个参数指定一个新的key

    传参: getStudent(@Param("stu")Student stu,@Param("map")Map<String,Object> hahamap,@Param("lastName")String lastName);
    取值:
    取值student对象中的age值:#{param1.age}===#{stu.age}
    取值hahamap中的email:#{param2.email}===#{map.email}
    取值lastName:#{param3}===#{lastName}

    POJO,Map怎么选择?
    业务逻辑中定义的POJO我们就使用它,有比较多临时的参数,并不是某个javaBean的,可以为了方便将其封装一个map传递。

    TO:(Transfer Object)(专门用它来传递数据的)
    POJO:(普通的java类)
    DO:(Domain Object)对象模型
    DTO:Data Transfer Object:数据传输对象
    DAO:Data Access Object:数据访问对象
    VO:Value Object:值对象;

  • 相关阅读:
    嵌入式软件设计第7次实验报告
    自我介绍
    软工 需求分析
    微软小娜app的使用
    嵌入式软件设计第12次实验报告
    嵌入式软件设计第11次实验报告
    嵌入式软件设计第十次
    嵌入式软件设计第九次
    软件工程需求分析
    嵌入式软件设计第8次实验
  • 原文地址:https://www.cnblogs.com/limingxian537423/p/7465540.html
Copyright © 2011-2022 走看看