MyBatis 列映射

2022-09-03 16:29:17

我正在使用MyBatis 3.0.3并遇到问题:数据库中的某些列具有带下划线的名称,这些列应映射到实体属性(当然在camelCase中)

class User {
  private String first_name;
  ...
}

public interface UserDao {
  @Select("SELECT * FROM users")
  List<User> findAllUsers();
}

不幸的是,我看不到任何方法来声明性地解决这个问题(就像在JPA中所做的那样 - @Column(name = “first_name”))。我可以在 select-clause 中为这些列(sush 作为first_name firstName 等)创建别名,但这看起来也很蹩脚。

有什么想法吗?谢谢。


答案 1

感谢DwB。这有助于:

    @Select("SELECT * FROM users")
    @Results({
        @Result(property = "firstName", column = "first_name"),
        @Result(property = "lastName", column = "last_name")
    })
    List<User> findUsers();

ps 但是,如果有多个查询,我需要为返回实体 User 的每个方法@Results/@Result代码进行样板。在我的情况下,会有很少的地方,所以这不是一个问题,但总的来说,我仍然想找到更通用的解决方案。


答案 2

Eduardo Macarron在以下问题上提出了此功能的建议:

https://code.google.com/p/mybatis/issues/detail?id=43

根据 MyBatis 3 的文档,现在可以通过以下描述的设置实现:

http://mybatis.github.io/mybatis-3/configuration.html#settings

基本上,您必须配置:

<setting name="mapUnderscoreToCamelCase" value="true"/>

这意味着:

启用从经典数据库列名A_COLUMN到驼峰大小写经典 Java 属性名 aColumn 的自动映射。


推荐