package com.utstar.nms.vmm.spring.dao;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import com.utstar.nms.vmm.spring.exception.UnSupportedMothodException;
import com.utstar.nms.vmm.spring.util.BeanUtil;
import com.utstar.nms.vmm.spring.util.GenericsUtils;
import com.utstar.nms.vmm.spring.util.SQLUtil;
public class JDBCEntityDAO <T> implements EntityDao<T> {
protected Class<T> entityClass;
private String className;
public JDBCEntityDAO() {
this.entityClass = GenericsUtils.getSuperClassGenricType(getClass());
this.className = entityClass.getSimpleName();
//System.out.println("JDBCEntityDAO():----entityClass:"+entityClass+",className:"+className);
}
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource)
{
jdbcTemplate = new JdbcTemplate(dataSource);
}
/**
* find objects by sql(jdbc) or hql(hibernate)
* @param ql
* @param values
* @return an objects list of the query result
*/
public List<T> findBySQL(String sql, Object... values)
{
System.out.println("find sql:"+sql);
for (int i = 0; i < values.length; i++) {
System.out.print("param["+i+"]:"+values[i]);
}
System.out.println();
List<T> allRows=jdbcTemplate.queryForList(sql,values);
return allRows;
}
/**
* update/delete/insert by input sql and set values
* @param sql: eg.:update vmm_ag set domainname=?,description=?
* @param values eg.:new String []{"domainname1","desc1"}
* @return void
*/
public void updateBySQL(String sql, Object... values)
{
System.out.println("update sql:"+sql);
for (int i = 0; i < values.length; i++) {
System.out.print("param["+i+"]:"+values[i]);
}
jdbcTemplate.update(sql,values);
}
/**
* @return find all objects
*/
public List<T> findAll()
{
String tableName=SQLUtil.getTableName(className);
String findAllSQL=SQLUtil.genFindAllSQL(tableName);
return findBySQL(findAllSQL);
}
/**
* find an object by its id
* @param id
* @return an object
*/
public T findByID(Serializable id)
{
System.err.println("ERROR JDBCEntityDAO don't support this method: T findByID(Serializable id)");
System.err.println("you can extends and implement this method in service layer");
return null;
}
/**
* find objects by sql(jdbc) or hql(hibernate)
* @param ql
* @param values
* @return an objects list of the query result
*/
public List<T> findByQL(String sql, Object... values)
{
return findBySQL(sql,values);
}
/**
* save the object input
* @param o
*/
public void save(Object bean)
{
String insertSQL=SQLUtil.genInsertSQL(bean);
updateBySQL(insertSQL);
}
/**
* update the object input
* @param o
*/
public void update(Object bean)
{
SQLUtil aSQLUtil = new SQLUtil("SN");
String upateSQL=aSQLUtil.genUpdateSQL(bean);
updateBySQL(upateSQL);
}
/**
* saveOrUpdate the object input
* @param o
*/
public void saveOrUpdate(Object object)
{
System.err.println("ERROR JDBCEntityDAO don't support this method: saveOrUpdate(Object object)");
}
/**
* delete an object by its id
* if your id 's column name is not SN,then you need to
* override this mothod,set your id column name yourself
* @param id
*/
public void remove(Object bean)
{
SQLUtil aSQLUtil = new SQLUtil("SN");//attention,hard code:SN
String removeSQL=aSQLUtil.genDeleteSQL(bean);
updateBySQL(removeSQL);
}
/**
* delete an object by its id
* if your id 's column name is not SN,then you need to
* override this mothod,set your id column name yourself
* @param id
*/
public void removeById(Serializable id)
{
String tableName=SQLUtil.getTableName(className);
SQLUtil aSQLUtil = new SQLUtil("SN");//attention,hard code:SN
String removeByIdSQL=aSQLUtil.genRemoveByIdSQL(tableName,id);
updateBySQL(removeByIdSQL);
}
}