spring与ibatis整合后在getSqlMapClientTemplate()方法中提供了一系列CRUD方法,其中insert返回一个Object型的主键,一直用着都很正常,可是在oracle中增加了序列,又修改了配置文件,就一直抛NullPointException
<insert id="addPermission" parameterClass="Permission">
INSERT INTO P_PERMISSION
(PERMISSIONID,PERMISSIONINFO,PERMISSIONNAME,PERMISSIONENNAME,URL)
VALUES
(SEQ_P_PERMISSION.NEXTVAL,#permissionInfo#,#permissionName#,
#permissionEnName#,#url#)
</insert>
检查了数遍Dao跟Service,都没问题(就是怕类似少标点这样的小错误),而且数据也可以添加,就觉得应该是配置文件的问题,仔细查看了下文档,原来<insert>中还包含一个<selectKey>可以配置序列
<insert id="addPermission" parameterClass="Permission">
<selectKey resultClass="int" keyProperty="permissionId">
SELECT SEQ_P_PERMISSION.NEXTVAL FROM DUAL
</selectKey>
INSERT INTO P_PERMISSION
(PERMISSIONID,PERMISSIONINFO,PERMISSIONNAME,PERMISSIONENNAME,URL)
VALUES
(#permissionId#,#permissionInfo#,#permissionName#,#permissionEnName#,#url#)
</insert>
修改完毕,程序没问题啦。
-----------------分割线--------------------------------------
如果使用后生成主键的数据库,MySql,SQLServer配置文件应为
<insert id="addPermission" parameterClass="Permission">
INSERT INTO P_PERMISSION
(PERMISSIONID,PERMISSIONINFO,PERMISSIONNAME,PERMISSIONENNAME,URL)
VALUES
(#permissionId#,#permissionInfo#,#permissionName#,#permissionEnName#,#url#)
<selectKey resultClass="int" keyProperty="permissionId">
SELECT @@IDENTITY AS PERMISSIONID
</selectKey>
</insert>
当然,前提是PERMISSIONID字段被设置为自增属性
分享到:
相关推荐
在Ibatis中,可以通过`<selectKey>`标签配合`keyProperty`指定主键属性,`resultType`指定返回类型,然后在SQL语句中调用序列生成器。 3. **自增(Identity)**: MySQL、SQL Server等数据库支持字段的自动递增...
根据提供的文档信息,我们可以深入探讨Ibatis框架中的一个具体应用场景:如何通过动态SQL查询特定条件下的ID列表。本文将从以下几个方面进行详细解析: ### 一、Ibatis简介 Ibatis是一个基于Java的持久层框架,它...
在这个例子中,我们将探讨如何在 Ibatis 中实现一对多的关系查询。 首先,我们创建了两个表:`book` 和 `user`。`book` 表存储书籍的信息,而 `user` 表记录作者信息,其中 `book_oid` 字段作为外键引用 `book` 表...
特别地,`users`属性通过`column="oid"`和`select="getUsersByBookId"`来指定,这意味着Ibatis将根据`oid`执行另一个SQL查询(即`getUsersByBookId`),并将返回的结果填充到`Book`对象的`users`属性。 `select`...
在实际开发中,可以根据项目需求,利用iBatis的动态SQL、结果映射等功能,构建高效的数据访问层。通过这个简单的"iBatis入门Helloworld"项目,你可以快速掌握iBatis的基础操作,并为进一步学习和应用打下坚实基础。
- **插入操作**:`insert()`方法用于将一个对象插入到数据库中,它会自动处理主键生成策略,如果表有自增主键,IBATIS会自动填充。 - **更新操作**:`update()`方法用于更新已存在的记录,它需要传入待更新的对象,...
- **插入**:使用`insert`方法,Ibatis会自动生成`insertId`,便于获取新生成的主键。 - **更新**:使用`update`方法,Ibatis会根据传入的对象自动拼接UPDATE语句。 - **删除**:使用`delete`方法,根据传入的...
例如,在Oracle或DB2中,可以使用Sequence获取主键;而在MySQL中,可以使用`LAST_INSERT_ID()`函数。 4. **主键获取策略**: - **先获取主键**:`<selectKey>`可以在插入语句之前配置,如Oracle的Sequence,需要在...
在本文档中,我们将深入探讨iBATIS SQLMap的关键概念、配置与使用方法,以及如何通过SQLMap优化数据库交互。 ### iBATIS SQLMap的核心概念 #### SQLMap的概念 SQLMap是iBATIS框架中的关键组件,它通过XML映射文件...
Ibatis的动态SQL功能强大,允许在SQL语句中使用条件判断、循环等结构,使得SQL更灵活,适应不同场景。 **6. 简单的Java API** Ibatis提供了一个SqlSession接口,通过SqlSessionFactory获取,用于执行SQL操作。...
iBatis会自动处理主键生成和参数绑定,提高开发效率。 2. **删除记录**:删除操作分为删除指定记录和删除全部记录。使用`<delete>`标签定义删除语句,可以按ID或其他条件进行删除。在Java代码中,调用Mapper接口的...
这种情况下,通常在子表中有一个外键指向父表的主键。映射方式与一对一类似,只是方向相反。 4. **多对多映射**:最复杂的关系类型,如学生和课程之间的关系。多对多关系需要一个中间表来存储双方的关联信息。在...
在单表操作中,可能涉及创建User表,包含id、name、email等字段,以及相关的主键约束和索引。增删改操作会涉及到INSERT、DELETE、UPDATE语句,而查询可能包括简单的SELECT语句,也可能涉及复杂的JOIN、GROUP BY和...
3. **添加lib**:将iBatis相关的jar包添加到项目的lib目录下,并在项目的构建路径中添加这些库。常见的iBatis依赖包括`ibatis.jar`和`log4j.jar`等。 4. **编写sqlmapconfig.xml**:这是iBatis的核心配置文件,其中...
在实际项目中,结合Spring框架,Ibatis可以更好地融入到企业级应用的开发中,提高开发效率和代码质量。在进行Ibatis操作时,需要注意SQL语句的编写、结果映射的配置以及事务的管理,这将直接影响到应用程序的性能和...
- **Delete**:类似地,使用@Delete注解定义删除操作,传入相应的主键或条件,Ibatis会根据这些条件生成并执行删除SQL。 - **Update**:使用@Update注解,编写更新的SQL语句,通过传入的对象属性来确定更新哪些...
前端可能使用JavaScript(例如jQuery)来实现分页UI,而Struts1 Action会根据当前页码和每页数量从数据库中查询并返回相应文件记录。 6. **JavaScript库**:描述中提到了现成的JS库,这些库可能用于增强用户体验,...
在iBATIS DataMapper 1.6.0版本中,有以下几个重要的改进: 1. 解决了带有`group by`的`Select`语句中N+1问题,优化了查询性能,避免了多次数据库访问。 2. 引入了`<include/>`节点,支持SQL片段的重用,提高代码的...
- 查询操作:如果需要从数据库中查询多行数据,iBATIS同样可以返回对象或对象集合,每个对象代表数据表中的一行。 ***通过这些特性为.NET开发者提供了一种简化数据库操作、增强代码可读性和可维护性的框架。尽管...