<!-- Oracle SEQUENCE -->
<insert id="insertProduct-ORACLE" parameterClass="com.domain.Product">
<selectKey resultClass="int" keyProperty="id" type="pre">
<![CDATA[SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL]]>
</selectKey>
<![CDATA[insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) values #id#,#description#)]]>
</insert>
<!-- Microsoft SQL Server IDENTITY Column -->
<insert id="insertProduct-MS-SQL" parameterClass="com.domain.Product">
<![CDATA[insert into PRODUCT (PRD_DESCRIPTION) values (#description#) ]]>
<selectKey resultClass="int" keyProperty="id" type="post">
<![CDATA[SELECT @@IDENTITY AS ID ]]> <!-- 该方法不安全 应当用SCOPE_IDENTITY() 但这个函数属于域函数,需要在一个语句块中执行。 -->
</selectKey>
</insert>
<!-- Mysql Last Insert Id -->
<insert id="insertProduct-Mysql" parameterClass="com.domain.Product">
<![CDATA[insert into PRODUCT(PRD_DESCRIPTION) values (#description#)]]>
<selectKey resultClass="int" keyProperty="id">
<![CDATA[SELECT LAST_INSERT_ID() AS ID ]]> <!-- 该方法LAST_INSERT_ID()与数据库连接绑定,不会发生上述MS SQL Server的函数问题。 -->
</selectKey>
</insert>
当用MySQL的时候,从ibatis in action中看到的一段:
5.2.3 自动生成的主键
对于任何数据库来说,提供唯一标识数据表中一行记录的能力是至关重要的。几乎所有数据库都提供了为新添加的行自动生成主键的方法。这样再操作数据库的时候比较方便,但它也带来了一个问题,如果我们需要知道新生成的主键值该怎么办?
有的数据库供应商是预先生成(pre-generate)主键的(如Oracle和PostgreSQL),有的则是事后生成(post-generate)的(如SQL Server和MySQL)。不管是哪种方式,我们都可以使用<selectKey>节点来获取<insert>语句所产生的主键。
所以在MySQL的配置中
<selectKey resultClass="int" keyProperty="id"
type="post">
多加了个post,结果初始化ibatis配置的时候就报错,不晓得是因为 ibatis in action书所用的ibatis版本太低还是怎么回事,反正去掉就没问题,哎,就先不关心了吧。
分享到:
相关推荐
对于序列主键(如Oracle、DB2中的Sequence),需要在插入语句之前配置`<selectKey>`标签来获取主键值。例如: ```xml <selectKey resultClass="long" keyProperty="sctId"> SELECT SEQ_TEST.NEXTVAL FROM DUAL...
对于支持自动生成主键的数据库,Ibatis 提供了 `<selectKey>` 元素来获取新生成的主键值。在插入语句中,`<selectKey>` 通常置于 `<insert>` 元素内,用于在插入数据后获取数据库生成的主键。例如,对于Oracle,...
<selectKey resultClass="long" keyProperty="sctId"> SELECT SEQ_TEST.NEXTVAL FROM DUAL </selectKey> insert into ... ``` 对于MySQL这样的自增主键数据库,则可以在插入语句之后通过`LAST_INSERT_ID()`来...
Ibatis通过`<selectKey>`标签可以与触发器配合使用,但在设计时需谨慎,因为触发器可能增加数据库的复杂性和维护成本。 7. **Hi-Lo算法**: Hi-Lo算法是一种在应用层面生成主键的方法,主要用于减少对数据库的访问...
- **后获取主键**:对于自动增长的主键,如MySQL,`<selectKey>`可以在插入语句之后配置,利用`LAST_INSERT_ID()`获取自增主键。 5. **SQL参数(ParameterClass)**: - 插入操作:`parameterClass`指定传入参数...
- **<selectKey>`**:用于生成主键,在某些数据库中可能需要在插入记录前先获取自增主键值。 - **<insert>`**:定义插入操作,可以与`parameterMap`结合使用以支持复杂的参数传递。 - **<resultClass>`**:定义查询...
在iBatis中,可以使用<selectKey>标签来获取插入记录后的自增ID。例如,文档中显示的是在插入数据后,通过调用数据库的IDENTITY函数获取自增ID值,这个值被设置到resultClass为int类型的keyProperty“id”中。 2. ...
对于主键自动赋值,iBATIS提供了`<selectKey>`标签来处理。在Oracle中,我们可以这样实现: ```xml <selectKey keyProperty="id" resultClass="int"> SELECT STU_SEQ.NEXTVAL FROM DUAL </selectKey> INSERT ...
select * from ibatis where name = #{value} </select> <!-- 根据ID查询记录 --> <select id="getUsersById" resultMap="ibatisTest"> select * from ibatis where id = #{value} </select> <!-- 插入...
PRIMARY KEY (`id`) ); ``` **四、配置iBATIS** 1. 创建`SqlMapConfig.xml`配置文件,定义数据源、事务管理器以及SQL映射文件的位置。 ```xml ``` 2. 创建`UserMapper.xml`文件,...
此外,`<selectKey>`标签用于在插入后获取自增主键的值,这对于某些数据库系统(如MySQL)是必要的。 总的来说,iBatis的批处理功能通过在代码和配置文件中灵活运用循环,使得开发者能够有效地处理大批量数据操作,...
13. **<selectKey>**:定义主键生成策略,常用于自动填充主键字段。 这些标签共同构成了iBatis的SQL映射规则体系,确保了框架能够正确执行各种数据库操作。 #### 7. SQL参数详解 iBatis支持多种类型的SQL参数,...
在Ibatis配置中,可以通过`<selectKey>`标签来指定使用序列生成主键。 2. **身份列(Identity)**:在MySQL、SQL Server等支持自动增长的数据库中,可以设置某一列为主键并自动递增。在Ibatis中,可以在插入语句后...
在这个例子中,`<insert>`标签定义了一个插入操作,参数类为`LineItem`,并包含了主键获取的`<selectKey>`标签。通过`Mapper.Instance().Insert()`方法调用,可以完成插入操作并返回主键值。 总的来说,iBATIS ...
值得注意的是,iBatis并不是以查询参数的Class的hashcode或toString方法作为Key的一部分,而是使用在sqlmap中使用的变量集合。 **缓存功能** - iBatis 支持`queryForObject`和`queryForList`方法的结果缓存,但其他...
PRIMARY KEY (`contactid`) ); ``` 接着,我们为这些数据库字段创建对应的Java对象,即POJO(Plain Old Java Object)。在这个例子中,我们创建了一个名为`Contact`的类,包含`firstName`、`lastName`和`email`...
PRIMARY KEY (ID) ); insert into PERSON values (1,'ng','Huang'); insert into PERSON values (2,'zh','Ni'); insert into PERSON values (3,'zy','Huang'); src下有三个目录: ibator/config:配置文件,其中...
对于自动增长的主键,iBatis 提供了 `<selectKey>` 标签来处理。在插入数据后,这个标签会执行一个单独的 SELECT 语句来获取新生成的主键值,并将其绑定到 Java 对象的相应属性上。 **优点** iBatis 的优点包括: 1...
9. **参数处理**:iBATIS 提供了多种参数处理器,如`@Param`注解和`@SelectKey`等,可以方便地处理各种类型的参数。 10. **性能优化**:通过合理设计SQL语句、使用预编译的PreparedStatement、合理配置缓存等方式,...