MyBatis insert返回主键不成功

vnetoolxw 发布于 2014/04/06 12:43
阅读 15K+
收藏 1

【DevOps必读】产品经理与程序员之间如何破局?>>>

int result = newsDao.insertNews(news);
System.out.println(result);
System.out.println(news.getId());

数据是插入成功了,可是news.getId()返回一直是数字0,控制台打印如下:

mybatis-config.xml:

NewsMapper.xml配置如下:

mybatis我使用的是3.2.2版本,不知道为什么返回插入主键不成功,知道怎么解决的请回复,谢谢!


加载中
0
hibegin
hibegin
返回的首影响的行数吧。 0是没有插入成功吧。
0
南湖船老大
南湖船老大

你理解错配置的意思了吧

0
vnetoolxw
vnetoolxw

引用来自“wzfz”的评论

返回的首影响的行数吧。 0是没有插入成功吧。

可是数据已经插入数据库表中了啊,不应该是返回1么,求解!!!

hibegin
hibegin
如果是mysql 可以先查出最大值。 然后加1 insert 时 加上id 列。
hibegin
hibegin
这样取id 不对吧。0 是int 的默认值。i 返回int 的min 就不结了。
0
vnetoolxw
vnetoolxw

引用来自“wzfz”的评论

返回的首影响的行数吧。 0是没有插入成功吧。

引用来自“vnetoolxw”的评论

可是数据已经插入数据库表中了啊,不应该是返回1么,求解!!!

可是我google了半天,网上有人说那样可以返回插入主键的,下面是我搜到的帖子链接:

http://chenzhou123520.iteye.com/blog/1849881
为什么我照着做就是没帖子里说的效果呢,难道我被忽悠了?

0
peanutmain
peanutmain

1.对于insert是没有返回值的,你查看insert就可知道,根本就没有resultType这个选项

2.对于自增的主键为什么没有返回值,看了你insert的配置是完全没有问题的,我的3.2.3,mysql数据库,主键使用的int 自动增加,无符号, 能够正常返回,你再仔细检查检查吧

0
vnetoolxw
vnetoolxw

引用来自“lsw90”的评论

1.对于insert是没有返回值的,你查看insert就可知道,根本就没有resultType这个选项

2.对于自增的主键为什么没有返回值,看了你insert的配置是完全没有问题的,我的3.2.3,mysql数据库,主键使用的int 自动增加,无符号, 能够正常返回,你再仔细检查检查吧

方便留下你的QQ嘛,远程给看下可以么

0
徐林
徐林

主键不建议用DB自动生成的,否则SQL要对不同的DB写不同的代码,一直在用: https://github.com/obullxl/atom-ticket,统一ID生成器。

0
若海
若海


应该是你的INSERT语句写得不对。keyProperty指的是你的Java中的属性名,不知道你的数据库中的列名和Java中的属性名称是否都叫id,如果不一样就要注意这个问题。

至于没有返回主键的问题,是因为INSERT语句没加ID这个列,试着用如下写法看行不行(家里没环境,没法给你验证)。

insert into news(id, content, type, publish_date)
values(#{id}, #{title}, #{content}, #{publishdate})




0
vnetoolxw
vnetoolxw

引用来自“若海”的评论


应该是你的INSERT语句写得不对。keyProperty指的是你的Java中的属性名,不知道你的数据库中的列名和Java中的属性名称是否都叫id,如果不一样就要注意这个问题。

至于没有返回主键的问题,是因为INSERT语句没加ID这个列,试着用如下写法看行不行(家里没环境,没法给你验证)。

insert into news(id, content, type, publish_date)
values(#{id}, #{title}, #{content}, #{publishdate})




数据库主键字段和实体类的属性名都叫id,加上id依然返回0

若海
若海
还有数据库中ID是自增长的列吗?
0
vnetoolxw
vnetoolxw

引用来自“若海”的评论


应该是你的INSERT语句写得不对。keyProperty指的是你的Java中的属性名,不知道你的数据库中的列名和Java中的属性名称是否都叫id,如果不一样就要注意这个问题。

至于没有返回主键的问题,是因为INSERT语句没加ID这个列,试着用如下写法看行不行(家里没环境,没法给你验证)。

insert into news(id, content, type, publish_date)
values(#{id}, #{title}, #{content}, #{publishdate})




引用来自“vnetoolxw”的评论

数据库主键字段和实体类的属性名都叫id,加上id依然返回0

必须是啊,问题依然没有解决,为什么我在google搜索:mybatis插入返回主键,  他们都信誓旦旦的说那样可以自动把id注入到对象中

程序猿Zz
回复 @IToy : 正解
IToy
IToy
insert 之后用 domain.getId()就可以获取ID了
返回顶部
顶部