网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

JdbcTemplate的使用

前段时间由于工作原因,需要编写一个制造测试数据(MySQL)的工具类,网上搜了下,说JdbcTemplate不错,于是乎就准备使用下。为方便调用者无需了解JdbcTemplate,于是在此之上封装了一层,分别实现了增、删、查,且可批量操作,在封装批量新增方法时,费了点劲,最后用反射实现的。代码如下:
接口DataBaseDAO:

创新互联专注于中大型企业的成都网站制作、网站设计和网站改版、网站营销服务,追求商业策划与数据分析、创意艺术与技术开发的融合,累计客户超过千家,服务满意度达97%。帮助广大客户顺利对接上互联网浪潮,准确优选出符合自己需要的互联网运用,我们将一直专注成都品牌网站建设和互联网程序开发,在前进的路上,与客户一起成长!

package com.wb.hz.test.util;
import java.util.List;
public interface DataBaseDAO {
    public void delete(String tableName,String fieldName,Object id);
    public void delete(String tableName,String fieldName,List ids);
    public int  statisticsById(String tableName,String fieldName,Object id);
    public  List queryById(String tableName, String fieldName, Object id,boolean desc);
    public  List queryByIds(String tableName,String fieldName,Object startid,Object endid,boolean desc);
    public  void insert(String sql,List list);
}

实现类DataBaseDAOImpl

package com.wb.hz.test.util.impl;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import com.wb.hz.test.util.DataBaseDAO;
public class DataBaseDAOImpl implements DataBaseDAO {
                            
    @Resource
    private JdbcTemplate jdbcTemplate;
                            
    public void delete(String tableName, String fieldName, Object id) {
        String sql="delete from "+tableName+" where "+fieldName+"=?";
        jdbcTemplate.update(sql, id);
    }
    public void delete(String tableName, String fieldName, List ids) {
        String sql="delete from "+tableName+" where "+fieldName+"=?";
        for(int i=0;i List> queryById(String tableName, String fieldName, Object ids, boolean desc) {
        String sql="select * from "+tableName+" where "+fieldName+"="+String.valueOf(ids);
        if(desc==true){
            sql=sql+" order by id desc";
        }
        List> list=jdbcTemplate.queryForList(sql);
                                
        return list;
    }
                            
                            
    public int statisticsById(String tableName,String fieldName ,Object id) {
        String sql="select count(*) from "+tableName+" where "+fieldName+"="+String.valueOf(id);
        int num=jdbcTemplate.queryForInt(sql);
        return num;
    }
    public  List queryByIds(String tableName,String fieldName, Object startid, Object endid,boolean desc) {
        String sql="select * from "+tableName+" where "+fieldName+" >= "+String.valueOf(startid)+"and "+fieldName+" <= "+String.valueOf(endid);
        if(desc==true){
            sql=sql+" order by id desc";
        }
        List> list=jdbcTemplate.queryForList(sql);
        return list;
    }
    public  void insert(String sql, List objlist) {
        final List list=objlist;
        BatchPreparedStatementSetter setter=new BatchPreparedStatementSetter(){  
                                        
                public int getBatchSize(){  
                    return list.size();  
                }  
                public void setValues(PreparedStatement ps,int index) throws SQLException{  
                    T t=list.get(index);  
                    Field fields[]=t.getClass().getDeclaredFields();
                    try {
                        for(int i=0;i

写完后,试验了一下,这些方法都没问题!于是被当做工具类使用,谁知刚用没多久,问题曝露了,对某表调用批量新增方法插入数据报错,提示某个值对应的字段不对,可是这个字段值实际对应的字段并非异常中显示的,初步判断肯定是字段映射出了问题,重新检查了java反射的那段代码,发现没问题呀!于是冷静分析,决定从头排查,发现传入的sql语句为:insert into tablename values(?,?,?,?,?,?,?); tablename后没有写明字段,于是根据传入的vo对象中定义的字段属性的顺序将这些字段对应的表中字段名写入sql,再次执行,不报错了!看来实现类还需要去解析表字段并将传入的对象属性进行映射才能避免这种情况发生,否则这个方法非常不智能啊!


文章题目:JdbcTemplate的使用
当前网址:http://bjjierui.cn/article/jjdidi.html

其他资讯