`
lxsgoodluck
  • 浏览: 101791 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Spring中获得数据库的自增主键值

阅读更多
...
	class Insert extends SqlUpdate {

		private final Logger logger = Logger.getLogger(Insert.class);

		public Insert(DataSource dataSource) {
			super(dataSource, INSERT_SQL);
			initInsertParams(this);  //初始化insert参数,与此处没有直接关系
			
			this.setReturnGeneratedKeys(true);  //设置可以返回主键信息
			
			if(logger.isDebugEnabled())
				logger.debug(" sql =" + this.getSql());
		}
	}

	private Insert insert;

	private synchronized void insert(Object obj) {
		Object[] values = getInsertValues(obj);
		
		//返回的主键信息将保存在GeneratedKeyHolder的LinkedList中
		KeyHolder keyHolder = new GeneratedKeyHolder();
		this.insert.update(values, keyHolder);
		
		((ObjectId) obj).setId(keyHolder.getKey().longValue());
	}
...

以上是AbstractDao的部分代码,提醒的一点是:如果在Spring中使用获取最新自增主键值的查询语句,比如MySQL的SELECT LAST_INSERT_ID()时,一定要注意SELECT LAST_INSERT_ID()是真对当前insert或update的Connection的,而Spring中每次操作是如此获得Connection的【Connection con = DataSourceUtils.getConnection(getDataSource());】,所以如果不能正确使用会得不到自己想要的结果。
6
0
分享到:
评论

相关推荐

    解决spring自增型主键问题

    Spring框架提供了多种主键生成策略,其中`GenerationType.IDENTITY`是最直接对应于数据库自增主键的方式。然而,为了更好地适应各种应用场景,Spring还支持`GenerationType.TABLE`、`GenerationType.SEQUENCE`以及`...

    MybatisPlus中插入数据后获取该对象主键值的实现

    通过设置`IdType.AUTO`,MybatisPlus会在插入数据时自动处理数据库的自增ID,然后将生成的主键值返回给插入的对象。无论是通过Service层的`saveOrUpdate`方法还是Mapper层的自定义`insert`方法,都能轻松实现这一...

    MyBatis+Spring整合示例

    通过mybatis-spring库,我们可以方便地将MyBatis的Mapper配置到Spring的Bean容器中,使得在Spring应用中可以像调用其他服务一样调用数据库操作。 在本示例中,我们创建了一个名为`User`的实体类,它包含三个属性:...

    Mybatis主配置文件、附配置文件、实体类、sql生成工具

    2. **insert**:用于定义插入语句,可以获取自增主键值。 3. **update**:用于定义更新语句。 4. **delete**:用于定义删除语句。 **三、实体类(Entity Class)** 实体类是Java对象,代表数据库中的表,用于封装...

    mybatis-demo.zip

    - **创建(Create)**:使用 SqlSession 的 insert 方法执行插入操作,返回自增主键值。 - **读取(Read)**:使用 SqlSession 的 selectOne 方法查询单条记录,或 selectList 查询多条记录。 - **更新(Update)...

    spring、mybatis整合

    第二种方式是通过`useGeneratedKeys="true"`和`keyProperty="id"`属性,这适用于支持自动生成主键的数据库,比如MySQL,它会自动获取新插入记录的主键值。 `<update>`标签用于更新操作,这里展示了如何构建一个更新...

    IDEA创建springboot + mybatis项目全过程(步骤详解)

    2. 在resources目录下新建mybatis-config.xml文件,配置mybatis的设置,包括使用jdbc的getGeneratedKeys获取数据库自增主键值、使用列标签替换列别名等。 3. 新建config包,在其中新建配置类,共三个配置类,用于...

    spring和hibernate的Annotation

    3. `@Id`:定义主键字段,通常与`@GeneratedValue`一起使用,自动生成主键值。 4. `@GeneratedValue`:配置主键生成策略,例如自增、序列或UUID。 5. `@Column`:定义字段的数据库列属性,如长度、是否允许为空等...

    ibatis 使用手册

    - **Insert**: 插入数据,支持自动获取自增主键值。 - **Update**: 更新数据,可以根据条件更新特定记录。 - **Delete**: 删除数据,根据指定条件删除匹配的记录。 **iBatis SQL Maps入门教程** 入门教程通常从...

    spring实现集群同步锁

    3. **实现分布式锁**:Spring Data Redis提供了一个`.opsForValue()`方法,通过它可以对Redis中的键值进行操作。我们可以创建一个服务类,用于获取和释放锁。这里使用一个自增操作来模拟锁: ```java @Service ...

    mybatis反向工程.根据数据库表生成wrapper xml文件和类

    当使用自增主键时,通常在数据库层面设置,MyBatis或MyBatis-Plus会自动处理插入后的主键值。如果需要联合主键,可以使用多个`@Id`注解或者自定义的复合主键类。 MyBatis-Plus是MyBatis的一个扩展,它提供了更丰富...

    SSM笔记-insert操作

    对于不支持自增主键的数据库,我们需要手动提供主键值。此时,`useGeneratedKeys`和`keyProperty`属性就不再适用。例如,如果主键是通过某种业务逻辑生成的,插入语句可能会这样写: ```xml INSERT INTO order ...

    MyBatis的注解开发-资料.rar

    - `@SelectKey`: 在插入操作后获取自增主键值,常用于MySQL的自动增长ID。 - `@ResultMap`: 引用已定义的结果映射,适用于复杂的查询结果。 5. **事务管理** - 虽然注解开发简化了SQL,但事务管理仍然需要在...

    Mybatis实现增删改查.zip

    - **创建(Create)**:使用`<insert>`标签,指定SQL插入语句,并通过`useGeneratedKeys="true"`和`keyProperty`属性获取自增主键值。 - **读取(Read)**:`<select>`标签定义查询语句,可以使用动态SQL,通过`...

    Hibernate面试答案,准备的充足才能胜利

    - **临时态**:新创建的对象,尚未与Session关联,没有主键值,数据未保存到数据库。 - **持久态**:对象已关联到Session,其状态与数据库同步,有主键值。 - **游离态**:对象已从Session中分离,但仍然有主键值...

    1000道+互联网Java工程师面试题.pdf

    通过`useGeneratedKeys="true"`和`keyProperty="id"`属性获取自增主键值。 11. **多参数传递**: 可以使用`<param>`标签、Map参数或对象参数传递多个参数。 12. **动态SQL**: MyBatis的动态SQL包括`<if>`, `...

    36道面试常问的MyBatis面试题!.zip

    @SelectKey用于在插入或更新后获取自增主键值,可以放在insert或update方法上,确保返回主键值。 18. **MyBatis的、、、标签如何使用?** 这些标签用于构建动态SQL,类似Java的if-else结构,对应switch,对应case...

    1000道 互联网Java工程师面试题 485页 _1-485.doc

    - 如何在MyBatis中处理主键自增,获取生成的主键值? 4. **ORM框架**: - MyBatis的映射机制,如何将SQL执行结果封装为对象? - 动态SQL的功能,例如if、choose、where、foreach等元素的使用。 - MyBatis的...

Global site tag (gtag.js) - Google Analytics