Mybatis中Java向SQL中传值的几种方式

  1. 需求: 在一个sql 中需要传递多个参数,这时候,这么传递和在<select>中获取值呢,有一条sql
    
    一:传递单个值:需要传递的参数:id
           方式一; 接口 中   find(Integer id);
                <select>
                    select * from user where id=#{id}
                </select>
           方式二:
                <select>
                    select * from user where id=#{xxx}  //传递单个值的时候,这里面写错都还可以传递过去
                </select>
    二:传递多个值 需要传递的参数有id age 呢
    
           错误: 这时候,假如想第一次那样,直接传递
                <select>
                    select * from user where id=#{id} AND age=#{age}
                </select>
        会报错 use: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available   parameters are [arg1, arg0, param1, param2]
    
           假如你还想直接传递参数的话
    
           ××方式1:可以传递params1,params2,意思是 底层map集合中的第几个元素
    
                       接口中 find (Integer id,Integer age)
    
                       <select>
                           select * from user where id=#{param1} AND age=#{param2}
                       </select>
    
                    在调用的时候,传递两个参数就可以了
    
    
    
           ××方式2:将需要传递的参数,封装在JavaBean类中,使用POJO来传递参数
                JavaBean中 User
                    Integer id;
                    Integer age;
                接口中 find (User user)
    
                <select>
                    select * from user where id=#{id} AND age=#{age}
                </select>
    
           ××方式3:将参数封装在map集合中例如
    
                --》    接口中  find(Map<String,Object> map);
    
                --》    <select>
                            select * from user where id=#{aaa} AND age =#{bbb}
                        </select>
    
                --》    调用的时候:
                        Map<String,Object> map = new HashMap<String,Object>();
    
                        map.put("aaa",5);
                        map.put("bbb",12);
                        userDao.find(map);
    
    
                注意,这里根据的是map 的key来找value的
    
    提出一个问题,假如需要传递的参数,既有单个参数,又有对象呢,这怎么传递?
            解决1: 接口中, find(Integer id,User user);
    
           使用POJO传递,还有上面多个参数传递的第一种
                <select>
                    select * from user where id =#{param1} AND age =#{param2.age}
                </select>
    
    
           追加,使用map来封装这两个参数
    
                --》接口中: find(Map<String , Object> map);
    
               --》 使用
                <select>
                    select * from user where id =#{aaa} AND age=#{bbb.age} AND name=#{bbb.name}
                </select>
    
                --》调用:
                    Map<String,Object> map = new HashMap<String , Object>();
                    User user= new User (name,age);
                    map.put("aaa",1);
                    map.put("bbb",User);
    
    
    
    
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章