我正在使用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作为firstName作为firstName等),但这看起来也很蹩脚。
有什么想法吗?感谢。
答案 0 :(得分:20)
感谢DwB。这有助于:
@Select("SELECT * FROM users")
@Results({
@Result(property = "firstName", column = "first_name"),
@Result(property = "lastName", column = "last_name")
})
List<User> findUsers();
ps但是在多个查询的情况下,我需要为每个返回实体User的方法的样板@ Results / @结果代码。在我的情况下,将会有很少的地方,所以这不是一个问题,但总的来说,我仍然希望找到更一般的解决方案。
答案 1 :(得分:11)
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的自动映射。
答案 2 :(得分:5)
在ResultMap
文件中定义UserMapper.xml
,然后添加以下行:
<resultMap id="BaseResultMap" type="package.for.User">
<result column="user_name" jdbcType="VARCHAR" property="userName" />
<!-- other columns -->
</resultMap>
在Java代码中,添加@ResultMap
注释:
public interface UserDao {
@Select("SELECT * FROM users")
@ResultMap("BaseResultMap")
List<User> findAllUsers();
}
您可以使用MyBatis Generator自动生成这些基本代码。
答案 3 :(得分:4)
如果没有这么多列,你可以这样做,避免使用ResultMap。
@Select("SELECT first_name as firstName, last_name as lastName FROM users")
List<User> findUsers();
为了使其更具可读性,您可以使用字符串数组,MyBatis与额外空间结合使用
@Select({
"SELECT",
" first_name as firstName,",
" last_name as lastName",
"FROM users"})
List<User> findUsers();
答案 4 :(得分:1)
在Spring中,基于注释的配置下划线可以通过可自定义的SqlSessionFactory启用驼峰案例映射,如下所示:
@Bean
@Primary
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactory factory = sessionFactoryBuilder().build();
factory.getConfiguration().setMapUnderscoreToCamelCase(true);
// other configurations
return factory;
}
答案 5 :(得分:1)
在配置文件中使用MyBatis的自动映射(类似于application.properties或application.yml), 在这里像:
mybatis.configuration.map-underscore-to-camel-case=true
参考:http://www.mybatis.org/mybatis-3/sqlmap-xml.html#Auto-mapping
中文参考: http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#Auto-mapping