Package com.alibaba.cobar.client

Source Code of com.alibaba.cobar.client.CobarSqlMapClientDaoSupport

/**
* Copyright 1999-2011 Alibaba Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.cobar.client;

import java.sql.SQLException;
import java.util.Collection;

import org.springframework.dao.DataAccessException;
import org.springframework.orm.ibatis.SqlMapClientCallback;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import com.ibatis.sqlmap.client.SqlMapExecutor;

/**
* A DAO base class definition which adds more helper methods on batch
* operations.<br>
* Users can configure their DAO implementations with same configuration items
* of {@link CobarSqlMapClientTemplate}.<br>
* <br>
* Feature requested by Yao Ming.
*
* @author fujohnwang
* @since 1.0
*/
public class CobarSqlMapClientDaoSupport extends SqlMapClientDaoSupport {

    public int batchInsert(final String statementName, final Collection<?> entities)
            throws DataAccessException {
        if (isPartitionBehaviorEnabled()) {
            int counter = 0;
            DataAccessException lastEx = null;
            for (Object parameterObject : entities) {
                try {
                    getSqlMapClientTemplate().insert(statementName, parameterObject);
                    counter++;
                } catch (DataAccessException e) {
                    lastEx = e;
                }
            }
            if (lastEx != null) {
                throw lastEx;
            }
            return counter;
        } else {
            return (Integer) getSqlMapClientTemplate().execute(new SqlMapClientCallback() {
                public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
                    executor.startBatch();
                    for (Object item : entities) {
                        executor.insert(statementName, item);
                    }
                    return executor.executeBatch();
                }
            });
        }
    }

    public int batchDelete(final String statementName, final Collection<?> entities)
            throws DataAccessException {
        if (isPartitionBehaviorEnabled()) {
            int counter = 0;
            DataAccessException lastEx = null;
            for (Object entity : entities) {
                try {
                    counter += getSqlMapClientTemplate().delete(statementName, entity);
                } catch (DataAccessException e) {
                    lastEx = e;
                }
            }
            if (lastEx != null) {
                throw lastEx;
            }
            return counter;
        } else {
            return (Integer) getSqlMapClientTemplate().execute(new SqlMapClientCallback() {
                public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
                    executor.startBatch();
                    for (Object parameterObject : entities) {
                        executor.delete(statementName, parameterObject);
                    }
                    return executor.executeBatch();
                }
            });
        }
    }

    public int batchUpdate(final String statementName, final Collection<?> entities)
            throws DataAccessException {
        if (isPartitionBehaviorEnabled()) {
            int counter = 0;
            DataAccessException lastEx = null;
            for (Object parameterObject : entities) {
                try {
                    counter += getSqlMapClientTemplate().update(statementName, parameterObject);
                } catch (DataAccessException e) {
                    lastEx = e;
                }
            }
            if (lastEx != null) {
                throw lastEx;
            }
            return counter;
        } else {
            return (Integer) getSqlMapClientTemplate().execute(new SqlMapClientCallback() {

                public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
                    executor.startBatch();
                    for (Object parameterObject : entities) {
                        executor.update(statementName, parameterObject);
                    }
                    return executor.executeBatch();
                }
            });
        }
    }

    protected boolean isPartitionBehaviorEnabled() {
        if (getSqlMapClientTemplate() instanceof CobarSqlMapClientTemplate) {
            return ((CobarSqlMapClientTemplate) getSqlMapClientTemplate())
                    .isPartitioningBehaviorEnabled();
        }
        return false;
    }
}
TOP

Related Classes of com.alibaba.cobar.client.CobarSqlMapClientDaoSupport

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.