|
|
@@ -7,9 +7,8 @@ import com.java110.service.dao.IQueryServiceDAO;
|
|
|
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.
|
|
|
@@ -17,14 +16,91 @@ import java.util.TreeMap;
|
|
|
@Service("queryServiceDAOImpl")
|
|
|
@Transactional
|
|
|
public class QueryServiceDAOImpl extends BaseServiceDao implements IQueryServiceDAO {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 防止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.getColumnName(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();
|
|
|
+ ps.close();
|
|
|
+ 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
|