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对象 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")
//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);

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

//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重新取一个别名

//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重新取一个别名

//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=电厂定值单}

//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"); //可以在结果集中插入一个字段 } }

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);

//批量插入 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 insertData(List<Ycwzd> list) { String col= "MY_ID_,WZDBH,ZYRWBH,WZR,WZDM," + "WZXX,SFKF,KFZ,NL,SFZH," + "SFSDY,SFSZR,JYPXQK,WTJL,WZSJ," + "ZYZT,ZYLX,ZY,GZFZR,GZFS," + "FXDJ,GZDD,GZNR,WZMS,DCXS," + "DCSJ,WTLX,SSWTLX,DCR,DCRQLJ," + "XMGLDW,XMGLDWQLJ,GZDWSGDWMC,DCDWMC,DCFLYJXX," + "DCFLEJ,CJSJ,SBSJ,LCZT,ZGZT," + "DCRSSZY,SSDS,SSDW,SJLY,LRR," + "BYZD,BYZD1,BYZD2,BYZD3"; String questionMark=col.replaceAll("[a-zA-Z|_|1-9]+", "?"); String sql = "INSERT INTO W_YCWZD ("+col+")" + " values ("+questionMark+")"; List<Object[]> lists = new ArrayList<Object[]>(); for (Ycwzd e : list) { Object[] os = new Object[] { e.getMyId(), e.getWzdbh(), e.getZyrwbh(), e.getWzr(),e.getWzdm(), e.getWzxx(), e.getSfkf(), e.getKfz(), e.getNl(), e.getSfzh(), e.getSfsdy(), e.getSfszr(), e.getJypxqk(), e.getWtjl(), e.getWzsj(), e.getZyzt(), e.getZylx(), e.getZy(), e.getGzfzr(), e.getGzfs(), e.getFxdj(), e.getGzdd(), e.getGznr(), e.getWzms(),e.getDcxs(), e.getDcsj(),e.getWtlx(),e.getSswtlx(),e.getDcr(),e.getDcrqlj(), e.getXmgldw(),e.getXmgldwqlj(),e.getGzdwsgdwmc(),e.getDcdwmc(),e.getDcflyjxx(), e.getDcflej(),e.getCjsj(),e.getSbsj(),e.getLczt(),e.getZgzt(), e.getDcrsszy(),e.getSsds(),e.getSsdw(),e.getSjly(),e.getLrr(), e.getByzd(),e.getByzd1(),e.getByzd2(),e.getByzd3() }; 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; } }
旧版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()); } }); }

// 批量插入 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())); } }); }

// 批量删除 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()); } }); }

/** * @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"; }