`
phpxiaoxin
  • 浏览: 253003 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ibatis psql/mysql 主键 自增 以及ibatis代码分析

阅读更多

问题(ibatis代码分析请看最后两行):

 

ibatis完成插入数据后获取插入数据的id,ibatis是通过“selectKey”完成id的获取。

 

而对于插入的id分两种:

 

1.预先生成(pre-generate)主键的,如Oracle和PostgreSQL;

2.有些是事后生成(post-generate)主键的,如MySQL和SQL Server

 

参考自:http://www.iteye.com/post/429901

 

下面现给出mysql的例子:

 

<insert id="InsertOrganization" parameterClass="Organization" resultClass="int">
	<selectKey property="Id" type="post" resultClass="int">
		SELECT LAST_INSERT_ID() AS value
	</selectKey>			
	INSERT INTO Organizations
		(Org_Code, Org_Name) 
	VALUES 
		(#Code#, #Name#)
</insert>

 

这里需要注意type="post"定义了selectKey语句在insert语句之后执行type="pre"则是在前面执行,也有人说这里可以不加这个type属性,而直接将selectKey标签放到insert的后面即:

 

<insert id="InsertOrganization" parameterClass="Organization" resultClass="int">			
	INSERT INTO Organizations
		(Org_Code, Org_Name) 
	VALUES 
		(#Code#, #Name#)
	<selectKey property="Id" resultClass="int">
		SELECT LAST_INSERT_ID() AS value
	</selectKey>
</insert> 

 

这个未亲自测试...

 

而对于psql则应该通过下面方式实现:

 

一下例子参考自:http://opensource.atlassian.com/confluence/oss/pages/viewpage.action?pageId=407

里面包含了很多数据库的自增的实现方式。这里没有介绍的,可以进去参考。

 

<insert id="InsertOrganization" parameterClass="Organization" resultClass="int">
	<selectKey property="Id" type="post" resultClass="int">
		SELECT cast(last_value as int) AS value
		FROM TableName_Colom_seq
	</selectKey>
	INSERT INTO Organizations
		(Org_Code, Org_Name) 
	VALUES 
		(#Code#, #Name#)
</insert>

 

这里的TableName_Colom_seq其实是就是:数据表名_字段名_seq,而我这边简化成了:

SELECT last_value FROM member_id_seq,

这里需要解释的是:虽然psql是预先生成(pre-generate)主键,但这里的type="post"却是post后执行而不是pre先执行。大家可以在pgadmin里面执行一下上面的sql语句,对比一下,其实获取到的数值是最后一条记录的id值。

 

而psql的NEXTVAL(“member_id_seq“)获取到的是预先生成的编号。这里至于他是不是预先生成还是获取到最后一条记录,我就没那个功力去研究了。但是如果先执行:

SELECT NEXTVAL(“member_id_seq“)

再执行insert语句,你会发现:nexxtval获取到了1则insert的时候id为2

如果反过来则insert为1,nexxtval为2,

我在pgadmin里面测试过。如果连续执行:SELECT NEXTVAL(“member_id_seq“)

会发现获取到的数值是连续增加的,而不是一样的。

所以说NEXTVAL函数会增加一条记录编号,而insert又会增加一条。

因此两个无法配置使用获取到刚刚插入的数据的id,那么nextVal是作什么用的呢?文档是明明是这样写的?

http://man.chinaunix.net/database/postgresql_8.0_CN/sql-createsequence.html

http://man.chinaunix.net/database/postgresql_8.0_CN/functions-sequence.html

 

这个地址提到ibatis这种用法的性能问题:http://duooluu.iteye.com/blog/397763

 

最后有个文章提一下,说的是ibatis的主要流程,核心类,说的比较风趣,即便不学习ibatis也当看一乐子。

http://eils2000.iteye.com/blog/348722

分享到:
评论

相关推荐

    08_ibatis教程_sql主键生成方式.rar

    Ibatis允许开发者自定义SQL、存储过程以及高级映射,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。在主键生成方面,Ibatis提供了多种策略来适应不同的数据库系统和业务需求。 1. **手工设置主键(Manual...

    08_ibatis教程_sql主键生成方式.zip

    3. **Identity(自动增长)**:对于支持自动增长主键的数据库,如MySQL,Ibatis可以通过`identityInsert`属性开启自动增长功能。插入数据后,数据库会自动为新记录分配一个唯一的主键值。 4. **HiLo算法**:在大...

    quartz+ibatis+oracle/mysql\quartz+hibernate+oracle/mysql

    我做的是 spring + quartz+ mysql and oracle 持久层 ibatis and hibernate 项目用eclipse 导入 不同的数据库 请在数据库运行不同的SQL 脚本 用hibernate 时注意 是什么数据库 hibernate.properties 文件第一二行...

    Mybatis-plus实现主键自增和自动注入时间的示例代码

    Mybatis-plus 实现主键自增和自动注入时间的示例代码 Mybatis-plus 是一个基于 Mybatis 的增强型 ORM 框架,它提供了许多实用的功能来简化数据库操作。在本文中,我们将通过示例代码,介绍如何使用 Mybatis-plus ...

    08_传智播客ibatis教程_sql主键生成方式

    通过学习“08_传智播客ibatis教程_sql主键生成方式”,开发者能够熟练掌握如何在Ibatis中配置和使用各种主键生成策略,从而提高代码的灵活性和数据库操作的效率。在实际开发中,还需要注意不同数据库对主键生成策略...

    Ibatis/mybatis代码生成工具

    《Ibatis/mybatis代码生成工具详解》 在Java开发领域,Ibatis和Mybatis作为两款广泛应用的持久层框架,极大地简化了数据库操作。为了进一步提高开发效率,开发者们设计了一系列的代码生成工具,如"Ibatis Helper"和...

    C#中iBatis连接mySQL使用的DLL

    C#中iBatis连接mySQL使用的DLL

    ibatis +mysql 实例

    在IT行业中,数据库管理和持久化框架的使用是至关重要的,特别是在Web开发中。这个"ibatis + mysql 实例...通过学习和分析这个实例,你可以更好地掌握Ibatis与MySQL的协同工作方式,以及如何在实际项目中应用这些技术。

    ibatis驱动+Mysql驱动+SQL驱动

    本文将详细讨论“ibatis驱动+Mysql驱动+SQL驱动”这个组合在软件开发中的应用及其重要性。 首先,让我们从Ibatis开始。Ibatis是一个优秀的持久层框架,它允许开发者将SQL语句直接集成到Java代码中,从而提供了比...

    简单的ibatis与mysql的交互

    本教程将围绕“简单的ibatis与mysql的交互”这一主题展开,帮助初学者理解如何在Eclipse环境下使用Ibatis与MySQL数据库进行交互。 首先,Ibatis的核心理念是将SQL语句写在XML配置文件中,这样既保持了代码的整洁,...

    Spring MVC Ibatis Bean 根据mysql数据表——代码生成工具

    总的来说,Spring MVC Ibatis Bean 根据mysql数据表的代码生成工具是提升开发效率、降低维护成本的有效手段,它整合了Spring MVC的控制层、Ibatis的数据访问层以及Java Bean的业务实体,帮助开发者快速构建基于MySQL...

    Ibatis连接MySQL数据库实例

    总的来说,Ibatis连接MySQL数据库实例展示了如何通过Ibatis进行数据库操作,包括数据源配置、Mapper接口设计、XML映射文件编写,以及Spring整合等关键环节。理解并熟练掌握这些步骤,将有助于开发出更加灵活和高效的...

    JSF+iBATIS+MySQL示例代码

    目前网上罕见的JSF+iBATIS+MySQL示例代码,公司某软件项目所需而做的前期DEMO,只有两个Web页面,用户登录和用户列表,但已经能够说明JSF+iBATIS的典型应用方式。 MyEclipse6.5 项目工程文件,内含SQL建库指令。 ...

    sprngmvc+ibatis+oracle/mysql包含上传文件整合实例

    经过不断的搜寻,发现很多大神提供的springmvc开发实例存在某些漏洞,对我等又赶时间,又静不下心的人甚是难过,本人经过几天的努力终于在前人基础上做出了完善,提供一个实例给大家,让大家能通过直观的认识快速学习

    Ibatis+MySql(含对应数据库sql) 源码

    通过解压"Ibatis01MySql"这个文件,你可以看到实际的项目结构,包括Ibatis的配置文件、Mapper接口、映射文件以及数据库的SQL脚本。这将帮助你更直观地了解Ibatis是如何与MySql协作的,同时也方便你动手实践,加深...

    struts2_spring2.5_ibatis2.3_mysql架构

    *mysql5.0 *jdk 1.6 *带有所有jar包,可直接运行 本实例实现了用户登陆,用户信息CRUD相关操作。让你感受到了ibatis做o/r mapping的方便快捷。 下次集成dwr进来 create table users( id INT NOT NULL AUTO_...

    Ibatis结合MySQL数据库的使用方法Demo

    本工程用于研究Ibatis和MySQL结合使用的方法 本工程编码方式:UTF-8 须执行的SQL语句: CREATE DATABASE `test`; USE `test`; DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` char(36) NOT NULL...

    Spring + Ibatis 与mysql集群集成

    在构建大型分布式系统时,数据库集群是至关重要的组成部分,它能提供高可用性、负载均衡以及数据冗余。本教程将深入探讨如何将Spring、Ibatis框架与MySQL集群集成,以实现高效、可靠的数据库操作。 首先,让我们...

    ibatismysql.jar

    ibatismysql.jar ibatismysql.jar

    ibatis实例,mysql应用举例

    本实例聚焦于`iBatis` 在实际项目中的应用,以及如何与MySQL数据库相结合。MySQL是广泛使用的开源关系型数据库管理系统,以其高效、稳定和易用性而备受青睐。 `iBatis` 的核心概念包括配置文件、映射文件、...

Global site tag (gtag.js) - Google Analytics