注解开发—mybatis的mapper属性和字段不对应问题@Results—resultMap
Mybatis给我们提供了一种映射方式,如果属性的命名是遵从驼峰命名法的,数据列名遵从下划线命名。MyBatis支持使用注解来配置映射语句,不再需要在XML配置文件中配置。
学习内容
- @Results对应resultMap
- @Result对应result
这两个注解是应用在方法的级别上的,也就是在mapper方法。
@Results结果映射
mybatis不能通过@Column注解或者直接使用实体类的属性名作为数据列名,而是需要自己指定实体类属性和数据表中列名之间的映射关系
解决方案
我们可以将查询结果通过别名与JavaBean属性映射起来。当然使用@Results注解也可以将指定列与指定JavaBean属性映射起来
执行SELECT查询的:
@Select("SELECT * FROM `wx_message_config` WHERE `content_key_words` IS NOT NULL AND LENGTH(content_key_words) > 0")
@Results({
@Result(property = "msgType", column = "msg_type"),
@Result(property = "eventType", column = "event_type"),
@Result(property = "eventKey",column = "event_key"),
@Result(property = "contentKeyWords",column = "content_key_words")
})
List<WxMessageConfig> queryAllKeyWords();
@Select("SELECT * FROM `wx_message_config` WHERE `id` = #{id}")
@Results({
@Result(property = "msgType", column = "msg_type"),
@Result(property = "eventType", column = "event_type"),
@Result(property = "eventKey",column = "event_key"),
@Result(property = "contentKeyWords",column = "content_key_words")
})
WxMessageConfig queryKwById(int id);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
由于注解是针对方法的,对于Mapper中的每个操作数据库的方法都必须有相同的注解完成映射关系的建立,导致很多是重复的。
共用@Results——resultMap
为了解决重复使用,那就要让他变成一个有id的整体,其他地方要用就直接调用
@ResultMap(“id”)
@Result中通过id属性引用这个resultMap
@Select("SELECT id, name, password FROM user WHERE id = #{id}")
@Results(id = "userMap", value = { @Result(column = "id", property = "id", javaType = Integer.class),
@Result(column = "name", property = "name", javaType = String.class),
@Result(column = "password", property = "password", javaType = String.class) })
User findById(Integer id);
@Select("SELECT * FROM user")
@ResultMap("userMap")
List<User> fingAll();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
这个本地测试好像没有成功
通过使用在SQL语句中定义别名完成映射
@Select("select user_name as userName, user_id as userId from t_user where user_name = #{userName}")
User getUserByName(@Param("userName") String userName);
- 1
- 2