mybatis3 mysql数据库管理系统的自动递增字段 如何获取

问题描述

我测试了很多种配置方法都不能实现1.我的数据库是mysql 配置insert语句 <insert id="addUser" parameterType="org.springframework.samples.domain.User" useGeneratedKeys="true" keyProperty="id" > insert into users (id,name,rdate,age) values (#{id},#{name},#{rdate,jdbcType=INTEGER},#{age}) </insert>用mybatis执行 userDao.addUser(user)后为什么user.getId还是为空2.我的数据库是mysql 配置insert语句 <insert id="addUser" parameterType="org.springframework.samples.domain.User"> insert into users (id,name,rdate,age) values (#{id},#{name},#{rdate,jdbcType=INTEGER},#{age}) <selectKey keyProperty="id" resultType="long" order="AFTER"> SELECT @@IDENTITY AS id 或者 SELECT LAST_INSERT_ID()</selectKey> </insert>用mybatis执行 userDao.addUser(user)后,为什么user.getId还是为空并且SELECT @@IDENTITY AS id 或者 SELECT LAST_INSERT_ID() 没有被执行。如何设置为 order="BEFORE" 会执行,但是会包主键重复日志如下 [DEBUG][2012-03-08 14:14:17,924][java.sql.Connection]ooo Connection Opened[DEBUG][2012-03-08 14:14:17,955][org.mybatis.spring.SqlSessionUtils]Registering transaction synchronization for SqlSession[DEBUG][2012-03-08 14:14:18,127][jdbc.audit]2. PreparedStatement.new PreparedStatement returned org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:255)[DEBUG][2012-03-08 14:14:18,127][jdbc.audit]2. Connection.prepareStatement(insert into users (id,name,rdate,age) values (?,?,?,?)) returned net.sf.log4jdbc.PreparedStatementSpy@857066 org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:255)[DEBUG][2012-03-08 14:14:18,158][jdbc.audit]2. PreparedStatement.setQueryTimeout(25000) returned org.apache.commons.dbcp.DelegatingStatement.setQueryTimeout(DelegatingStatement.java:249)[DEBUG][2012-03-08 14:14:18,158][jdbc.audit]2. PreparedStatement.setNull(1, 1111) returned org.apache.commons.dbcp.DelegatingPreparedStatement.setNull(DelegatingPreparedStatement.java:105)[DEBUG][2012-03-08 14:14:18,158][jdbc.audit]2. PreparedStatement.setString(2, "2") returned org.apache.commons.dbcp.DelegatingPreparedStatement.setString(DelegatingPreparedStatement.java:132)[DEBUG][2012-03-08 14:14:18,158][jdbc.audit]2. PreparedStatement.setLong(3, 1331187257) returned org.apache.commons.dbcp.DelegatingPreparedStatement.setLong(DelegatingPreparedStatement.java:120)[DEBUG][2012-03-08 14:14:18,174][jdbc.audit]2. PreparedStatement.setInt(4, 1) returned org.apache.commons.dbcp.DelegatingPreparedStatement.setInt(DelegatingPreparedStatement.java:117)[DEBUG][2012-03-08 14:14:18,174][jdbc.audit]2. PreparedStatement.addBatch() returned org.apache.commons.dbcp.DelegatingPreparedStatement.addBatch(DelegatingPreparedStatement.java:172)-2147482646null[DEBUG][2012-03-08 14:14:18,174][org.springframework.jdbc.datasource.DataSourceTransactionManager]Initiating transaction commit[DEBUG][2012-03-08 14:14:18,174][jdbc.audit]2. Connection.isClosed() returned false org.apache.commons.dbcp.DelegatingConnection.toString(DelegatingConnection.java:95)[DEBUG][2012-03-08 14:14:18,174][jdbc.audit]2. Connection.getMetaData() returned com.mysql.jdbc.DatabaseMetaData@fb1135 org.apache.commons.dbcp.DelegatingConnection.toString(DelegatingConnection.java:99)[DEBUG][2012-03-08 14:14:18,174][org.springframework.jdbc.datasource.DataSourceTransactionManager]Committing JDBC transaction on Connection [jdbc:mysql://127.0.0.1:3306/sdsp?useUnicode=true&characterEncoding=utf-8, UserName=root@localhost, MySQL-AB JDBC Driver][DEBUG][2012-03-08 14:14:18,174][jdbc.audit]2. Connection.commit() returned org.apache.commons.dbcp.DelegatingConnection.commit(DelegatingConnection.java:308)[DEBUG][2012-03-08 14:14:18,174][jdbc.sqlonly] org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)2. batching 1 statements: 1: insert into users (id,name,rdate,age) values (NULL,'2',1331187257,1) [DEBUG][2012-03-08 14:14:18,174][jdbc.sqltiming] org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)2. batching 1 statements: 1: insert into users (id,name,rdate,age) values (NULL,'2',1331187257,1) {executed in 0 msec}[DEBUG][2012-03-08 14:14:18,174][jdbc.audit]2. PreparedStatement.executeBatch() returned [I@1e3e7d2 org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)[DEBUG][2012-03-08 14:14:18,174][jdbc.audit]2. PreparedStatement.close() returned org.apache.commons.dbcp.DelegatingStatement.close(DelegatingStatement.java:168)[DEBUG][2012-03-08 14:14:18,190][org.mybatis.spring.SqlSessionUtils]Transaction synchronization committed SqlSession[DEBUG][2012-03-08 14:14:18,190][org.mybatis.spring.SqlSessionUtils]Transaction synchronization closed SqlSession[DEBUG][2012-03-08 14:14:18,440][jdbc.audit]2. Connection.setAutoCommit(true) returned org.apache.commons.dbcp.DelegatingConnection.setAutoCommit(DelegatingConnection.java:338)[DEBUG][2012-03-08 14:14:18,440][jdbc.audit]2. Connection.isReadOnly() returned false org.apache.commons.dbcp.DelegatingConnection.isReadOnly(DelegatingConnection.java:329)[DEBUG][2012-03-08 14:14:18,440][jdbc.audit]2. Connection.isClosed() returned false org.apache.commons.dbcp.DelegatingConnection.toString(DelegatingConnection.java:95)[DEBUG][2012-03-08 14:14:18,455][jdbc.audit]2. Connection.getMetaData() returned com.mysql.jdbc.DatabaseMetaData@1a81bd5 org.apache.commons.dbcp.DelegatingConnection.toString(DelegatingConnection.java:99)[DEBUG][2012-03-08 14:14:18,455][org.springframework.jdbc.datasource.DataSourceTransactionManager]Releasing JDBC Connection [jdbc:mysql://127.0.0.1:3306/sdsp?useUnicode=true&characterEncoding=utf-8, UserName=root@localhost, MySQL-AB JDBC Driver] after transaction[DEBUG][2012-03-08 14:14:18,455][org.springframework.jdbc.datasource.DataSourceUtils]Returning JDBC Connection to DataSource[DEBUG][2012-03-08 14:14:18,455][jdbc.audit]2. Connection.isClosed() returned false org.apache.commons.dbcp.DelegatingConnection.isClosed(DelegatingConnection.java:353)[DEBUG][2012-03-08 14:14:18,455][jdbc.audit]2. Connection.getAutoCommit() returned true org.apache.commons.dbcp.DelegatingConnection.getAutoCommit(DelegatingConnection.java:311)[DEBUG][2012-03-08 14:14:18,455][jdbc.audit]2. Connection.clearWarnings() returned org.apache.commons.dbcp.DelegatingConnection.clearWarnings(DelegatingConnection.java:305)[DEBUG][2012-03-08 14:14:18,455][jdbc.audit]2. Connection.getAutoCommit() returned true org.apache.commons.dbcp.DelegatingConnection.getAutoCommit(DelegatingConnection.java:311)[DEBUG][2012-03-08 14:14:18,502][org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor]Written [Hello world! ] as "text/html" using [org.springframework.http.converter.StringHttpMessageConverter@14a616]

解决方案

我设置mybatis事务自动提交,你提交事务了?
解决方案二:
我的环境是好用的啊,看你代码没看出什么问题 <insert id="insertUserInfo" parameterType="UserInfoEntity"> INSERT INTO user_info ( user_id, user_name, phone_number, birth_date) VALUES ( #{userId}, #{userName}, #{phoneNumber}, #{birthDate}) <selectKey resultType="string" keyProperty="userId" order="AFTER"> SELECT LAST_INSERT_ID() AS userId </selectKey> </insert> UserInfoEntity entity = new UserInfoEntity(); entity.setUserName("aaa"); entity.setPhoneNumber("123123"); entity.setBirthDate("20100101"); dao.insertUserInfo2(entity); System.out.println(entity.getUserId());

时间: 2024-11-01 23:14:40

mybatis3 mysql数据库管理系统的自动递增字段 如何获取的相关文章

MySQL数据库在指定位置增加字段

  MySQL数据库在指定位置增加字段: 本身属于MySQL的基本语法,这里给出一个例子. mysql> -- 测试数据库在指定位置增加字段 mysql> drop table if exists t; Query OK, 0 rows affected (0.06 sec) mysql> create table t(age int,address varchar(50)); Query OK, 0 rows affected (0.06 sec) mysql> desc t;

在mysql数据库中关于日期时间字段的处理

在mysql数据库中关于日期时间字段的处理 在开发中,日期时间字段一般有如下几种设计 假设要获取2013-08-15日到2013-08-16日之间的记录 1. 直接使用日期时间类字段 相关sql语句如下 select * from cms_news where  news_add_time between str_to_date("2013-08-15 00:00:00",'%Y-%m-%d %H:%i:%s') and str_to_date("2013-08-16 23:

ACCESS数据库重新编号自动编号字段

如何在 Access 中重置"自动编号"字段值.在 Access 中删除某个表中的一些行或所有行时,"自动编号"字段不会自动重置.要重置"自动编号"字段值并刷新引用表中的"自动编号"值,必 需手动执行一些任务. 注意:在执行下面的步骤之前必须备份数据库. 重置单个表中的"自动编号"字段 要重置"自动编号"字段值,可以使用方法 1 或方法 2. 方法 1 可以重置"自动编号&qu

修改MySQL数据库中表和表中字段的编码方式的方法_Mysql

今天向MySQL数据库中的一张表添加含有中文的数据,可是老是出异常,检查程序并没有发现错误,无奈呀,后来重新检查这张表发现表的编码方式为latin1并且原想可以插入中文的字段的编码方式也是latin1,然后再次仔细观察控制台输出的异常,进一步确定是表和表中字段编码不当造成的,那就修改表和其中对应的字段呗,网上找了一会儿,你别说还真有,执行完sql脚本后果然可以存入中文了,尽管如此还是认为有必要总结一下,古人云:好记性不如烂笔头嘛,呵呵呵. 修改表的编码方式:ALTER TABLE `test`

【mysql】备份篇1:使用系统计划任务+mysqldump 定时备份mysql数据库 不用输入密码自动导出sql文件

项目部署在服务期上之后,有了新的需求,需要每月定时备份mysql数据库的所有数据! 查找了网上的多篇文章之后,自己又对bat文件中的mysqldump语句进行改进,可以实现了不用输入密码就能自动定时备份数据库的功能! 下面就先以每天自动备份作为例子,将整个流程展示出来: 1.首先一点,你现在一个固定的地方,新建一个bat文件,用于系统的任务计划进程去执行bat中定义的相关操作! 因为是备份mysql数据库,所以我将bat文件新建在mysql的安装目录的bin目录下: 新建back_db.bat文

DB2 自动递增字段实现方法_DB2

使用这个一般是用作识别码的,当做定义表格的主键.generated语法则可以自定义你想怎么产生这个值的策略. 语法如下: column definition generated {always | by default} as {identity identity rules | using your rules} 我们先删掉上次我们建立的表格: db2 => drop table nomination 然后再创建一个表格: 复制代码 代码如下: Create table nomination

自动恢复MySQL数据库的日志文件思路分享及解决方案_Mysql

如果MySQL服务器启用了二进制日志,你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如,从你最后一次备份)直到现在或另一个指定的时间点的数据."mysqlbinlog:用于处理二进制日志文件的实用工具". 要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名.一般可以从选项文件(即my.cnf or my.ini,取决于你的系统)中找到路径.如果未包含在选项文件中,当服务器启动时,可以在命令行中以选项的形式给出.启用二进制日志的选项为 --log-b

JDBC对MySQL数据库布尔字段的操作方法_java

本文实例讲述了JDBC对MySQL数据库布尔字段的操作方法.分享给大家供大家参考.具体分析如下: 在Mysql数据库如果要使用布尔字段,而应该设置为BIT(1)类型 此类型在Mysql中不能通过MySQLQueryBrowser下方的Edit与Apply Changed去编辑 只能通过语句修改,比如update A set enabled=true where id=1 把A表的id为1的这一行为BIT(1)类型的enabled字段设置为真 在JAVA中,使用JDBC操作这个字段的代码如下: c

MySQL 数据库双向镜像、循环镜像(复制)_Mysql

对于双向数据库镜像,就是数据库A的数据变化要镜像到数据库B中,同时数据库B里的修改也要同时复制到数据库A里. 对于循环数据库镜像,就是多个数据库A.B.C.D等,对其中任一个数据库的修改,都要同时镜像到其它的数据库里. 应用:同一个Zen Cart网店的数据库和程序,可以放置在不同的主机上,在任一台主机上新增的订单.客户资料,都会同时加入其它的主机数据库里. 要实现双向或循环数据库镜像,首先要解决的就是防止数据库中自动递增(AUTO_INCREMENT)字段的冲突,以免多数据库各自生成一样的增量