Java tutorial
/* * 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()); } } }