MyBatis映射文件中参数问题

我只是一个虾纸丫 提交于 2019-12-21 01:33:29

MyBatis映射文件中参数问题

单个参数:mybatis 不做特殊处理

#{参数名}:取出参数值

多个参数:mybatis会做特殊处理

多个参数会被封装成一个map
key:param1,param2…paramN,或者参数的索引(1,2…N)
value:传入的参数
#{}就是从map中获取指定的key值

eg.
 <!-public List<Customer> findOne(int id,int name);-->
<select id="findOne"  resultType="com.domain.Customer">
      select * from customer
      id=#{pama1} and name=#{param2}
</select>

编写代码时为了方便,一般不使用上面这种方式

 <!-public List<Customer> findOne(@Param(“id”)int id,@Param("name")int name);-->

key:使用@Param注解指定特定的值
value:参数值
#{指定的值}:取出参数值
若按照上面第一种单个参数的方法取值,则会报异常:显示
Parameter xxx not found Available parameters are[1,0, param1,parame2]

pojo方式

当传入的参数是某个实体类(比如自己创建的Customer类,该类要和数据库中的表要一一对应),则可以直接取属性值:
#{属性名}:取出传入pojo的属性值

map方式

如果多个参数不是业务模型中的数据,没有对应的pojo,传入的参数不经常使用,为了方便,也可以传入map
#{key}:取出map中对应的值
eg:将所有数据封装在map里面

Map<String,Object> map=new HashMap<>();
	map.put("id",1);
	map.put("lastName","Tom");
	Customer c=mapper.getCustomer(map);
	
	

dao: public Customer getCustomer(Map<String,Object> map);
mapper映射文件:

<select id="getCustomer" resultType="com.domain.Customer">
	select * from customer where id=#{id} and lastname=#{lastName}
</select>

To

没有对应的pojo,但是参数经常使用
推荐来编写一个To(Transfer Object)数据传输对象
Page{
int index;
int size;
}

====常见场景

public Customer get(@Param("id") Integer id,String name);
取值:id------  #{id/param1}
     name------  #{param2}

public Customer get(Integer id,@Param("e")Customer c);
取值:id------- #{param1}
     name-----  #{param2.name/e.name}
 特别注意:如果是Collection(List,set)类型或者是数组,也会特殊处理,
 也是把传入的参数(list或者数组)封装在map中。
 取值:key: Collection(collection),如果是List还可以使用这个key (list),数组(array)
 eg.public Customer get(List<Integer> ids);
 取值:取出第一个id的值:#{list[0]}


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!