spring Jdbc自动获取主键。

学习了下springjdbc,感觉挺实用的,相对来说springjdbc 扩展性相当好了



package com.power.dao;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;

import com.power.sql.UpdateSql;
import com.power.sql.UpdateSql.SqlType;
import com.power.utils.ArrayAssistant;
import com.power.utils.FieldAssistant;
import com.power.utils.TransformUtils;

@SuppressWarnings("unchecked")
public class BaseDao<T>{
	
	private Class<T> entityClass ; 
	
	public BaseDao() {
		this.entityClass = null;
		Class<?> c = getClass();
		Type type = c.getGenericSuperclass();
		if (type instanceof ParameterizedType) {
			Type[] parameterizedType = ((ParameterizedType) type)
					.getActualTypeArguments();
			this.entityClass = (Class<T>) parameterizedType[0];
		}
	}
	
	
	@Autowired
	private JdbcTemplate jdbcTemplate ;  
	
	private UpdateSql updateSql ; 
	
	public Integer insert(T t){
		updateSql = new UpdateSql(SqlType.INSERT , t) ;  
		
		if(null == updateSql.getIdName()){
			return jdbcTemplate.update( updateSql.getSqlBuffer() , ArrayAssistant.asArray(updateSql.getParam()) ) ;
		}
		
		KeyHolder holder = new GeneratedKeyHolder() ;
		jdbcTemplate.update(new PreparedStatementCreator() {
			public PreparedStatement createPreparedStatement(Connection conn)
					throws SQLException {
				PreparedStatement ps = conn.prepareStatement( updateSql.getSqlBuffer() , 
						new String[] { updateSql.getIdName() } ) ; 
				List<Object> param = updateSql.getParam() ;
				int size = param.size() ;
				for(int x=1;x<=size;x++){
					ps.setObject(x, param.get(x-1)); 
				}
				return ps ;
			}
		} , holder ) ; 
		
		int id = TransformUtils.toInt(holder.getKey()) ;
		FieldAssistant.writeField(updateSql.getIdName(),  t , id, true); 
		
		return TransformUtils.toInt(holder.getKey()) ;  
	}
	
	public int update(T t){
		updateSql = new UpdateSql(SqlType.UPDATE , t) ;  
		int result = jdbcTemplate.update(updateSql.getSqlBuffer()
				, ArrayAssistant.asArray(updateSql.getParam())) ;
		return result ;  
	}
	
	
	public int delete(T t){
		updateSql = new UpdateSql(SqlType.DELETE , t) ;  
		int result = jdbcTemplate.update(updateSql.getSqlBuffer()
				, ArrayAssistant.asArray(updateSql.getParam())) ;
		return result ;  
	}
	
	public int delete(Integer id){
		
		updateSql = new UpdateSql( entityClass ) ;  
		
		int result = jdbcTemplate.update(updateSql.getSqlBuffer()
				, id ) ; 
		return result ; 
	}
	
}



UpdateSql 类在:http://blog.youkuaiyun.com/hfmbook/article/details/41290641
转载请表名出处:http://blog.youkuaiyun.com/hfmbook

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值