关于ibatis批量题目-我们到底能走多远系列(26)
添加时间:2013-5-3 点击量:
我们到底能走多远系列(26)
推荐:
推荐应用 evernote 或其他类似对象浏览网页,现如今,我们大多半的浏览都是经由过程实际屏作为窗话柄现的,记笔记或者再要一下是很是须要的尤其是看那些技巧类的文章时,比来应用 evernote后,发明很不错,可以在浏览器上装一个插件,碰到好文,就可以便利的记录下来,然后同步到本身的移动设备上去,evernote没有免费 的离线,若是不想用流量,可以在wifi的景象下,点开那些文章,加载完毕后封闭,晚上回家就可以离线查看啦!
主题:
关于一些根蒂根基的器材,记录一下:
1,java中list遍历时删除题目:
简化的for-each轮回只是一个语法糖,等价于如下代码:
for( Iterator<ComType> iter = ComList.iterator(); iter.hasNext();){
ComType com = iter.next();
if ( !com.getName().contains(abc)){
ComList.remove(com);
}
}
然则同时遍历和删除一个特list,是不被支撑的。
解决办法:
应用Iterator遍历,应用Iterator.remove()删除你想删除的元素。
for( Iterator<ComType> iter = ComList.iterator(); iter.hasNext();){
ComType com = iter.next();
if ( !com.getName().contains(abc)){
iter.remove();
}
}
2,关于map遍历操纵题目
不和教材代码:
for (Long id : userAlbumMap.keySet()) {
if (userAlbumMap.get(id) > 0) {//遍历了一遍map
UserAndJourneyDO userAndJourney = userMap.get(id);
userAndJourney.setAlbum(1);
}
}
重视注释项目组,以上代码,我感觉至少遍历了两遍map。
改进:
for(Map.Entry<Long, Integer> entry : userAlbumMap.entrySet()){
if (entry.getValue() > 0) {//现成应用,不须要遍历map
UserAndJourneyDO userAndJourney = userMap.get(entry.getKey());
userAndJourney.setAlbum(1);
}
}
3,关于iBatis批量处理惩罚的题目
题目是如许呈现的:为了进步履行的效力,我们须要在与数据库建树连接时一次性做竟可能多的事。
为什么要如许呢? 只要假想一下若是数据库是分布式安排的话,那么每次连接都要建树socket,如许的开销就大了。
比如:我么碰到按照多个用户id查询数据时,我们推敲 用sql的in语法来取得全部须要查询的信息。
ibatis中轮回的应用:
< id=SELECT_PROFILE_BY_UIDS parameterClass=java.util.List resultMap=userProfileResult>
SELECT FROM tb_user_profile WHERE user_id in
<iterate open=( close=) conjunction=,>#userIds[]#</iterate>
</>
用sql语法能解决一些题目。
看看单个插入:
public Long addAlbum(AlbumDO album) {
return (Long) this.getSqlMapClientTemplate().(INSERT_ALBUM,
album);
}
sqlmap:
< id=INSERT_ALBUM parameterClass=album>
into tb_user_album (user_id, url, status, create_time,
edit_time)
values (#userId#, #url#, #status#, now(), now())
<Key resultClass=java.lang.Long keyProperty=id>
SELECT LAST_INSERT_ID() as id
</Key>
</>
改成批量插入:哄骗sping,重视传入参数须要final润饰
public void batchAddAlbum(final List<AlbumDO> list) {if (list != null) {
this.getSqlMapClientTemplate().execute(new SqlMapClientCallback() {
@Override
public Object doInSqlMapClient(SqlMaputor executor)
throws SQLException {
executor.startBatch();
for (int i = 0, n = list.size(); i < n; i++) {
executor.(INSERT_ALBUM, list.get(i));
}
executor.executeBatch();
return null;
}
});
}
}
建议可以看一下org.springframework.orm.ibatis.SqlMapClientTemplate源码,更轻易懂得。
4,关于spring手动把握事务
固然推荐时设备把握事务,但有时辰总有呢么几个变态需求或场景须要手动把握事务,想哄骗spring。
代码模型如下:
// 开启事务
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状况
boolean rollbackFlg = true;
try {
//数据库处理惩罚1
//数据库处理惩罚2
transactionManager.commit(status);//提交
rollbackFlg = false;//标识表记标帜位
}
} catch (Exception e) {
logger.error( table error : + e);
// 回滚事务
transactionManager.rollback(status);
rollbackFlg = true;
} finally {
}
// 数据被回滚
if (rollbackFlg) {
} else {
}
让我们持续前行
----------------------------------------------------------------------
尽力不必然成功,但不尽力必然不会成功。
共勉。
无论对感情还是对生活,“只要甜不要苦”都是任性而孩子气的,因为我们也不完美,我们也会伤害人。正因为我们都不完美,也因为生活从不是事事如意,所以对这些“瑕疵”的收纳才让我们对生活、对他人的爱变得日益真实而具体。—— 汪冰《世界再亏欠你,也要敢于拥抱幸福》
我们到底能走多远系列(26)
推荐:
推荐应用 evernote 或其他类似对象浏览网页,现如今,我们大多半的浏览都是经由过程实际屏作为窗话柄现的,记笔记或者再要一下是很是须要的尤其是看那些技巧类的文章时,比来应用 evernote后,发明很不错,可以在浏览器上装一个插件,碰到好文,就可以便利的记录下来,然后同步到本身的移动设备上去,evernote没有免费 的离线,若是不想用流量,可以在wifi的景象下,点开那些文章,加载完毕后封闭,晚上回家就可以离线查看啦!
主题:
关于一些根蒂根基的器材,记录一下:
1,java中list遍历时删除题目:
简化的for-each轮回只是一个语法糖,等价于如下代码:
for( Iterator<ComType> iter = ComList.iterator(); iter.hasNext();){
ComType com = iter.next();
if ( !com.getName().contains(abc)){
ComList.remove(com);
}
}
然则同时遍历和删除一个特list,是不被支撑的。
解决办法:
应用Iterator遍历,应用Iterator.remove()删除你想删除的元素。
for( Iterator<ComType> iter = ComList.iterator(); iter.hasNext();){
ComType com = iter.next();
if ( !com.getName().contains(abc)){
iter.remove();
}
}
2,关于map遍历操纵题目
不和教材代码:
for (Long id : userAlbumMap.keySet()) {
if (userAlbumMap.get(id) > 0) {//遍历了一遍map
UserAndJourneyDO userAndJourney = userMap.get(id);
userAndJourney.setAlbum(1);
}
}
重视注释项目组,以上代码,我感觉至少遍历了两遍map。
改进:
for(Map.Entry<Long, Integer> entry : userAlbumMap.entrySet()){
if (entry.getValue() > 0) {//现成应用,不须要遍历map
UserAndJourneyDO userAndJourney = userMap.get(entry.getKey());
userAndJourney.setAlbum(1);
}
}
3,关于iBatis批量处理惩罚的题目
题目是如许呈现的:为了进步履行的效力,我们须要在与数据库建树连接时一次性做竟可能多的事。
为什么要如许呢? 只要假想一下若是数据库是分布式安排的话,那么每次连接都要建树socket,如许的开销就大了。
比如:我么碰到按照多个用户id查询数据时,我们推敲 用sql的in语法来取得全部须要查询的信息。
ibatis中轮回的应用:
< id=SELECT_PROFILE_BY_UIDS parameterClass=java.util.List resultMap=userProfileResult>
SELECT FROM tb_user_profile WHERE user_id in
<iterate open=( close=) conjunction=,>#userIds[]#</iterate>
</>
用sql语法能解决一些题目。
看看单个插入:
public Long addAlbum(AlbumDO album) {
return (Long) this.getSqlMapClientTemplate().(INSERT_ALBUM,
album);
}
sqlmap:
< id=INSERT_ALBUM parameterClass=album>
into tb_user_album (user_id, url, status, create_time,
edit_time)
values (#userId#, #url#, #status#, now(), now())
<Key resultClass=java.lang.Long keyProperty=id>
SELECT LAST_INSERT_ID() as id
</Key>
</>
改成批量插入:哄骗sping,重视传入参数须要final润饰
public void batchAddAlbum(final List<AlbumDO> list) {if (list != null) {
this.getSqlMapClientTemplate().execute(new SqlMapClientCallback() {
@Override
public Object doInSqlMapClient(SqlMaputor executor)
throws SQLException {
executor.startBatch();
for (int i = 0, n = list.size(); i < n; i++) {
executor.(INSERT_ALBUM, list.get(i));
}
executor.executeBatch();
return null;
}
});
}
}
建议可以看一下org.springframework.orm.ibatis.SqlMapClientTemplate源码,更轻易懂得。
4,关于spring手动把握事务
固然推荐时设备把握事务,但有时辰总有呢么几个变态需求或场景须要手动把握事务,想哄骗spring。
代码模型如下:
// 开启事务
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状况
boolean rollbackFlg = true;
try {
//数据库处理惩罚1
//数据库处理惩罚2
transactionManager.commit(status);//提交
rollbackFlg = false;//标识表记标帜位
}
} catch (Exception e) {
logger.error( table error : + e);
// 回滚事务
transactionManager.rollback(status);
rollbackFlg = true;
} finally {
}
// 数据被回滚
if (rollbackFlg) {
} else {
}
让我们持续前行
----------------------------------------------------------------------
尽力不必然成功,但不尽力必然不会成功。
共勉。