SpringMVC+JdbcTemplate实现事务管理(插入操作需要返回自增字段)
来源:互联网 发布:手机wifi网络测速 编辑:程序博客网 时间:2024/04/27 16:55
将Service层交给事务去管理,beans.xml配置如下:
<!-- 配置Jdbc模板 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="serviceMethod" expression="execution(* dmmap.service.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" />
</aop:config>
如果需要返回自增字段,插入过程如下:
public int createHousedoor(Housedoor housedoor) {
int newId = 0;
final Housedoor TmpDoor = housedoor;
String issueDateStr = housedoor.getF_IssueDateStr();
Date issueDate = null;
if (issueDateStr != null) {
try {
issueDate = sdf.parse(issueDateStr);
} catch (ParseException e) {
e.printStackTrace();
}
}
final Date _date = issueDate;
KeyHolder keyholder = new GeneratedKeyHolder();
final String insertsql = "insert into t_housedoor(F_TownId,F_Community,F_PropertyName,F_HouseEstate,F_BuildingNum,F_CellNum,F_RoomNum,F_DoorNum,F_MarkSizeId,F_SourceTypeId,F_Contact,F_Telephone,F_OldAddress,F_Remark,F_UserId,F_OptDate,F_bImport,F_CardId,F_IssueDate,F_Address) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
int countt = 0;
countt = jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con)
throws SQLException {
// TODO Auto-generated method stub
PreparedStatement preState = con.prepareStatement(insertsql,
PreparedStatement.RETURN_GENERATED_KEYS);
preState.setString(1, TmpDoor.getF_TownId());
preState.setString(2, TmpDoor.getF_Community());
preState.setString(3, TmpDoor.getF_PropertyName());
preState.setString(4, TmpDoor.getF_HouseEstate());
preState.setString(5, TmpDoor.getF_BuildingNum());
preState.setString(6, TmpDoor.getF_CellNum());
preState.setString(7, TmpDoor.getF_RoomNum());
preState.setString(8, TmpDoor.getF_DoorNum());
preState.setInt(9, TmpDoor.getF_MarkSizeId());
preState.setInt(10, TmpDoor.getF_SourceTypeId());
preState.setString(11, TmpDoor.getF_Contact());
preState.setString(12, TmpDoor.getF_Telephone());
preState.setString(13, TmpDoor.getF_OldAddress());
preState.setString(14, TmpDoor.getF_Remark());
preState.setString(15, TmpDoor.getF_UserId());
preState.setDate(16, new java.sql.Date(new Date().getTime()));
preState.setInt(17, TmpDoor.getF_bImport());
preState.setString(18, TmpDoor.getF_CardId());
if (_date == null)
preState.setDate(19, null);
else
preState.setDate(19, new java.sql.Date(_date.getTime()));
preState.setString(20, TmpDoor.getF_Address());
return preState;
}
}, keyholder);
if (countt == 1) {
newId = (int) keyholder.getKey().longValue();
}
return newId;
}
上述代码中标红的地方一定不能让jdbcTemplate自己去获取,否则事务不起作用。
另外需要注意的是,在service的方法中调用dao层的方法,dao层方法中不能捕获异常,否则service端检测不到异常事务无法回滚
- SpringMVC+JdbcTemplate实现事务管理(插入操作需要返回自增字段)
- spring Jdbctemplate返回插入记录的自增Id
- spring Jdbctemplate返回插入记录的自增Id
- Spring JdbcTemplate返回插入记录的自增Id
- oracle 分页显示,自增字段,返回插入记录ID
- jdbcTemplate返回插入ID
- Spring的JdbcTemplate插入操作返回主键ID的方法
- java插入数据后返回新插入数据的id字段(自增)
- Spring利用JDBCTemplate实现批量插入和返回id
- jdbcTemplate 实现插入一条数据后吗,返回id
- Spring利用JDBCTemplate实现批量插入和返回id
- mybatis插入返回自增
- Spring的JdbcTemplate返回表自增主键值
- 业务需求:一张数据表中有自增字段,插入一条数据以后返回自增的ID值
- 使用JdbcTemplate进行插入操作
- 向自增字段中插入值
- sql自增字段插入数据
- spring mybates 自增字段返回id
- myeclipse9 激活
- 配置Windows服务器支持json文件的方法
- 20141208-SIAT-USTC跨级交流纪要备忘
- .Net Memory Profiler4.6 修改注册表延长试用期
- swift中UITableView的基本使用(基于Storyboard):适用新手
- SpringMVC+JdbcTemplate实现事务管理(插入操作需要返回自增字段)
- SearchView的基本使用
- js中的时间转换
- ubuntu 小技巧3——如何在ubuntu中安装英汉词典
- 【边做项目边学Android】手机安全卫士07-手机防盗之进入限制
- 科技大佬的一些用人之道
- Linux下取得UUID的方法
- IOS开发中页面跳转的几种方式
- 获取本机IP地址