...
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());】,所以如果不能正确使用会得不到自己想要的结果。
分享到:
相关推荐
Spring框架提供了多种主键生成策略,其中`GenerationType.IDENTITY`是最直接对应于数据库自增主键的方式。然而,为了更好地适应各种应用场景,Spring还支持`GenerationType.TABLE`、`GenerationType.SEQUENCE`以及`...
通过设置`IdType.AUTO`,MybatisPlus会在插入数据时自动处理数据库的自增ID,然后将生成的主键值返回给插入的对象。无论是通过Service层的`saveOrUpdate`方法还是Mapper层的自定义`insert`方法,都能轻松实现这一...
通过mybatis-spring库,我们可以方便地将MyBatis的Mapper配置到Spring的Bean容器中,使得在Spring应用中可以像调用其他服务一样调用数据库操作。 在本示例中,我们创建了一个名为`User`的实体类,它包含三个属性:...
2. **insert**:用于定义插入语句,可以获取自增主键值。 3. **update**:用于定义更新语句。 4. **delete**:用于定义删除语句。 **三、实体类(Entity Class)** 实体类是Java对象,代表数据库中的表,用于封装...
- **创建(Create)**:使用 SqlSession 的 insert 方法执行插入操作,返回自增主键值。 - **读取(Read)**:使用 SqlSession 的 selectOne 方法查询单条记录,或 selectList 查询多条记录。 - **更新(Update)...
第二种方式是通过`useGeneratedKeys="true"`和`keyProperty="id"`属性,这适用于支持自动生成主键的数据库,比如MySQL,它会自动获取新插入记录的主键值。 `<update>`标签用于更新操作,这里展示了如何构建一个更新...
2. 在resources目录下新建mybatis-config.xml文件,配置mybatis的设置,包括使用jdbc的getGeneratedKeys获取数据库自增主键值、使用列标签替换列别名等。 3. 新建config包,在其中新建配置类,共三个配置类,用于...
3. `@Id`:定义主键字段,通常与`@GeneratedValue`一起使用,自动生成主键值。 4. `@GeneratedValue`:配置主键生成策略,例如自增、序列或UUID。 5. `@Column`:定义字段的数据库列属性,如长度、是否允许为空等...
- **Insert**: 插入数据,支持自动获取自增主键值。 - **Update**: 更新数据,可以根据条件更新特定记录。 - **Delete**: 删除数据,根据指定条件删除匹配的记录。 **iBatis SQL Maps入门教程** 入门教程通常从...
3. **实现分布式锁**:Spring Data Redis提供了一个`.opsForValue()`方法,通过它可以对Redis中的键值进行操作。我们可以创建一个服务类,用于获取和释放锁。这里使用一个自增操作来模拟锁: ```java @Service ...
当使用自增主键时,通常在数据库层面设置,MyBatis或MyBatis-Plus会自动处理插入后的主键值。如果需要联合主键,可以使用多个`@Id`注解或者自定义的复合主键类。 MyBatis-Plus是MyBatis的一个扩展,它提供了更丰富...
对于不支持自增主键的数据库,我们需要手动提供主键值。此时,`useGeneratedKeys`和`keyProperty`属性就不再适用。例如,如果主键是通过某种业务逻辑生成的,插入语句可能会这样写: ```xml INSERT INTO order ...
- `@SelectKey`: 在插入操作后获取自增主键值,常用于MySQL的自动增长ID。 - `@ResultMap`: 引用已定义的结果映射,适用于复杂的查询结果。 5. **事务管理** - 虽然注解开发简化了SQL,但事务管理仍然需要在...
- **创建(Create)**:使用`<insert>`标签,指定SQL插入语句,并通过`useGeneratedKeys="true"`和`keyProperty`属性获取自增主键值。 - **读取(Read)**:`<select>`标签定义查询语句,可以使用动态SQL,通过`...
- **临时态**:新创建的对象,尚未与Session关联,没有主键值,数据未保存到数据库。 - **持久态**:对象已关联到Session,其状态与数据库同步,有主键值。 - **游离态**:对象已从Session中分离,但仍然有主键值...
通过`useGeneratedKeys="true"`和`keyProperty="id"`属性获取自增主键值。 11. **多参数传递**: 可以使用`<param>`标签、Map参数或对象参数传递多个参数。 12. **动态SQL**: MyBatis的动态SQL包括`<if>`, `...
@SelectKey用于在插入或更新后获取自增主键值,可以放在insert或update方法上,确保返回主键值。 18. **MyBatis的、、、标签如何使用?** 这些标签用于构建动态SQL,类似Java的if-else结构,对应switch,对应case...
- 如何在MyBatis中处理主键自增,获取生成的主键值? 4. **ORM框架**: - MyBatis的映射机制,如何将SQL执行结果封装为对象? - 动态SQL的功能,例如if、choose、where、foreach等元素的使用。 - MyBatis的...