注解开发mybatis的mapper属性和字段不对应问题@Results—resultMap

注解开发—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

参考1
参考2
谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MyBatis是一种基于Java的持久层框架,它提供了简化数据库访问的方法。在使用MyBatis开发过程中,可以通过注解来减少编写XML配置文件的工作量。 在使用注解开发MyBatis时,首先需要在Mapper接口的方法上添加对应注解映射SQL语句。常用的注解包括: 1. @Select:用于查询操作,可以指定SQL语句或调用已定义的SQL语句。 2. @Insert:用于插入操作,可以指定SQL语句或调用已定义的SQL语句。 3. @Update:用于更新操作,可以指定SQL语句或调用已定义的SQL语句。 4. @Delete:用于删除操作,可以指定SQL语句或调用已定义的SQL语句。 在注解中可以使用动态SQL语句,通过参数和条件判断来生成不同的SQL语句。例如,可以使用@SelectProvider注解来指定动态SQL的提供者。 同时,使用注解还可以配置结果映射。可以使用@Results注解来配置映射关系,包括数据库字段和Java对象属性之间的对应关系。 除了以上常用的注解外,MyBatis还提供了其他一些注解来支持更灵活的开发需求,如@Param、@ResultMap、@Options等。 需要注意的是,在使用注解开发时,需要在MyBatis的配置文件中配置Mapper接口的扫描路径,使得MyBatis能够扫描到Mapper接口并生成对应的实现类。 总的来说,注解开发MyBatis可以简化配置文件的编写,提高开发效率。但同时也需要注意注解的使用方式和规范,以保证代码的可读性和扩展性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值