在项目的实际开发中,有可能会遇到实体类中的属性名与列名不相同,不能改但。导致不能自动装配值的问题,此时可以接合@Results、@Result、@ResultMap实现开发
1.@Results注解
代替的是标签
该注解中可以使用单个@Result注解,也可以使用@Result集合
@Results({@Result(),@Result()})或@Results(@Result())
注意:使用注解是若报出org.apache.ibatis.binding.BindingException:Invalid bound statement (not found):接口全类名.方法名
可能是使用@Results注解时忘记使用@Select注解
2.@Resutl注解
代替了 标签和标签
@Result 中 属性介绍:
column 数据库的列名
Property需要装配的属性名
one 需要使用的@One注解(@Result(one=@One)()))
many 需要使用的@Many注解(@Result(many=@many)()))
@Select("select * from course")
@Results({
@Result(column = "c_id",property = "cid",javaType = Integer.class),
@Result(column = "c_name",property = "cname",javaType = String.class),
@Result(column = "c_pro", property = "cpro", javaType = String.class),
@Result(column = "c_rough",property = "crough",javaType = String.class)
})
List queryAll();
3、共用@Results——resultMap
为了解决重复使用,那就要让他变成一个有id的整体,其他地方要用就直接调用
@ResultMap(“id”)
@Result中通过id属性引用这个resultMap
@Select("select * from course")
@Results(id = "courseMap",value = {
@Result(column = "c_id",property = "cid",javaType = Integer.class),
@Result(column = "c_name",property = "cname",javaType = String.class),
@Result(column = "c_pro", property = "cpro", javaType = String.class),
@Result(column = "c_rough",property = "crough",javaType = String.class)
})
List queryAll();
@Select("select * from coursewhere c_id=#{cid}")
@ResultMap("courseMap")
Course queryById(int cid);