gpt4 book ai didi

java - 使用 Spring JDBC 模板在单个事务中执行多个查询(插入和更新)

转载 作者:行者123 更新时间:2023-12-02 01:42:31 25 4
gpt4 key购买 nike

我正在尝试更新表 A 中的一行并在表 B 中插入一行。这需要在单次调用中发生。我正在使用 spring JDBC 来实现这一点。

示例代码

@Transactional
public boolean approveTenant(ApproveTenantRequest approveTenantRequest) throws ApplicationException {
LogUtil.debug(logger, "UserManagementDAO - approveTenant - Start");
try {
String updateSQL = "UPDATE tenant_master SET isactive=1, last_modified_by=:lastModifiedBy, last_modified_at= now() "
+ " WHERE tenant_id=:tenantid and tenant_community_id=:cmntId";
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("cmntId", approveTenantRequest.getCommunityId());
parameters.addValue("tenantid", Integer.parseInt(approveTenantRequest.getTenantId()));
parameters.addValue("lastModifiedBy", approveTenantRequest.getApprovedBy());
int updateEffectedRows = jdbcTemplate.update(updateSQL, parameters);
if(updateEffectedRows==1) {
String insertSql= "INSERT INTO users (username,password,isactive,community_id,userrole,created_by)" +
" values (:username,:password,1,:community_id,:userrole,:created_by)";
parameters.addValue("username", approveTenantRequest.getEmailId());
parameters.addValue("password", approveTenantRequest.getEmailId());
parameters.addValue("community_id", approveTenantRequest.getCommunityId());
parameters.addValue("userrole", "RESIDENT");
parameters.addValue("created_by", approveTenantRequest.getApprovedBy());
int insertEffectedRows = jdbcTemplate.update(insertSql, parameters);
LogUtil.debug(logger, "UserManagementDAO - approveTenant - End");
return insertEffectedRows == 0 ? false : true;
}else {
throw new ApplicationException("Issue in Approving Tenant, Tenant not exist in master data");
}
} catch (DataAccessException dataAccessException) {
logger.error("Data Access Exception " + dataAccessException);
throw new ApplicationException(dataAccessException.getMessage());
} catch (Exception e) {
logger.error("Exception Occured While approving tenant " + e);
throw new ApplicationException(e.getMessage());
}
}

这段代码有什么缺陷吗?这是正确的做法吗?你能推荐一下吗?

最佳答案

只需确保将它们放在标记为 @Transactional 的一个方法下即可。

这样,当第二次更新失败时,第一次更新将回滚,您将使数据库保持一致状态。

关于java - 使用 Spring JDBC 模板在单个事务中执行多个查询(插入和更新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54257220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com