开发者

Java中MyBatis传入参数parameterType问题

目录
  • parameterType:MyBATis的传入参数
    • 参数类型主要分为两种
    • 获取参数中的值
  • 一、单参数
    • 二、多参数
      • 1、索引 #{index}
      • 2、Map封装多参数
      • 3、编程客栈List封装in
      • 4、注解方式
      • 5、多类型参数
    • 总结

      parameterType:MyBatis的传入参数

      参数类型主要分为两种

      (1)基本数据类型:int,string,long,Date

      (2)复杂数据类型:类和Map

      获取参数中的值

      (1)基本数据类型:#{参数} 获取参数中的值

      (2)复杂数据类型:#{属性名}  ,map中则是#{key}

      首先说说单参数基本数据类型,如:String,Long

      一、单参数

      //根据name查询
      public List<XXBean> getXXBeanList(String name); 
      
      <select id="getXXBeanList" parameterType="Java.lang.String" resultType="XXBean">
        select * from User u where u.name = #{name} 
      </select> 
      
      
      //根据主键id查询
      public List<XXBean> getXXBeanList(Long beanId);
      
      <select id="getXXBeanList" parameterType=android"java.lang.String" resultType="XXBean">
        select * frpythonom User u where u.userId = #{beanId} 
      </select>

      其中方法名和ID一致,#{}中的参数名与方法中的参数名一致, 上面采用的是XXXBean,是采用的短名字,

      select 后的字段列表要和bean中的属性名一致, 如果不一致的可以用 as 别名 来补充

      二、多参数

      1、索引 #{index}

      public List<XXBean> getXXBeanList(String beanId, String name); 
      
      <select id="getXXBeanList" resultType="XXBean">
        select * from user u where u.userId = #{0} and name = #{1} 
      </select> 

      由于是多参数,不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始

      #{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可

      2、Map封装多参数

          Map<String, Object> hashmap = new HashMap<String, Object>();
          params.put("userId", userId);
          params.put("userName", userName);
      
      public List<XXBean> getXXBeanList(HashMap <String, Object> hashmap); 
      
      <select id="getXXBeanList" parameterType="hashmap" resultType="XXBean">
        开发者_Python入门select * from user u where u.userId=#{userId} name = #{userName} 
      </select> 

      其中hashmap是mybatis自己配置好的直接使用就行。map中key的名字是那个就在#{}使用那个

      3、List封装in

      public List<XXBean> getXXBeanList(List<String> list); 
      
      <select id="getXXBeanList" resultType="XXBean">
        select * from user where userId in
        <foreach item="userId" collection="array" open="(" separator="," close=")">
          #{userId}
       </foreach>
      </select&gwww.devze.comt; 

      foreach 最后的效果是select 字段... from XX where id in ('1','2','3','4')

      4、注解方式

      public User getUser(@Param("userId")Long userId, @Param("name")String name);

      Mapper.XML配置:

      <select id="getUser" resultMap="com.xxx.xxx.User">
         SELECT * FROM user u
          where u.userId=#{userId} and u.name=#{name}
      </select>

      5、多类型参数

      selectList()只能传递一个参数,但实际所需参数既要包含String类型,又要包含List类型时的处理方法;将参数放入Map,再取出Map中的List遍历

      List<String> list = new ArrayList<String>();
      Map<String, Object> map2 = new HashMap<String, Object>();
      
      list.add("1");
      list.add("2");
      map2.put("list", list);
      
      map2.put("roleCode", "0101");

      mapper.xml

      <select id="getUser" parameterType="java.util.Map" resultMap="User">
        select u,userId, u.name, u.code
       from user u
       left join role r on r.role_userId = u.userId
       WHERE r.code = #{roleCode}
       and r.roleId not in
       <foreach item="roleId" collection="array" open="(" separator="," close=")">
          #{roleId}
       </foreach>
      </select>www.devze.com

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜