wuxw
2019-05-13 02727f5389622a22d023bfd2d3baaf6b02fea098
java110-service/src/main/java/com/java110/service/dao/impl/QueryServiceDAOImpl.java
@@ -2,13 +2,24 @@
import com.java110.common.util.StringUtil;
import com.java110.core.base.dao.BaseServiceDao;
import com.java110.entity.order.ServiceBusiness;
import com.java110.entity.service.ServiceSql;
import com.java110.service.dao.IQueryServiceDAO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.sql.*;
import java.util.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by wuxw on 2018/4/20.
@@ -17,36 +28,39 @@
@Transactional
public class QueryServiceDAOImpl extends BaseServiceDao implements IQueryServiceDAO {
    private final static Logger logger = LoggerFactory.getLogger(QueryServiceDAOImpl.class);
    /**
     *  防止sql注入 改造成直接用prepareStatement 预处理sql
     * 防止sql注入 改造成直接用prepareStatement 预处理sql
     *
     * @param sql
     * @param params
     * @return
     */
    @Override
    public List<Map<String,Object>> executeSql(String sql,Object[] params) {
        logger.debug("----【queryServiceDAOImpl.executeSql】入参 : "+sql+" params= "+params);
    public List<Map<String, Object>> executeSql(String sql, Object[] params) {
        logger.debug("----【queryServiceDAOImpl.executeSql】入参 : " + sql + " params= " + params);
        Connection conn = null;
        ResultSet rs = null;
        PreparedStatement ps = null;
        List<Map<String,Object>> mapList = new ArrayList<Map<String,Object>>();
        List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
        try {
            conn = sqlSessionTemplate.getConnection();
            ps = conn.prepareStatement(sql);
            if(params != null){
                for(int i = 0 ; i < params.length ; i++){
                    ps.setObject(i+1, params[i]);
            if (params != null) {
                for (int i = 0; i < params.length; i++) {
                    ps.setObject(i + 1, params[i]);
                }
            }
            rs = ps.executeQuery();
            //精髓的地方就在这里,类ResultSet有getMetaData()会返回数据的列和对应的值的信息,然后我们将列名和对应的值作为map的键值存入map对象之中...
            ResultSetMetaData rsmd = rs.getMetaData();
            while(rs.next()){
                Map<String,Object> map = new HashMap<String,Object>();
                for(int i = 0 ; i < rsmd.getColumnCount() ; i++){
                    String col_name = rsmd.getColumnLabel(i+1);
            while (rs.next()) {
                Map<String, Object> map = new HashMap<String, Object>();
                for (int i = 0; i < rsmd.getColumnCount(); i++) {
                    String col_name = rsmd.getColumnLabel(i + 1);
                    Object col_value = rs.getObject(col_name);
                    if(col_value == null){
                    if (col_value == null) {
                        col_value = "";
                    }
                    map.put(col_name, col_value);
@@ -55,15 +69,15 @@
            }
            return mapList;
        } catch (SQLException e) {
            logger.error("执行sql异常:" + sql +params,e);
            logger.error("执行sql异常:" + sql + params, e);
            return null;
        }finally{
        } finally {
            try {
                //conn.close();
                if( ps!=null) {
                if (ps != null) {
                    ps.close();
                }
                if(rs != null) {
                if (rs != null) {
                    rs.close();
                }
            } catch (SQLException e) {
@@ -75,28 +89,29 @@
    /**
     * 防止sql注入 改造成直接用prepareStatement 预处理sql
     *
     * @param sql
     * @param params
     * @return
     */
    public int updateSql(String sql,Object[] params){
        logger.debug("----【queryServiceDAOImpl.updateSql】入参 : "+sql+" params= "+params);
    public int updateSql(String sql, Object[] params) {
        logger.debug("----【queryServiceDAOImpl.updateSql】入参 : " + sql + " params= " + params);
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            conn = sqlSessionTemplate.getConnection();
            ps = conn.prepareStatement(sql);
            if(params != null){
                for(int i = 0 ; i < params.length ; i++){
                    ps.setObject(i+1, params[i]);
            if (params != null) {
                for (int i = 0; i < params.length; i++) {
                    ps.setObject(i + 1, params[i]);
                }
            }
            return ps.executeUpdate();
            //精髓的地方就在这里,类ResultSet有getMetaData()会返回数据的列和对应的值的信息,然后我们将列名和对应的值作为map的键值存入map对象之中...
        } catch (SQLException e) {
            logger.error("执行sql异常:" + sql +params,e);
            logger.error("执行sql异常:" + sql + params, e);
            return 0;
        }finally{
        } finally {
            try {
                //conn.close();
                ps.close();
@@ -108,55 +123,66 @@
    }
    @Override
    public String executeProc(Map<String,Object> paramsInfo) {
    public String executeProc(Map<String, Object> paramsInfo) {
        String paramsInfoStr = "";
        for (String key : paramsInfo.keySet()){
            if("procName".equals(key)){
        for (String key : paramsInfo.keySet()) {
            if ("procName".equals(key)) {
                paramsInfoStr += (paramsInfo.get("procName") + "(");
            }else{
                if(StringUtil.isNullOrNone(paramsInfo.get(key))){
            } else {
                if (StringUtil.isNullOrNone(paramsInfo.get(key))) {
                    paramsInfoStr += "'',";
                }else{
                    paramsInfoStr += "'"+paramsInfo.get(key)+"',";
                } else {
                    paramsInfoStr += "'" + paramsInfo.get(key) + "',";
                }
            }
        }
        paramsInfo.put("paramsInfo",paramsInfoStr);
        paramsInfo.put("paramsInfo", paramsInfoStr);
        sqlSessionTemplate.selectOne("queryServiceDAOImpl.executeProc",paramsInfo);
        sqlSessionTemplate.selectOne("queryServiceDAOImpl.executeProc", paramsInfo);
        return paramsInfo.get("resMsg") ==null ?"" :paramsInfo.get("resMsg").toString();
        return paramsInfo.get("resMsg") == null ? "" : paramsInfo.get("resMsg").toString();
    }
    @Override
    public String updateProc(Map<String,Object> paramsInfo) {
    public String updateProc(Map<String, Object> paramsInfo) {
        String paramsInfoStr = "";
        for (String key : paramsInfo.keySet()){
            if("procName".equals(key)){
        for (String key : paramsInfo.keySet()) {
            if ("procName".equals(key)) {
                paramsInfoStr += (paramsInfo.get("procName") + "(");
            }else{
                if(StringUtil.isNullOrNone(paramsInfo.get(key))){
            } else {
                if (StringUtil.isNullOrNone(paramsInfo.get(key))) {
                    paramsInfoStr += "'',";
                }else{
                    paramsInfoStr += "'"+paramsInfo.get(key)+"',";
                } else {
                    paramsInfoStr += "'" + paramsInfo.get(key) + "',";
                }
            }
        }
        paramsInfo.put("paramsInfo",paramsInfoStr);
        paramsInfo.put("paramsInfo", paramsInfoStr);
        sqlSessionTemplate.update("queryServiceDAOImpl.updateProc",paramsInfo);
        sqlSessionTemplate.update("queryServiceDAOImpl.updateProc", paramsInfo);
        return paramsInfo.get("resMsg") ==null ?"" :paramsInfo.get("resMsg").toString();
        return paramsInfo.get("resMsg") == null ? "" : paramsInfo.get("resMsg").toString();
    }
    /**
     * 查询 ServiceSql
     *
     * @return
     */
    @Override
    public List<ServiceSql> qureyServiceSqlAll() {
        return sqlSessionTemplate.selectList("queryServiceDAOImpl.qureyServiceSqlAll");
    }
    /**
     * 查询服务业务信息
     *
     * @return
     */
    public List<ServiceBusiness> qureyServiceBusiness() {
        return sqlSessionTemplate.selectList("queryServiceDAOImpl.queryServiceBusiness");
    }
}