mybatis 中的 insert 不能使用 resultMap,如何来应对数据库表字段和实体类不相同的情况?

2017-06-16 18:59:06 +08:00
 whwq2012

难道只能傻傻地一个个取别名吗?这太麻烦了吧。我用英文和中文,谷歌和百度都搜不出来,搜了一个小时,无奈才来提问的。希望有 java web 老司机来解惑

5186 次点击
所在节点    Java
11 条回复
zhx1991
2017-06-16 21:02:13 +08:00
当初为什么会不一致呢...
whwq2012
2017-06-16 21:10:13 +08:00
@zhx1991 数据库的字段的命名规范和属性的命名规范没统一
slixurd
2017-06-16 21:35:59 +08:00
插入还能取别名....
这是个啥....
whwq2012
2017-06-16 21:51:15 +08:00
@slixurd  解决办法一: 通过在查询的 sql 语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上了,这种方式是通过在 sql 语句中定义别名来解决字段名和属性名的映射关系的。

  解决办法二: 通过<resultMap>来映射字段名和实体类属性名的一一对应关系。这种方式是使用 MyBatis 提供的解决方式来解决字段名和属性名的映射关系的。
http://www.cnblogs.com/xdp-gacl/p/4264425.html
nonesuccess
2017-06-16 22:25:07 +08:00
@whwq2012 人家都说了不能用 resultMap
slixurd
2017-06-16 23:08:22 +08:00
@whwq2012 那是用来查询的,SELECT 才有别名....
和 INSERT 没有任何关系....
看官方文档就行了
http://www.mybatis.org/mybatis-3/sqlmap-xml.html
手写 SQL 简单又方便....
<insert id="insertAuthor">
insert into Author (id,username,password,email,bio)
values (#{id},#{username},#{password},#{email},#{bio})
</insert>
whwq2012
2017-06-17 09:30:10 +08:00
@slixurd 但是我数据库里的字段名和实体类不一样,一运行就提示错误。。。
Makki
2017-06-17 16:32:20 +08:00
<insert id="save">
insert into Person (DBFirstName, DBLastName, DBAge, DBGender)
values (#{JAVAFirstName},#{JAVALastName},#{JAVAAge},#{JAVAGender})
</insert>

这样试试呢
whwq2012
2017-06-17 22:16:04 +08:00
@Makki 对对对,这样就行了
nnxiaod
2017-06-18 18:52:11 +08:00
加个 parameterType 参数指定个实体类然后用实体类的字段,不行吗?
indexry
2017-06-22 11:58:24 +08:00
@nnxiaod 有道理 是这样的 <insert id="saveEntity" parameterType="com.ccys.fskx.entity.User" >

id 的话你还可以这样<selectKey keyProperty="id" resultType="String" order="BEFORE">
select replace(uuid(),'-','') from dual
</selectKey>

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/368953

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX