ibatis批量更新sql如何编写?

TheDisguiser 2020-07-21 21:55:46 java常见问答 7747

在无垠的数据里,出错是在所难免的,所以更新操作是每一个程序员必须熟练掌握的基础技能之一,ibatis中就有这么一套能批量更新SQL的功能,话不多说,下面来看看它们该如何实现吧。

public class BaseDao extends SqlMapClientDaoSupport
{
    @Resource(name = "sqlMapClient")
    private SqlMapClient sqlMapClient;
    @PostConstruct
    public void initSqlMapClient()
    {
        super.setSqlMapClient(sqlMapClient);
    }
}

如上,BaseDao的写法一般如此,继承basedao后,我们会使用this.getSqlMapClientTemplate()方法来调用生成好的的数据库方法,但里面是没有批量操作方法的,所以我们需要利用execute和SqlMapClientCallback来操作。

protected void batchInsert(final List < T > objList, final String statment, final int i) throws DataAccessException
{
    this.getSqlMapClientTemplate()
        .execute(new SqlMapClientCallback()
        {
            public T doInSqlMapClient(SqlMapExecutor executor) throws SQLException
            {
                executor.startBatch();
                int batch = 0;
                for (T obj: objList)
                {
                    executor.insert(statment, obj);
                    batch++;
                    if (batch == i)
                    {
                        executor.executeBatch();
                        batch = 0;
                    }
                }
                executor.executeBatch();
                return null;
            }
        });
}
/** 
 * 批量更新 
 *  
 * @param objList 
 *            更新对象类表 
 * @param statment 
 *            sqlID名称 
 * @param i 
 *            更新数量 
 * @throws DataAccessException 
 */
@SuppressWarnings("unchecked")
protected void batchUpdate(final List < T > objList, final String statment, final int i) throws DataAccessException
{
    this.getSqlMapClientTemplate()
        .execute(new SqlMapClientCallback()
        {
            public T doInSqlMapClient(SqlMapExecutor executor) throws SQLException
            {
                executor.startBatch();
                int batch = 0;
                for (T obj: objList)
                {
                    executor.update(statment, obj);
                    batch++;
                    if (batch == i)
                    {
                        executor.executeBatch();
                        batch = 0;
                    }
                }
                executor.executeBatch();
                return null;
            }
        });
}

同时记得修改basedao

public class BaseDao < T extends Entity > extends SqlMapClientDaoSupport

这样我们就能成功批量更新了。

以上就是关于如何批量更新SQL的所有内容,在java领域我们是专业的,如果还有什么java项目中常见问题,欢迎来我们网站了解详情噢。

推荐阅读:

ibatis动态拼接sql怎么实现?

ibatis和mybatis的区别是什么?有什么不同?