com.glaf.jbpm.db.mybatis2.SqlMapClientDAOImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.glaf.jbpm.db.mybatis2.SqlMapClientDAOImpl.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.glaf.jbpm.db.mybatis2;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Connection;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.util.Assert;

import com.glaf.core.dao.EntityDAO;
import com.glaf.core.entity.SqlExecutor;
import com.glaf.core.id.IdBlock;
import com.glaf.core.util.Paging;
import com.glaf.core.util.ReflectUtils;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.engine.impl.SqlMapClientImpl;

public class SqlMapClientDAOImpl implements EntityDAO {

    private static final Log logger = LogFactory.getLog(SqlMapClientDAOImpl.class);

    private SqlMapClientTemplate sqlMapClientTemplate = new SqlMapClientTemplate();

    private com.ibatis.sqlmap.engine.execution.SqlExecutor sqlExecutor;

    private SqlMapClient sqlMapClient;

    public SqlMapClientDAOImpl() {

    }

    public void delete(String statementId, Object parameterObject) {
        getSqlMapClientTemplate().delete(statementId, parameterObject);
    }

    public void deleteAll(String statementId, List<Object> rowIds) {
        getSqlMapClientTemplate().delete(statementId, rowIds);
    }

    public void deleteById(String statementId, Object rowId) {
        getSqlMapClientTemplate().delete(statementId, rowId);
    }

    public void executeBatch(List<SqlExecutor> sqlExecutors) {
        getSqlMapClientTemplate().executeBatch(sqlExecutors);
    }

    public Object getById(String statementId, Object parameterObject) {
        return getSqlMapClientTemplate().queryForObject(statementId, parameterObject);
    }

    public int getCount(String statementId, Object parameterObject) {
        int totalCount = 0;
        Object object = null;
        if (parameterObject != null) {
            object = getSqlMapClientTemplate().queryForObject(statementId, parameterObject);
        } else {
            object = getSqlMapClientTemplate().queryForObject(statementId, null);
        }

        if (object instanceof Integer) {
            Integer iCount = (Integer) object;
            totalCount = iCount.intValue();
        } else if (object instanceof Long) {
            Long iCount = (Long) object;
            totalCount = iCount.intValue();
        } else if (object instanceof BigDecimal) {
            BigDecimal bg = (BigDecimal) object;
            totalCount = bg.intValue();
        } else if (object instanceof BigInteger) {
            BigInteger bi = (BigInteger) object;
            totalCount = bi.intValue();
        }

        return totalCount;
    }

    public List<Object> getList(int pageNo, int pageSize, SqlExecutor queryExecutor) {
        List<Object> rows = null;

        Object queryParams = queryExecutor.getParameter();

        int begin = (pageNo - 1) * pageSize + 1;

        if (queryParams != null) {
            rows = getSqlMapClientTemplate().queryForList(queryExecutor.getStatementId(), queryParams, begin,
                    pageSize);
        } else {
            rows = getSqlMapClientTemplate().queryForList(queryExecutor.getStatementId(), null, begin, pageSize);
        }

        return rows;
    }

    public java.util.List<Object> getList(String statementId, Object parameterObject) {
        return getSqlMapClientTemplate().queryForList(statementId, parameterObject);
    }

    public long getMaxId(String tablename, String idColumn) {
        return -1;
    }

    public Paging getPage(int pageNo, int pageSize, SqlExecutor countExecutor, SqlExecutor queryExecutor) {

        Paging page = new Paging();

        if (pageSize <= 0) {
            pageSize = Paging.DEFAULT_PAGE_SIZE;
        }
        if (pageNo <= 0) {
            pageNo = 1;
        }

        Object params = countExecutor.getParameter();

        Object object = null;
        int totalCount = 0;

        if (params != null) {
            object = getSqlMapClientTemplate().queryForObject(countExecutor.getStatementId(), params);
        } else {
            object = getSqlMapClientTemplate().queryForObject(countExecutor.getStatementId(), null);
        }

        if (object instanceof Integer) {
            Integer iCount = (Integer) object;
            totalCount = iCount.intValue();
        } else if (object instanceof Long) {
            Long iCount = (Long) object;
            totalCount = iCount.intValue();
        } else if (object instanceof BigDecimal) {
            BigDecimal bg = (BigDecimal) object;
            totalCount = bg.intValue();
        } else if (object instanceof BigInteger) {
            BigInteger bi = (BigInteger) object;
            totalCount = bi.intValue();
        }

        if (totalCount == 0) {
            page.setRows(new java.util.ArrayList<Object>());
            page.setCurrentPage(0);
            page.setPageSize(0);
            page.setTotal(0);
            return page;
        }

        page.setTotal(totalCount);

        int maxPageNo = (page.getTotal() + (pageSize - 1)) / pageSize;
        if (pageNo > maxPageNo) {
            pageNo = maxPageNo;
        }

        List<Object> rows = null;

        Object queryParams = queryExecutor.getParameter();

        int begin = (pageNo - 1) * pageSize + 1;

        if (queryParams != null) {
            rows = getSqlMapClientTemplate().queryForList(queryExecutor.getStatementId(), queryParams, begin,
                    pageSize);
        } else {
            rows = getSqlMapClientTemplate().queryForList(queryExecutor.getStatementId(), null, begin, pageSize);
        }

        page.setRows(rows);
        page.setPageSize(pageSize);
        page.setCurrentPage(pageNo);

        return page;
    }

    public Object getSingleObject(String statementName, Object parameterObject) {
        return getSqlMapClientTemplate().queryForObject(statementName, parameterObject);
    }

    public com.ibatis.sqlmap.engine.execution.SqlExecutor getSqlExecutor() {
        return sqlExecutor;
    }

    /**
     * Return the iBATIS Database Layer SqlMapClient that this template works
     * with.
     */
    public final SqlMapClient getSqlMapClient() {
        return this.sqlMapClientTemplate.getSqlMapClient();
    }

    /**
     * Return the SqlMapClientTemplate for this DAO, pre-initialized with the
     * SqlMapClient or set explicitly.
     */
    public final SqlMapClientTemplate getSqlMapClientTemplate() {
        return this.sqlMapClientTemplate;
    }

    public void initialize() throws Exception {
        if (sqlExecutor != null) {
            SqlMapClient sqlMapClient = getSqlMapClientTemplate().getSqlMapClient();
            if (sqlMapClient instanceof SqlMapClientImpl) {
                logger.debug("start inject sqlExecutor ...");
                ReflectUtils.setFieldValue(((SqlMapClientImpl) sqlMapClient).getDelegate(), "sqlExecutor",
                        sqlExecutor);
                logger.debug("sqlExecutor injected.");
            }
        }
    }

    public void insert(String statementName, Object parameterObject) {
        getSqlMapClientTemplate().insert(statementName, parameterObject);
    }

    public void insertAll(String statementId, List<Object> rows) {
        if (rows != null && !rows.isEmpty()) {
            for (Object object : rows) {
                getSqlMapClientTemplate().insert(statementId, object);
            }
        }
    }

    public IdBlock nextDbidBlock() {
        return null;
    }

    public IdBlock nextDbidBlock(String name) {
        return null;
    }

    public void setConnection(Connection connection) {
        if (connection != null) {
            try {
                this.sqlMapClient.setUserConnection(connection);
                this.sqlMapClientTemplate.setConnection(connection);
            } catch (java.sql.SQLException ex) {
                throw new RuntimeException(ex);
            }
        }
    }

    public void setEnableLimit(boolean enableLimit) {

    }

    public void setSqlExecutor(com.ibatis.sqlmap.engine.execution.SqlExecutor sqlExecutor) {
        this.sqlExecutor = sqlExecutor;
    }

    /**
     * Set the iBATIS Database Layer SqlMapClient to work with. Either this or a
     * "sqlMapClientTemplate" is required.
     * 
     * @see #setSqlMapClientTemplate
     */
    public final void setSqlMapClient(SqlMapClient sqlMapClient) {
        this.sqlMapClient = sqlMapClient;
        this.sqlMapClientTemplate.setSqlMapClient(sqlMapClient);
    }

    /**
     * Set the SqlMapClientTemplate for this DAO explicitly, as an alternative
     * to specifying a SqlMapClient.
     * 
     * @see #setSqlMapClient
     */
    public final void setSqlMapClientTemplate(SqlMapClientTemplate sqlMapClientTemplate) {
        Assert.notNull(sqlMapClientTemplate, "SqlMapClientTemplate must not be null");
        this.sqlMapClientTemplate = sqlMapClientTemplate;
    }

    public void update(String statementName, Object parameterObject) {
        getSqlMapClientTemplate().update(statementName, parameterObject);
    }

    public void updateAll(String statementId, List<Object> rows) {
        if (rows != null && !rows.isEmpty()) {
            for (Object object : rows) {
                getSqlMapClientTemplate().update(statementId, object);
            }
        }
    }

}