Java MyBatis柱映射

Java MyBatis柱映射,java,mybatis,Java,Mybatis,我使用的是MyBatis 3.0.3,但有一个问题:数据库中的某些列的名称带有下划线,这些列应该映射到实体属性(当然是这种情况) 类用户{ 私有字符串名; ... } 公共接口UserDao{ @选择(“从用户中选择*) 列出findAllUsers(); } 不幸的是,我找不到任何方法来解决这个问题(就像在JPA-@列(name=“first_name”)中那样)。 我可以在select子句中为这些列使用别名(sush作为first_name作为firstName等),但这看起来也很蹩脚 有

我使用的是MyBatis 3.0.3,但有一个问题:数据库中的某些列的名称带有下划线,这些列应该映射到实体属性(当然是这种情况)

类用户{
私有字符串名;
...
}
公共接口UserDao{
@选择(“从用户中选择*)
列出findAllUsers();
}
不幸的是,我找不到任何方法来解决这个问题(就像在JPA-@列(name=“first_name”)中那样)。 我可以在select子句中为这些列使用别名(sush作为first_name作为firstName等),但这看起来也很蹩脚


有什么想法吗?谢谢。

谢谢DwB。这有助于:

    @Select("SELECT * FROM users")
    @Results({
        @Result(property = "firstName", column = "first_name"),
        @Result(property = "lastName", column = "last_name")
    })
    List<User> findUsers();
@Select(“从用户中选择”)
@结果({
@结果(property=“firstName”,column=“first_name”),
@结果(property=“lastName”,column=“last\u name”)
})
列出findUsers();

ps,但如果有多个查询,我需要为返回实体用户的每个方法编制@Results/@Result代码。在我的例子中,会有一些地方,所以这不是问题,但一般来说,我仍然希望找到更通用的解决方案。

UserMapper.xml
文件中定义
ResultMap
,并添加以下行:

<resultMap id="BaseResultMap" type="package.for.User">
  <result column="user_name" jdbcType="VARCHAR" property="userName" />
  <!--  other columns -->
</resultMap>

您可以使用自动生成这些基本代码。

Eduardo Macarron在以下问题上建议使用此功能:

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

基本上,您必须配置:

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

这意味着:

启用从经典数据库列名A_列到camel case经典Java属性名A列的自动映射


如果没有那么多列,您可以这样做,并避免使用ResultMap

@Select("SELECT first_name as firstName, last_name as lastName FROM users")
List<User> findUsers();
@Select(“从用户中选择first\u name作为firstName,last\u name作为lastName”)
列出findUsers();
为了使它更具可读性,您可以使用字符串数组,MyBatis用额外的空间将其凹化

@Select({
     "SELECT",
     "  first_name as firstName,",
     "  last_name as lastName",
     "FROM users"})
List<User> findUsers();
@选择({
“选择”,
“名为名,”,
“姓氏作为姓氏”,
“来自用户”})
列出findUsers();

在基于spring注释的配置中,可以通过可自定义的SqlSessionFactory启用下划线到驼峰大小写的映射,如下所示:

@Bean
@Primary
public SqlSessionFactory sqlSessionFactory() throws Exception {
    SqlSessionFactory factory = sessionFactoryBuilder().build();
    factory.getConfiguration().setMapUnderscoreToCamelCase(true);
    // other configurations
    return factory;
}

在配置文件中使用MyBatis的自动映射(如application.properties或application.yml), 这里是:

mybatis.configuration.map-underscore-to-camel-case=true
参考:

中文参考:

查看myBatis@Results和@Result注释。我认为您可以混合使用xml配置和注释。将@Selects保留在实际SQL的代码中,但将该部分放在xml配置文件中。结果映射应该应用于对象/类级别(基于名称空间),这样就不必在每个方法上指定@Results。这个问题现在有点老了,但为了将来参考,可能会看看自动映射:。您还可以使用MapUnderlineToCamelCase设置将下划线命名转换为camelcase,参考:2011年回答时,被接受的答案是正确的。但为了将来查看它的人,这个答案将是正确的方法。这在Spring Boot项目中使用
mybatis Spring Boot starter
maven依赖项时起作用(参考:)
@Bean
@Primary
public SqlSessionFactory sqlSessionFactory() throws Exception {
    SqlSessionFactory factory = sessionFactoryBuilder().build();
    factory.getConfiguration().setMapUnderscoreToCamelCase(true);
    // other configurations
    return factory;
}
mybatis.configuration.map-underscore-to-camel-case=true