jdbcTemplate个人小结

JdbcTemplate简介
  Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。
  JdbcTemplate位于spring-jdbc-4.3.0.RELASE.jar中。其全限定命名为org.springframework.jdbc.core.JdbcTemplate。
    要使用JdbcTemlate还需一个spring-tx-4.3.0.RELASE.jar这个包包含了一下事务和异常控制
  
主要提供以下五类方法:
execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
query方法及queryForXXX方法:用于执行查询相关语句;
  call方法:用于执行存储过程、函数相关语句。
JdbcTemplate简介

 

//取得jdbcTemplate对象
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");//启动IoC容器
JdbcTemplate jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate"); //获取IoC容器中JdbcTemplate实例
//或者注入
@Resource
JdbcTemplate jdbcTemplate;
//本地获取jdbcTemplate对象
//JdbcTemplate jdbcTemplate=(JdbcTemplate) AppUtil.getBean("jdbcTemplate") 
初始化jdbcTemplate对象

 

//update插入一条数据
String sql="insert into user (name,deptid) values (?,?)";
int count= jdbcTemplate.update(sql, new Object[]{"caoyc",3});

//update修改一条数据
String sql="update user set name=?,deptid=? where id=?";
jdbcTemplate.update(sql,new Object[]{"zhh",5,51});
 
//update删除一条数据
String sql="delete from user where id=?";
jdbcTemplate.update(sql,51);

 

//queryForXXX 本质上和queryForObject()相同,返回都是单行单列一个数据
String userAccountSql="select account from scpn_user where user_id="+userAccountId; 
String userAccount=(String)jdbcTemplate.queryForObject(userAccountSql, java.lang.String.class);
queryForXXX 返回单个值

 

//queryForObject 返回单个值
String sql="select count(*) from user";
int count= jdbcTemplate.queryForObject(sql, Integer.class);
queryForObject 返回单个值

 

//queryForObject 读取单个对象 并转换成实体类
String sql="select id,name,deptid from user where id=?"; 
RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
User user= jdbcTemplate.queryForObject(sql, rowMapper,52);
//【注意】:1、使用BeanProperytRowMapper要求sql数据查询出来的列和实体属性需要一一对应。
//如果数据中列明和属性名不一致,在sql语句中需要用as重新取一个别名
queryForObject 读取单个对象 并转换成实体类

 

//query 读取多个对象并转换成list集合(不转参)
String sql="select id,name,deptid from user";
RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
List<User> users= jdbcTemplate.query(sql, rowMapper);

//【注意】:1、使用BeanProperytRowMapper要求sql数据查询出来的列和实体属性需要一一对应。
//如果数据中列明和属性名不一致,在sql语句中需要用as重新取一个别名
query 读取多个对象并转换成list集合(不转参)

 

//queryForMap 返回map对象(查询一条记录)
//查询一行数据,即一条记录,一条记录包含多个字段, 使用返回的列做key。(属性作为key,值作为value)
String userAccountSql="select account,create_time from scpn_user where user_id="+userAccountId;
Map userAccountMap=(Map)jdbcTemplate.queryForMap(userAccountSql);

String userAccount= (String)userAccountMap.get("account");    //取出数据库中char类型的数据转换为String
String createTime= (String)userAccountMap.get("create_time").toString();  //取出数据库中datetime类型的数据转换为String
结果样例:
{ID=10000044860001, F_BH=M03030420160317017, F_DZDLX=电厂定值单}
queryForMap 返回map对象(查询一条记录)

 

//queryForList 返回Map的集合List
//返回Map的集合List(它包含多条记录,即queryForMap的集合,数组对象), 用列名做key, 每一个map代表一条数据库记录,
需要使用循环来输出每一条记录,如果想在结果集中加入一个字段,也可以采用如下的put方法。

String sql = "SELECT * FROM mcp_forum_post";
List scpnPostList = jdbcTemplate.queryForList(sql);
if (scpnPostList != null) {
    for (int i = 0; i < scpnPostList.size(); i++) {
        Long userAccountId = (Long)scpnPostList.get(i).get("user_id");
        Long lastmodUser = (Long)scpnPostList.get(i).get("lastmod_user");
                scpnPostList.get(i).put("lastmodUserAccount", "xxxx"); //可以在结果集中插入一个字段
    }
}
queryForList 返回Map的集合List

 

String sql="insert into user (name,deptid) values (?,?)";
List<Object[]> batchArgs=new ArrayList<Object[]>();
batchArgs.add(new Object[]{"caoyc",6});
batchArgs.add(new Object[]{"zhh",8});
batchArgs.add(new Object[]{"cjx",8});
jdbcTemplate.batchUpdate(sql, batchArgs);
批量插入(batchUpdate简单版)

 

//批量插入
public void insertData(List<GzrepDwjzmx> list) {
        String sql = "INSERT INTO W_DWJZMX (MY_ID_,XH,SDSD,SF,DQ,XQ,DW,DG,DGDW,DC,JZBH,RL,LX,DYDJ,CQDW,TCRQ,ZT,TYSJ,BZ,SWDJ,TLDJ,TXDJ,CCDJ,ZDJ,SBZT)" + " values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)";

        List<Object[]> lists = new ArrayList<Object[]>();
        for (GzrepDwjzmx gd : list) {
            Object[] os = new Object[] { gd.getMyId(), gd.getXh(), gd.getSdsd(), gd.getSf(), gd.getDq(), gd.getXq(), gd.getDw(), gd.getDg(), gd.getDgdw(), gd.getDc(), gd.getJzbh(), gd.getRl(), gd.getLx(), gd.getDydj(), gd.getCqdw(), gd.getTcrq(), gd.getZt(), gd.getTysj(), gd.getBz(), gd.getSwdj(), gd.getTldj(), gd.getTxdj(), gd.getCcdj(), gd.getZdj() ,gd.getSbzt()};
            lists.add(os);
        }

        jdbcTemplate.batchUpdate(sql, lists);
    }
批量插入

 

//    批量删除
    public void deleteBetchData(List<QwfgdlfxbAll> list) {
        
//        String sql = "DELETE FROM W_QWFGDLFXBALL WHERE RQ=#{?,jdbcType=DATE}";
        String sql = "DELETE FROM W_QWFGDLFXBALL WHERE RQ=?";

        List<Object[]> lists = new ArrayList<Object[]>();
        for (QwfgdlfxbAll e : list) {
            Object[] os = new Object[]{e.getRq()};
            lists.add(os);
        }

//        int[] batchUpdate = jdbcTemplate.batchUpdate(sql, lists);
//        System.out.println("成功删除的条数==="+batchUpdate.length);
    }
批量删除

 

      //queryForList
        String userId = curUser.getUserId();
            
        String sqlRole = 
        "select name_ from ebos_org_group  where group_id_ in"+
        "("+
        "select group_id_ from EBOS_ORG_USER_GROUP t where user_id_ ='"+userId+"'"+
        ")";
               
        List<Map<String, Object>> queryForList = jdbcTemplate.queryForList(sqlRole);
        boolean flag = false;
        for(Map<String, Object> map : queryForList){
            //System.out.println(map.get("name_"));
            if("审批人".equals(map.get("name_"))){
                flag = true;
            }
        }
queryForList

 

旧版jdbc即使用BatchPreparedStatementSetter对象操作
 // 批量插入 旧版jdbc批量插入(使用BatchPreparedStatementSetter对象),这里似乎有个bug,插入的时间没有时分秒的,而且只能用setObject不然值为空的话就报错
    public void insertData(List<YjDlfhBaseData> list) {
        String sql = "INSERT INTO W_YJDLFHBASEDATA (ID,F_RQ,F_ZDM,F_DRZ,F_DYZ," + "F_DNZ,F_DRZD,F_DYZD,F_DNZD,F_DRZDSK," + "F_DYZDSK,F_DNZDSK,F_DRZX,F_DYZX,F_DNZX,"
                + "F_DRZXSK,F_DYZXSK,F_DNZXSK,F_QNJRZ,F_QNJYZ," + "F_QNJNZ,F_ZT,F_DRPJZ,F_DYPJZ,F_DNPJZ)" + " values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

        final List<YjDlfhBaseData> list2 = list;

        jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
            public int getBatchSize() {
                return list2.size();
            }

            public void setValues(PreparedStatement ps, int index) throws SQLException {
                int j = 1;
                YjDlfhBaseData e = list2.get(index);

                ps.setObject(j++, e.getId());
                ps.setObject(j++, new java.sql.Date(e.getRq().getTime()));
                ps.setObject(j++, e.getZdm());
                ps.setObject(j++, e.getDrz());
                ps.setObject(j++, e.getDyz());
                ps.setObject(j++, e.getDnz());
                ps.setObject(j++, e.getDrzd());
                ps.setObject(j++, e.getDyzd());
                ps.setObject(j++, e.getDnzd());
                ps.setObject(j++, e.getDrzdsk() == null ? null : new java.sql.Date(e.getDrzdsk().getTime()));
                ps.setObject(j++, e.getDyzdsk() == null ? null : new java.sql.Date(e.getDyzdsk().getTime()));
                ps.setObject(j++, e.getDnzdsk() == null ? null : new java.sql.Date(e.getDnzdsk().getTime()));
                ps.setObject(j++, e.getDrzx());
                ps.setObject(j++, e.getDyzx());
                ps.setObject(j++, e.getDnzx());
                ps.setObject(j++, e.getDrzxsk() == null ? null : new java.sql.Date(e.getDrzxsk().getTime()));
                ps.setObject(j++, e.getDyzxsk() == null ? null : new java.sql.Date(e.getDyzxsk().getTime()));
                ps.setObject(j++, e.getDnzxsk() == null ? null : new java.sql.Date(e.getDnzxsk().getTime()));
                ps.setObject(j++, e.getQnjrz());
                ps.setObject(j++, e.getQnjyz());
                ps.setObject(j++, e.getQnjnz());
                ps.setObject(j++, e.getZt());
                ps.setObject(j++, e.getDrpjz());
                ps.setObject(j++, e.getDypjz());
                ps.setObject(j++, e.getDnpjz());
            }
        });
    }
旧版jdbc批量插入

 

    // 批量插入
    public void insertData(List<YjDlfhBaseData> list) {
        String sql = "INSERT INTO W_YJDLFHBASEDATA (ID,F_RQ,F_ZDM,F_DRZ,F_DYZ,F_DNZ,F_DRZD,F_DYZD,F_DNZD,F_DRZX,F_DYZX,F_DNZX,"
                + "F_QNJRZ,F_QNJYZ,F_QNJNZ,F_ZT,F_DRPJZ,F_DYPJZ,F_DNPJZ,F_DRZDSK,F_DYZDSK,F_DNZDSK,F_DRZXSK,F_DYZXSK,F_DNZXSK)" 
                + " values (?,to_date(?,'yyyy-MM-dd'),?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,to_date(?,'yyyy-MM-dd HH24:mi:ss'),to_date(?,'yyyy-MM-dd HH24:mi:ss'),to_date(?,'yyyy-MM-dd HH24:mi:ss'),to_date(?,'yyyy-MM-dd HH24:mi:ss'),to_date(?,'yyyy-MM-dd HH24:mi:ss'),to_date(?,'yyyy-MM-dd HH24:mi:ss'))";

        final List<YjDlfhBaseData> list2 = list;

        jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
            public int getBatchSize() {
                return list2.size();
            }

            public void setValues(PreparedStatement ps, int index) throws SQLException {
                int j = 1;
                YjDlfhBaseData e = list2.get(index);
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                ps.setObject(j++, e.getId());
                ps.setObject(j++, e.getRq()==null?null:sdf.format(e.getRq()));
                ps.setObject(j++, e.getZdm());
                ps.setObject(j++, e.getDrz());
                ps.setObject(j++, e.getDyz());
                ps.setObject(j++, e.getDnz());
                ps.setObject(j++, e.getDrzd());
                ps.setObject(j++, e.getDyzd());
                ps.setObject(j++, e.getDnzd());
                ps.setObject(j++, e.getDrzx());
                ps.setObject(j++, e.getDyzx());
                ps.setObject(j++, e.getDnzx());
                ps.setObject(j++, e.getQnjrz());
                ps.setObject(j++, e.getQnjyz());
                ps.setObject(j++, e.getQnjnz());
                ps.setObject(j++, e.getZt());
                ps.setObject(j++, e.getDrpjz());
                ps.setObject(j++, e.getDypjz());
                ps.setObject(j++, e.getDnpjz());
                ps.setObject(j++, e.getDrzdsk() == null ? null : sdfTime.format(e.getDrzdsk()));
                ps.setObject(j++, e.getDyzdsk() == null ? null : sdfTime.format(e.getDyzdsk()));
                ps.setObject(j++, e.getDnzdsk() == null ? null : sdfTime.format(e.getDnzdsk()));
                ps.setObject(j++, e.getDrzxsk() == null ? null : sdfTime.format(e.getDrzxsk()));
                ps.setObject(j++, e.getDyzxsk() == null ? null : sdfTime.format(e.getDyzxsk()));
                ps.setObject(j++, e.getDnzxsk() == null ? null : sdfTime.format(e.getDnzxsk()));
            }
        });
    }
旧版jdbc批量插入对日期的优化处理

 

    // 批量删除
        public void deleteData(List<YjDlfhBaseData> list) {
            String sql = "delete from W_YJDLFHBASEDATA where F_RQ=to_date(?,'yyyy-MM-dd')  and F_ZDM=?";

            final List<YjDlfhBaseData> list2 = list;

            jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
                public int getBatchSize() {
                    return list2.size();
                }

                public void setValues(PreparedStatement ps, int index) throws SQLException {
                    int j = 1;
                    YjDlfhBaseData e = list2.get(index);
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    ps.setObject(j++, e.getRq()==null?null:sdf.format(e.getRq()));
                    ps.setObject(j++, e.getZdm());
                }
            });
        }
旧版jdbc批量删除

 

/**
     * @param list
     * @return 
     * Object  批量更新
     * 
     */
    public Object batchUpdate(final List<Sydbyxsub> list){
         JdbcTemplate jdbcTemplate=(JdbcTemplate) AppUtil.getBean("jdbcTemplate") ;
         
        jdbcTemplate.batchUpdate(" UPDATE W_SYDBYXSUB SET F_XH=?, F_YX=?, F_YXMC=?, F_SFHB=?, F_LB=?, F_CZ=?, F_JGMC=?, F_GJDJ=?, F_SFGZP=?, F_JX=?, F_SFYK=?, F_HBHMC=?, F_BYZD=?, F_ZT=?, F_WJ=?, F_XHONE=?, F_JG=?, F_HBHXH=?, F_XXLXMC=?, F_GFXXMS=?, F_SFZNZ=?, F_DH=?, F_XHLX=?, F_HBZT=? WHERE id = ? ",
                new BatchPreparedStatementSetter(){
                    @Override
                    public void setValues(PreparedStatement ps, int i)
                            throws SQLException {
                         int j=1;
                         ps.setObject(j++, list.get(i).getXh());
                         ps.setObject(j++, list.get(i).getYx());
                         ps.setObject(j++, list.get(i).getYxmc());
                         ps.setObject(j++, list.get(i).getSfhb());
                         
                         ps.setObject(j++, list.get(i).getLb());
                         ps.setObject(j++, list.get(i).getCz());
                         ps.setObject(j++, list.get(i).getJgmc());
                         ps.setObject(j++, list.get(i).getGjdj());
                         ps.setObject(j++, list.get(i).getSfgzp());

                         ps.setObject(j++, list.get(i).getJx());
                         ps.setObject(j++, list.get(i).getSfyk());
                         ps.setObject(j++, list.get(i).getHbhmc());
                         ps.setObject(j++, list.get(i).getByzd());
                         ps.setObject(j++, list.get(i).getZt());
                         
                         ps.setObject(j++, list.get(i).getWj());
                         ps.setObject(j++, list.get(i).getXhone());
                         ps.setObject(j++, list.get(i).getJg());
                         ps.setObject(j++, list.get(i).getHbhxh());
                         ps.setObject(j++, list.get(i).getXxlxmc());

                         ps.setObject(j++, list.get(i).getGfxxms());
                         ps.setObject(j++, list.get(i).getSfznz());
                         ps.setObject(j++, list.get(i).getDh());
                         ps.setObject(j++, list.get(i).getXhlx());
                         ps.setObject(j++, list.get(i).getHbzt());
                         
                         ps.setObject(j++, list.get(i).getId());
                    }
                    @Override
                    public int getBatchSize() {
                        return list.size();
                    }
                });
        return "OK";
    }
旧版批量更新

 

posted @ 2020-11-05 11:20  爱跳舞的程序员  阅读(132)  评论(0编辑  收藏  举报