mapper接口开发--条件,为什么是接口、参数

三个必要条件

  • _mapper.java和 _mapper.xml 需要在同一个目录 这就是为什么看到resources有同样的包
  • xml中的namespace为mapper.java的全限定路径
  • mapper.xml的id和mapper.java的方法名字、参数类型、返回值一致

最后通过sqlSession.getMapper(*mapper.class)得到接口,这样就可以操作java一样了

mapper为什么要定义成接口

  • mybatis底层通过namespace+id映射到对应xml,通过JDK动态代理帮助生成具体实现

  • JDK动态代理只能代理有接口的类,通过Proxy.newProxyInstall()生成代理,调用invoke方法实现

  • 生成的代理类底层已经继承了Proxy类,Java是一继承多实现的,所以mapper只能定义成接口

mapper的参数

除了基本类和POJO、Map都建议使用@Params注解,提高可读性

多个参数

mybatis默认是将参数解析成Map,参数是arg0 | params1 这样,可读性低,使用注解@Params(“ ”) 可以将arg0替换成你指定的key,这个时候KEY arg将会消失,params*保留。

单个参数
  • POJO类,直接使用。属性名和参数名称一致

  • Map集合,直接使用,Key和参数名一致

  • Collection集合,封装为Map

    map.put("arg0",collection);
    map.put("collection",collection集合);
    
  • List集合,封装成Map

    map.put("arg0",collection);
    map.put("collection",list集合);
    map.put("list",list集合);
    
  • Array数组,封装为Map

    map.put("arg0",array);
    map.put("array",array数组);
    
  • 其他类型,直接使用。

posted @ 2023-05-10 18:02  源灬点  阅读(74)  评论(0编辑  收藏  举报