| | |
| | | import com.java110.core.base.dao.BaseServiceDao; |
| | | 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.util.List; |
| | | import java.util.Map; |
| | | import java.util.TreeMap; |
| | | import java.sql.*; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * Created by wuxw on 2018/4/20. |
| | |
| | | @Service("queryServiceDAOImpl") |
| | | @Transactional |
| | | public class QueryServiceDAOImpl extends BaseServiceDao implements IQueryServiceDAO { |
| | | |
| | | private final static Logger logger = LoggerFactory.getLogger(QueryServiceDAOImpl.class); |
| | | |
| | | /** |
| | | * 防止sql注入 改造成直接用prepareStatement 预处理sql |
| | | * @param sql |
| | | * @param params |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<Map> executeSql(String sql) { |
| | | logger.debug("----【queryServiceDAOImpl.executeSql】入参 : "+sql); |
| | | return sqlSessionTemplate.selectList("queryServiceDAOImpl.executeSql",sql); |
| | | 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>>(); |
| | | 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]); |
| | | } |
| | | } |
| | | 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); |
| | | Object col_value = rs.getObject(col_name); |
| | | if(col_value == null){ |
| | | col_value = ""; |
| | | } |
| | | map.put(col_name, col_value); |
| | | } |
| | | mapList.add(map); |
| | | } |
| | | return mapList; |
| | | } catch (SQLException e) { |
| | | logger.error("执行sql异常:" + sql +params,e); |
| | | return null; |
| | | }finally{ |
| | | try { |
| | | //conn.close(); |
| | | if( ps!=null) { |
| | | ps.close(); |
| | | } |
| | | if(rs != null) { |
| | | rs.close(); |
| | | } |
| | | } catch (SQLException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | //return sqlSessionTemplate.selectList("queryServiceDAOImpl.executeSql",sql); |
| | | } |
| | | |
| | | public int updateSql(String sql){ |
| | | return sqlSessionTemplate.update("queryServiceDAOImpl.updateSql",sql); |
| | | /** |
| | | * 防止sql注入 改造成直接用prepareStatement 预处理sql |
| | | * @param sql |
| | | * @param params |
| | | * @return |
| | | */ |
| | | 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]); |
| | | } |
| | | } |
| | | return ps.executeUpdate(); |
| | | //精髓的地方就在这里,类ResultSet有getMetaData()会返回数据的列和对应的值的信息,然后我们将列名和对应的值作为map的键值存入map对象之中... |
| | | } catch (SQLException e) { |
| | | logger.error("执行sql异常:" + sql +params,e); |
| | | return 0; |
| | | }finally{ |
| | | try { |
| | | //conn.close(); |
| | | ps.close(); |
| | | } catch (SQLException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | //return sqlSessionTemplate.update("queryServiceDAOImpl.updateSql",sql); |
| | | } |
| | | |
| | | @Override |