spring jdbctemplate插入blob,clob并且返回生成的序列主键

首先dao类名字是WebContentDao,以下为配置的oracle序列

<bean id="increWC" class="org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer">
		<property name="incrementerName" value="s_webcontent"/> <!-- ①指定序列名 -->
		<property name="dataSource" ref="dataSource"/> 
<!-- ②设置数据源 -->
</bean>
以下为WebContentDao类的代码
@Autowired
 @Qualifier("jdbcTemplate")
 private JdbcTemplate jdbcTemplate;
 
 final Logger logger = LoggerFactory.getLogger(JdbcWebContentDao.class);
 
 @Autowired
 @Qualifier("increWC")
 private DataFieldMaxValueIncrementer increWC;

 @SuppressWarnings("unchecked")
 public int save(final WebContent wc){
     final StringReader sr = new StringReader(wc.getContent());
     final int length = wc.getContent().getBytes().length;
     jdbcTemplate.execute(
          "insert into webcontent(id,content,title) values (?,?,?)",
          new AbstractLobCreatingPreparedStatementCallback(new DefaultLobHandler()) {                        @Override
             int id = increWC.nextIntValue();
             wc.setId(id);      //由于要返回id,使用参数实体来保存id
             prep.setInt(1, id);
             lobCreator.setClobAsCharacterStream(prep, 2, sr, 	length);
             prep.setString(3, wc.getTitle());
             //lobCreator.setBlobAsBinaryStream(ps, 3, blobIs, (int)blobIn.length());  

             }
          }); 
        sr.close();
        return wc.getId();
        
 }
由于Connection的ThreadLocal实现,两个属性JdbcTemplate和DataFieldMaxValueIncrementer都是取到同线程的Connection对象,所以不存在并发问题!

转载于:https://my.oschina.net/stillotherguy/blog/170561

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值