关于mybatis的驼峰命名的问题
我们知道,通过如下配置可以启用下划线与驼峰式命名规则的映射(如first_name => firstName)
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>
这个配置在执行查询的操作的时候很好用,可以将数据库中下划线命名的字段直接对应到JavaBean中的驼峰命名的参数里。
但是执行insert操作的时候问题来了,我传入的是JavaBean对象,这个时候无法将驼峰命名的参数自动转成带下划线的(大概是因为不知道往哪儿加下划线)。
比如,我预期是写成这样:
<insert id="addUser" >
INSERT INTO user_info
(
user_id,
user_name
)
VALUES
(
#{user_id},
#{user_name},
)
</insert>
但是,这样会报错There is no getter for property named 'user_id' in 'class com.dx.User',因为我JavaBean中的参数名分别是userId和userName,所以我必须写成下面这样:
<insert id="addUser" >
INSERT INTO user_info
(
user_id,
user_name
)
VALUES
(
#{userId},
#{userName},
)
</insert>
但是下面这种字段名不一致写法会让我很难受,这里该怎么操作才能实现我的预期写法呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
这个方法虽然勉强可以,但是实在是有点Low了,添加和编辑时如果传入很多字段咋办?.....感觉无解了,要不我还是老老实实写吧
回复
@叶落花开 : 对啊,那就接受数据库字段名下划线分割吧,毕竟每种语言的规范不一样。
用@Param注解可以实现,比如dao里的接口为:
你就可以在mapper里用#{user_id}和#{user_name}取值了。
但是,这样的话接口就不能用addUser(UserInfo userInfo)了。
字段名都是有下划线的,这个没辙....
但是我又不想实体类里的参数带下划线,感觉不伦不类啊
回复
@叶落花开 : 那就老老实实的写。
那么你就不要下划线,直接比如 字段 UserName 对应 实体类 userName