package com.whyc.service; import com.whyc.mapper.CallBack; import com.whyc.util.ThreadLocalUtil; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.List; @Service public class MybatisSqlExecuteService { @Autowired private SqlSessionTemplate sqlSessionTemplate; // 自定义执行SQL public JSONArray executeQuery(String sql){ PreparedStatement ps = null; ResultSet rs = null; SqlSession sqlSession = openSession(); JSONArray jsonArray = new JSONArray(); try { ps=sqlSession.getConnection().prepareStatement(sql); rs=ps.executeQuery(); ResultSetMetaData metaData = rs.getMetaData(); int colCnt = metaData.getColumnCount(); while (rs.next()) { JSONObject jsonObject = new JSONObject(); for(int i=1;i<=colCnt;i++){ String property=metaData.getColumnName(i); Object obj=rs.getObject(i); if(obj instanceof java.util.Date ){ //jsonObject.put(property, ActionUtil.sdf.format(obj)); jsonObject.put(property, ThreadLocalUtil.format((java.util.Date) obj,1)); }else{ jsonObject.put(property,obj); } } JSONObject.toBean(jsonObject,Object.class); jsonArray.add(jsonObject); } } catch (SQLException throwables) { throwables.printStackTrace(); }finally { closeSession(rs,ps,sqlSession); } return jsonArray; } // 自定义执行SQL public List executeQuery_call(String sql, CallBack call){ PreparedStatement ps = null; ResultSet rs = null; SqlSession sqlSession = openSession(); try { ps=sqlSession.getConnection().prepareStatement(sql); rs=ps.executeQuery(); return call.getResults(rs); } catch (SQLException throwables) { throwables.printStackTrace(); }finally { closeSession(rs,ps,sqlSession); } return null; } /** * 封装所有更新的操作(添加,删除,修改) * @param sql * @param values * @return */ public int executeUpdate(String sql, Object[] values){ PreparedStatement ps = null; ResultSet rs = null; SqlSession sqlSession = openSession(); int flag=0; try { ps = sqlSession.getConnection().prepareStatement(sql); if(values != null){ for (int i = 0; i < values.length; i++) { ps.setObject(i+1, values[i]); } } flag = ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally{ closeSession(rs,ps,sqlSession); } return flag; } //执行sql语句 public boolean execute(String sql){ PreparedStatement ps = null; SqlSession sqlSession = openSession(); boolean rest = true; try{ ps = sqlSession.getConnection().prepareStatement(sql); ps.execute(); }catch(SQLException ex) { ex.printStackTrace(); rest = false; }finally { closeSession(null,ps,sqlSession); } return rest; } // 开启链接 private SqlSession openSession() { SqlSessionFactory sqlSessionFactory = sqlSessionTemplate.getSqlSessionFactory(); return sqlSessionFactory.openSession(); } // 关闭链接 private void closeSession(ResultSet rs,PreparedStatement ps,SqlSession sqlSession) { try { if(rs!=null){ rs.close(); } if(ps!=null){ ps.close(); } if(sqlSession!=null){ sqlSession.close(); } } catch (SQLException throwables) { throwables.printStackTrace(); } } }