/* * Copyright (c) 2013, OpenCloudDB/MyCAT 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 * https://code.google.com/p/opencloudb/. * */ package org.hx.rainbow.common.dao.impl; import java.sql.Timestamp; import java.text.SimpleDateFormat; 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.dao.Dao; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import javax.inject.Inject; import javax.inject.Named; @Lazy @Service("daoMybatis") public class DaoMybatisImpl implements Dao{ private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Inject @Named("sqlSessionTemplate") private SqlSessionTemplate dao; @Inject @Named("mycatsqlSessionTemplate") private SqlSessionTemplate myCatdao; public List<Map<String, Object>> query(String namespace,String statement) { long bengin = System.currentTimeMillis(); List<Map<String, Object>> dataList = dao.<Map<String,Object>>selectList(changeStatement(namespace,statement)); System.out.println("["+namespace+"."+statement+"] execute, cost:"+(System.currentTimeMillis() - bengin) + "ms"); return dataList; } public List<Map<String, Object>> query(String namespace,String statement, Map<String, Object> paramData) { long bengin = System.currentTimeMillis(); List<Map<String, Object>> dataList = dao.<Map<String,Object>>selectList(changeStatement(namespace,statement),paramData); System.out.println("["+namespace+"."+statement+"] execute, cost:"+(System.currentTimeMillis() - bengin) + "ms"); return dataList; } public List<Map<String, Object>> query(String namespace,String statement, Map<String, Object> paramData, int limit, int offset) { long bengin = System.currentTimeMillis(); RowBounds rowBounds = new RowBounds((offset-1)*limit, limit); List<Map<String, Object>> dataList = dao.<Map<String,Object>>selectList(changeStatement(namespace,statement),paramData,rowBounds); System.out.println("["+namespace+"."+statement+"] execute, cost:"+(System.currentTimeMillis() - bengin) + "ms"); return dataList; } public int count(String namespace,String statement) { return dao.<Integer>selectOne(changeStatement(namespace,statement)); } public int count(String namespace,String statement, Map<String, Object> paramData) { return dao.<Integer>selectOne(changeStatement(namespace,statement),paramData); } public Map<String, Object> get(String namespace,String statement, Map<String, Object> paramData) { Map<String, Object> dataMap = dao.<Map<String, Object>>selectOne(changeStatement(namespace,statement),paramData); return dataMap; } public Map<String, Object> load(String namespace, String key, String value) { Map<String,String> param = new HashMap<String,String>(); param.put(key, value); Map<String, Object> dataMap = dao.<Map<String, Object>>selectOne(changeStatement(namespace,"load"),param); return dataMap; } public void insert(String namespace,String statement, Map<String, Object> paramData) { dao.insert(changeStatement(namespace,statement), paramData); } public int update(String namespace,String statement, Map<String, Object> paramData) { return dao.update(changeStatement(namespace,statement), paramData); } public int delete(String namespace,String statement, Map<String, Object> paramData) { return dao.delete(changeStatement(namespace,statement), paramData); } private String changeStatement(String namespace,String statement){ return namespace + "." + statement; } @SuppressWarnings("unused") private void changeDateType(List<Map<String,Object>> dataList){ if(dataList == null || dataList.size() == 0){ return; } for(Map<String,Object> map : dataList){ for(Map.Entry<String, Object> entry : map.entrySet()){ if(entry.getValue().getClass() == Timestamp.class){ map.put(entry.getKey(), sdf.format((Timestamp)entry.getValue())); } } } } @SuppressWarnings("unused") private void changeDateType(Map<String,Object> dataMap){ if(dataMap == null || dataMap.size() == 0){ return; } for(Map.Entry<String, Object> entry : dataMap.entrySet()){ if(entry.getValue().getClass() == Timestamp.class){ dataMap.put(entry.getKey(), sdf.format((Timestamp)entry.getValue())); } } } public List<Map<String, Object>> query(String namespace, String statement, int limit, int offset) { RowBounds rowBounds = new RowBounds((offset-1)*limit, limit); List<Map<String, Object>> dataList = dao.<Map<String,Object>>selectList(changeStatement(namespace,statement),null,rowBounds); return dataList; } public String getSql(String namespace, String statement, String ds, Map<String, Object> paramData) { MappedStatement ms = dao.getConfiguration().getMappedStatement(namespace+"."+statement); BoundSql boundSql = ms.getBoundSql(paramData); return boundSql.getSql(); } @Override public String getSql(String namespace, String statement, Map<String, Object> paramData) { // TODO Auto-generated method stub return null; } @Override public List<Map<String, Object>> queryMycat(String namespace,String statement) { long bengin = System.currentTimeMillis(); List<Map<String, Object>> dataList = myCatdao.<Map<String,Object>>selectList(changeStatement(namespace,statement)); System.out.println("["+namespace+"."+statement+"] execute, cost:"+(System.currentTimeMillis() - bengin) + "ms"); return dataList; } }