JdbcTemplate query



import com.netposa.entities.Camera;
import com.netposa.pvm.sync.framework.OperateType;
import jodd.bean.BeanUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.jdbc.core.RowCallbackHandler;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;

/**
 * Created by Administrator on 2016/12/7.
 */
public class JdbCTemp {
    @Autowired
    JdbcTemplate jdbcTemplate;
    /*
   不带参数每行处理,在processRow中一行行处理
    */
    public void query1(){

        final Map<UUID,Camera> map=new HashMap<>() ;
        jdbcTemplate.query("select id,name,orgId from camera ", new RowCallbackHandler() {
            Camera camera=new Camera();
            @Override
            public void processRow(ResultSet rs) throws SQLException {
                UUID id = UUID.fromString(rs.getString("id"));
                camera.setId(id);
                camera.setName(rs.getString("name"));
                camera.setOrgId(UUID.fromString(rs.getString("orgId")));
                map.put(id,camera);
            }
        });
    }
    /*
    带参数每行处理,在processRow中一行行处理
     */
    public void query2(String id){
        final Camera camera=new Camera();
        jdbcTemplate.query("select id,name,orgId from camera where id=?", new RowCallbackHandler() {

            @Override
            public void processRow(ResultSet rs) throws SQLException {
                UUID id = UUID.fromString(rs.getString("id"));
                camera.setId(id);
                camera.setName(rs.getString("name"));
                camera.setOrgId(UUID.fromString(rs.getString("orgId")));

            }
        },id);
    }
    

    /**
     * 不带参数,在extractData中处理整个ResultSet
     * @return
     */
    public List<Camera> query3(){
        return jdbcTemplate.query("select id,name,orgId from camera", new ResultSetExtractor<List<Camera>>() {
            List<Camera> lists=new ArrayList<Camera>();
            @Override
            public List<Camera> extractData(ResultSet rs) throws SQLException, DataAccessException {
                while(rs.next()){
                    Camera camera=new Camera();
                    UUID id = UUID.fromString(rs.getString("id"));
                    camera.setId(id);
                    camera.setName(rs.getString("name"));
                    camera.setOrgId(UUID.fromString(rs.getString("orgId")));
                    lists.add(camera);
                }
                return lists;
            }
        });
    }

    

    /**
     * 带参数,在extractData中处理整个ResultSet
     * @param serviceType
     * @return
     */
    public List<Camera> query3(String serviceType){
        return jdbcTemplate.query("select id,name,orgId from camera where service_type=?", new ResultSetExtractor<List<Camera>>() {
            List<Camera> lists=new ArrayList<Camera>();
            @Override
            public List<Camera> extractData(ResultSet rs) throws SQLException, DataAccessException {
                while(rs.next()){
                    Camera camera=new Camera();
                    UUID id = UUID.fromString(rs.getString("id"));
                    camera.setId(id);
                    camera.setName(rs.getString("name"));
                    camera.setOrgId(UUID.fromString(rs.getString("orgId")));
                    lists.add(camera);
                }
                return lists;
            }
        },serviceType);
    }

    
 

    /**
     * 批量插入
     * @param cameras
     * @param insertKeys  (id,name,....)
     * @param preparedKeys (?,?,?...)
     * @param keys
     */
    public void batch(List<Camera> cameras,String insertKeys,String preparedKeys,Set<String> keys){
        jdbcTemplate.batchUpdate("insert into camera "+insertKeys+" VALUE " +preparedKeys,new MyBatchPreparedStatementSetter1(cameras,keys));
    }
    public static class MyBatchPreparedStatementSetter1 implements  BatchPreparedStatementSetter {
        private final List<Camera> cameras;
        private final Set<String> keys;

        public MyBatchPreparedStatementSetter1(List<Camera> cameras, Set<String> keys) {
            this.cameras = cameras;
            this.keys = keys;
        }

        @Override
        public void setValues(PreparedStatement ps, int i) throws SQLException {
            int idx=1;
            Camera camera=cameras.get(i);

            for(String key:keys){
                ps.setString(idx,  BeanUtil.declared.getProperty(camera,key).toString());
                idx++;
            }
        }

        @Override
        public int getBatchSize() {
            return cameras.size();
        }
    }
    
    public static class MyBatchPreparedStatementSetter implements BatchPreparedStatementSetter {
        private final List<Map<String, String>> cache;
        private final Set<String> allKeys;
        private final Map<String, String> defaultValueMap;
        private final int op;

        public MyBatchPreparedStatementSetter(List<Map<String, String>> cache, Set<String> allKeys, Map<String, String> defaultValueMap,int op) {
            this.cache = cache;
            this.allKeys = allKeys;
            this.defaultValueMap = defaultValueMap;
            this.op=op;
        }

        @Override
        public void setValues(PreparedStatement ps, int i) throws SQLException {
            Map<String, String> map = cache.get(i);
            int idx = 1;
            for (String key : allKeys) {
                if (map.containsKey(key)) {
                    ps.setString(idx, map.get(key));
                } else if (defaultValueMap.containsKey(key)) {
                    ps.setString(idx, defaultValueMap.get(key));
                } else {
                    ps.setString(idx, null);
                }
                ++idx;
            }
            if(op== OperateType.UPDATE.value){
                ps.setString(idx, map.get("id"));
            }
        }

        @Override
        public int getBatchSize() {
            return cache.size();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值