org.hx.rainbow.common.dao.impl.DaoMybatisImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.hx.rainbow.common.dao.impl.DaoMybatisImpl.java

Source

/*
 * Copyright (c) 2013, Rainbow and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software;Designed and Developed mainly by many Chinese 
 * opensource volunteers. you can redistribute it and/or modify it under the 
 * terms of the GNU General Public License version 2 only, as published by the
 * Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 * 
 * Any questions about this component can be directed to it's project Web address 
 * http://code.taobao.org/svn/rainbow/trunk
 *
 */
package org.hx.rainbow.common.dao.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.session.RowBounds;
import org.hx.rainbow.common.core.SpringApplicationContext;
import org.hx.rainbow.common.dao.Dao;
import org.hx.rainbow.common.exception.SysException;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;

@Lazy
@Service("daoMybatis")
public class DaoMybatisImpl implements Dao {

    private static final String SQL_SESSION_TEMPLATE = "sqlSessionTemplate";

    private SqlSessionTemplate getDao(String ds) {
        if (ds == null || "".equals(ds)) {
            return (SqlSessionTemplate) SpringApplicationContext.getBean(SQL_SESSION_TEMPLATE);
        } else {
            return (SqlSessionTemplate) SpringApplicationContext.getBean(ds + SQL_SESSION_TEMPLATE);
        }
    }

    public List<Map<String, Object>> query(String namespace, String statement) {
        return query(null, namespace, statement);
    }

    public List<Map<String, Object>> query(String ds, String namespace, String statement) {
        List<Map<String, Object>> dataList = getDao(ds)
                .<Map<String, Object>>selectList(changeStatement(namespace, statement));
        return dataList;
    }

    public List<Map<String, Object>> query(String namespace, String statement, int limit, int offset) {
        return query(null, namespace, statement, limit, offset);
    }

    public List<Map<String, Object>> query(String ds, String namespace, String statement, int limit, int offset) {
        RowBounds rowBounds = new RowBounds((offset - 1) * limit, limit);
        List<Map<String, Object>> dataList = getDao(ds)
                .<Map<String, Object>>selectList(changeStatement(namespace, statement), null, rowBounds);
        return dataList;
    }

    public List<Map<String, Object>> query(String namespace, String statement, Map<String, Object> paramData) {
        return query(null, namespace, statement, paramData);
    }

    public List<Map<String, Object>> query(String ds, String namespace, String statement,
            Map<String, Object> paramData) {
        List<Map<String, Object>> dataList = getDao(ds)
                .<Map<String, Object>>selectList(changeStatement(namespace, statement), paramData);
        return dataList;
    }

    public List<Map<String, Object>> query(String namespace, String statement, Map<String, Object> paramData,
            int limit, int offset) {
        return query(null, namespace, statement, paramData, limit, offset);
    }

    public List<Map<String, Object>> query(String ds, String namespace, String statement,
            Map<String, Object> paramData, int limit, int offset) {
        RowBounds rowBounds = new RowBounds((offset - 1) * limit, limit);
        List<Map<String, Object>> dataList = getDao(ds)
                .<Map<String, Object>>selectList(changeStatement(namespace, statement), paramData, rowBounds);
        return dataList;
    }

    public int count(String namespace, String statement) {
        return count(null, namespace, statement);
    }

    public int count(String ds, String namespace, String statement) {
        return getDao(ds).<Integer>selectOne(changeStatement(namespace, statement));
    }

    public int count(String namespace, String statement, Map<String, Object> paramData) {
        return count(null, namespace, statement, paramData);
    }

    public int count(String ds, String namespace, String statement, Map<String, Object> paramData) {
        return getDao(ds).<Integer>selectOne(changeStatement(namespace, statement), paramData);
    }

    public Map<String, Object> get(String namespace, String statement, Map<String, Object> paramData) {
        return get(null, namespace, statement, paramData);
    }

    public Map<String, Object> get(String ds, String namespace, String statement, Map<String, Object> paramData) {
        Map<String, Object> dataMap = getDao(ds)
                .<Map<String, Object>>selectOne(changeStatement(namespace, statement), paramData);
        return dataMap;
    }

    public Map<String, Object> load(String namespace, String key, String value) {
        return load(null, namespace, key, value);
    }

    public Map<String, Object> load(String ds, String namespace, String key, String value) {
        Map<String, String> param = new HashMap<String, String>();
        param.put(key, value);
        Map<String, Object> dataMap = getDao(ds).<Map<String, Object>>selectOne(changeStatement(namespace, "load"),
                param);
        return dataMap;
    }

    public void insert(String namespace, String statement, Map<String, Object> paramData) {
        insert(null, namespace, statement, paramData);
    }

    public void insert(String ds, String namespace, String statement, Map<String, Object> paramData) {
        try {
            getDao(ds).insert(changeStatement(namespace, statement), paramData);
        } catch (Exception e) {
            String msg = "Error Case:" + e.getMessage() + ";paramData:"
                    + (paramData != null ? paramData.toString() : "");
            throw new SysException(msg, e.getCause());
        }
    }

    public int update(String namespace, String statement, Map<String, Object> paramData) {
        return update(null, namespace, statement, paramData);
    }

    public int update(String ds, String namespace, String statement, Map<String, Object> paramData) {
        try {
            return getDao(ds).update(changeStatement(namespace, statement), paramData);
        } catch (Exception e) {
            String msg = "Error Case:" + e.getMessage() + ";paramData:"
                    + (paramData != null ? paramData.toString() : "");
            throw new SysException(msg, e.getCause());
        }
    }

    public int delete(String namespace, String statement, Map<String, Object> paramData) {
        return delete(null, namespace, statement, paramData);
    }

    public int delete(String ds, String namespace, String statement, Map<String, Object> paramData) {
        try {
            return getDao(ds).delete(changeStatement(namespace, statement), paramData);
        } catch (Exception e) {
            String msg = "Error Case:" + e.getMessage() + ";paramData:"
                    + (paramData != null ? paramData.toString() : "");
            throw new SysException(msg, e.getCause());
        }
    }

    private String changeStatement(String namespace, String statement) {
        return namespace + "." + statement;
    }

    public String getSql(String namespace, String statement, Map<String, Object> paramData) {
        return getSql(null, namespace, statement, paramData);
    }

    @Override
    public String getSql(String ds, String namespace, String statement, Map<String, Object> paramData) {
        try {
            MappedStatement ms = getDao(ds).getConfiguration().getMappedStatement(namespace + "." + statement);
            BoundSql boundSql = ms.getBoundSql(paramData);
            return boundSql.getSql();
        } catch (Exception e) {
            return namespace + "." + statement + "is error!";
        }
    }

    @Override
    public void insertBatch(String namespace, String statement, List<Map<String, Object>> datas) {
        insertBatch(null, namespace, statement, datas);
    }

    @Override
    public void insertBatch(String ds, String namespace, String statement, List<Map<String, Object>> datas) {
        try {
            getDao(ds).insert(changeStatement(namespace, statement), datas);
        } catch (Exception e) {
            String msg = "Error Case:" + e.getMessage() + ";paramData:" + (datas != null ? datas.toString() : "");
            throw new SysException(msg, e.getCause());
        }
    }

}