学习了下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