使用JDBCTemplate实现与Spring结合,方法公用 ——共用实现类(BaseImpl)

 /**  
* @Title: BaseImpl.java
* @Package org.dao.impl
* @Description: TODO该方法的主要作用:
* @author A18ccms A18ccms_gmail_com  
* @date 2017-6-6 下午4:12:02
* @version V1.0  
*/
package org.dao.impl;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

 /**   
 *    
 * 项目名称:spring_Cchop10   
 * 类名称:BaseImpl   
 * 类描述:   
 * 创建人:Mu Xiongxiong  
 * 创建时间:2017-6-6 下午4:12:02   
 * 修改人:Mu Xiongxiong   
 * 修改时间:2017-6-6 下午4:12:02   
 * 修改备注:   
 * @version    
 *    
 */
public class BaseImpl<T> {
	private JdbcTemplate jdbcTemplate;   //jdbcTemplate对象
	private Class<T> entityClass;        //将实体类转换成class
	
	/**
	 * 
	     * 构造函数 
	     * @discription 
	     * @author Mu Xiongxiong     
	     * @created 2017-6-6 下午4:58:40
	 */
	@SuppressWarnings("unchecked")
	public BaseImpl() {
		//将T转换成class
		entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
	}
	
	/**
	 * 
	* @Title: save
	* @Description: 该方法的主要作用:添加,修改,删除
	* @param  @param sql
	* @param  @param objects 设定文件  
	* @return  返回类型:void   
	* @throws
	 */
	public void update(String sql,Object[]objects){
		jdbcTemplate.update(sql, objects);
	}
	
	/**
	 * 
	* @Title: getById
	* @Description: 该方法的主要作用:根据id查询信息
	* @param  @param sql
	* @param  @param id 设定文件  
	* @return  返回类型:void   
	* @throws
	 */
	public T getById(String sql,Serializable id){
		return  (T) jdbcTemplate.queryForObject(sql,new Object[]{id},new BeanPropertyRowMapper(entityClass));
	}
	
	/**
	 * 
	* @Title: getAll
	* @Description: 该方法的主要作用:查询全部
	* @param  @param sql 设定文件  
	* @return  返回类型:void   
	* @throws
	 */
	public List<T> getAll(String sql){
		return jdbcTemplate.query(sql, new BeanPropertyRowMapper(entityClass));
	}

	public JdbcTemplate getJdbcTemplate() {
		return jdbcTemplate;
	}

	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}
    /**
     * 创建添加一条员工记录的存储过程
     * CREATE OR REPLACE PROCEDURE add_emp
        (myempno in NUMBER,myename VARCHAR2,myjob VARCHAR2,mymgr NUMBER,mydate DATE,
        mysal NUMBER,mycomm NUMBER)  
        AS  
        BEGIN  
         INSERT INTO emp VALUES(myempno,myename,myjob,mymgr,mydate,mysal,mycomm);  
        END;  

     * 
     * 
     */
    
    @SuppressWarnings("unchecked")
    public Integer testProcedure(final Emp emp) {
        Integer dno    =  jdbcTemplate.execute(new CallableStatementCreator(){
            @Override
            public CallableStatement createCallableStatement(Connection con)
                    throws SQLException {
                String procStr            =            "{call add_emp(?,?,?,?,?,?,?)}";
                CallableStatement   cs                =            con.prepareCall(procStr);
                cs.setInt(1, emp.getEmpno());
                cs.setString(2, emp.getEname());
                cs.setString(3, emp.getJob());
                cs.setInt(4, emp.getMgr());
                cs.setDate(5, (Date) emp.getHiredate());
                cs.setDouble(6, emp.getSal());
                cs.setDouble(7, emp.getComm());
                cs.registerOutParameter(1, OracleTypes.NUMBER);
                return cs;
            }
        }, new CallableStatementCallback(){
            @Override
            public Object doInCallableStatement(CallableStatement cs)
                    throws SQLException, DataAccessException {
                cs.execute();
                return cs.getInt(1);
            }
        })    ;    
        return dno;
    }
 }

原文地址:https://www.cnblogs.com/a1111/p/12816223.html