postgresql 序列自增 & Mybatis添加功能

前端之家收集整理的这篇文章主要介绍了postgresql 序列自增 & Mybatis添加功能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

简单记录一下问题:

以前通过Oracle+Mybatis做新增功能时主键都是通过sequence自增的,了解到postgresql也有序列,遂尝试结合Mybatis做一个简单的insert功能,结果报错:

org.springframework.jdbc.BadsqlGrammarException: CrudMapper.saveGoods (batch index #1) Failed. Cause: java.sql.BatchUpdateException: 批次处理 0 insert into t_crud 
			values (seq_crud.nextval,'牧马人鼠标','鼠标',168.0) 被中止,呼叫 getNextException 以取得原因。
; bad sql grammar []; nested exception is org.postgresql.util.PsqlException: 错误: 对于表"seq_crud",丢失FROM子句项
  位置:32
	at org.springframework.jdbc.support.sqlErrorCodesqlExceptionTranslator.doTranslate(sqlErrorCodesqlExceptionTranslator.java:231)
	at org.springframework.jdbc.support.AbstractFallbacksqlExceptionTranslator.translate(AbstractFallbacksqlExceptionTranslator.java:73)
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:74)
	at org.mybatis.spring.sqlSessionUtils$sqlSessionSynchronization.beforeCommit(sqlSessionUtils.java:291)
	at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:95)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:928)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTrans

错误很明显,BadsqlGrammarException,即sql语法错误,oracle中的序列使用方法和pg的明显是不一样的,我们在oracle中可以通过序列的隐式对象nextval来获取序列的下一个值,而在postgresql中nextval是作为一个函数来使用,也就是说:

Oracle中的 seq_xxx(序列名).nextval等同于

Postgresql中的nextval('序列名')

问题成功解决,下面贴出mapper和测试方法

	<insert id="saveGoods" parameterType="cn.zhsz.model.admin.Goods">
		insert into t_crud 
			values (nextval('seq_crud'),#{name},#{type},#{price})
	</insert>


关于postgresql的序列基本和oracle的序列没有区别,可以在pgAdmin中通过可视化工具方便的进行创建:


猜你在找的Postgre SQL相关文章