50,523
社区成员
发帖
与我相关
我的任务
分享
import java.util.List;
public interface BaseDao<T> {
public abstract void add(T t);
public abstract void delete(T t);
public abstract void update(T t);
public abstract T select(T t);
public abstract List<T>findAll();
}
import javax.jnlp.BasicService;
import java.lang.reflect.*;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import static oracle.net.aso.C00.t;
/**
* Created by Administrator on 2017/1/4.
*/
public class BaseDaoImpl<T> implements BaseDao<T> {
/** 操作常量 */
public static final String SQL_INSERT = "insert";
public static final String SQL_UPDATE = "update";
public static final String SQL_DELETE = "delete";
public static final String SQL_SELECT = "select";
public static final String SQL_SELECTALL = "select";
public Class<T> EntityClass; // 获取实体类
public PreparedStatement statement;
public String sql;
public Object argType[];
public ResultSet rs;
@SuppressWarnings("unchecked")
public BaseDaoImpl() {
/**
* 传递User就是 com.example.daoimp.BaseDaoImp<com.example.bean.User>
* 传递Shop就是 com.example.daoimp.BaseDaoImp<com.example.bean.Shop>
* */
// ParameterizedType type = (ParameterizedType) getClass()
// .getGenericSuperclass();
/**
* 这里如果传递的是User.那么就是class com.example.bean.User
* 如果传递的是Shop. 那么就是class com.example.bean.Shop
* */
// EntityClass = (Class<T>) GenericsUtils.getSuperClassGenricType().getActualTypeArguments()[0];
Class<T> EntityClass = GenericsUtils.getSuperClassGenricType(BasicService.class, 0);
}
@Override
public void add(T t) {
// TODO Auto-generated method stub
sql = this.getSql(SQL_INSERT); //获取sql.
// 赋值.
try {
argType = setArgs(t, SQL_INSERT);
statement = JdbcUtils.getPreparedStatement(sql); //实例化PreparedStatement.
//为sql语句赋值.
statement = JdbcUtils.setPreparedStatementParam(statement,
argType);
statement.executeUpdate(); //执行语句.
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JdbcUtils.release(statement, null); //释放资源.
}
}
@Override
public void delete(T t) {
// TODO Auto-generated method stub
sql = this.getSql(SQL_DELETE);
try {
argType = this.setArgs(t, SQL_DELETE);
statement = JdbcUtils.getPreparedStatement(sql);
statement = JdbcUtils.setPreparedStatementParam(statement,
argType);
statement.executeUpdate();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JdbcUtils.release(statement, null);
}
}
@Override
public void update(T t) {
// TODO Auto-generated method stub
sql = this.getSql(SQL_UPDATE);
try {
argType = setArgs(t, SQL_UPDATE);
statement = JdbcUtils.getPreparedStatement(sql);
statement = JdbcUtils.setPreparedStatementParam(statement,
argType);
statement.executeUpdate();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JdbcUtils.release(statement, null);
}
}
@Override
public T select(T t) {
// TODO Auto-generated method stub
sql = this.getSql(SQL_SELECT);
T obj = null;
try {
argType = setArgs(t, SQL_SELECT);
statement = JdbcUtils.getPreparedStatement(sql);
statement = JdbcUtils.setPreparedStatementParam(statement,
argType);
rs = statement.executeQuery();
Field fields[] = EntityClass.getDeclaredFields();
while (rs.next()) {
obj = EntityClass.newInstance();
for (int i = 0; i < fields.length; i++) {
fields[i].setAccessible(true);
fields[i].set(obj, rs.getObject(fields[i].getName()));
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return obj;
}
@Override
public List<T> findAll() {
// TODO Auto-generated method stub
sql = this.getSql(SQL_SELECTALL);
List<T>list = new ArrayList<T>();
T obj,t = null;
try {
argType = setArgs(t, SQL_SELECT);
statement = JdbcUtils.getPreparedStatement(sql);
statement = JdbcUtils.setPreparedStatementParam(statement,
argType);
rs = statement.executeQuery();
Field fields[] = EntityClass.getDeclaredFields();
while (rs.next()) {
obj = EntityClass.newInstance();
for (int i = 0; i < fields.length; i++) {
fields[i].setAccessible(true);
fields[i].set(obj, rs.getObject(fields[i].getName()));
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
// sql拼接函数 形如 : insert into User(id,username,password,email,grade) values(?,?,?,?,?)
private String getSql(String operator) {
StringBuffer sql = new StringBuffer();
// 通过反射获取实体类中的所有变量
Field fields[] = EntityClass.getDeclaredFields();
// 插入操作
if (operator.equals(SQL_INSERT)) {
sql.append("insert into " + EntityClass.getSimpleName());
sql.append("(");
for (int i = 0; fields != null && i < fields.length; i++) {
fields[i].setAccessible(true); //这句话必须要有,否则会抛出异常.
String column = fields[i].getName();
sql.append(column).append(",");
}
sql = sql.deleteCharAt(sql.length() - 1);
sql.append(") values (");
for (int i = 0; fields != null && i < fields.length; i++) {
sql.append("?,");
}
sql.deleteCharAt(sql.length() - 1);
// 是否需要添加分号
sql.append(")");
} else if (operator.equals(SQL_UPDATE)) {
sql.append("update " + EntityClass.getSimpleName() + " set ");
for (int i = 0; fields != null && i < fields.length; i++) {
fields[i].setAccessible(true);
String column = fields[i].getName();
if (column.equals("id")) {
continue;
}
sql.append(column).append("=").append("?,");
}
sql.deleteCharAt(sql.length() - 1);
sql.append(" where id=?");
} else if (operator.equals(SQL_DELETE)) {
sql.append("delete from " + EntityClass.getSimpleName()
+ " where id=?");
} else if (operator.equals(SQL_SELECT)) {
sql.append("select * from " + EntityClass.getSimpleName()
+ " where id=?");
}else if (operator.equals(SQL_SELECTALL)) {
sql.append("select * from " + EntityClass.getSimpleName()
);
}
return sql.toString();
}
// 获取参数.
private Object[] setArgs(T entity, String operator)
throws IllegalArgumentException, IllegalAccessException {
Field fields[] = EntityClass.getDeclaredFields();
if (operator.equals(SQL_INSERT)) {
Object obj[] = new Object[fields.length];
for (int i = 0; obj != null && i < fields.length; i++) {
fields[i].setAccessible(true);
obj[i] = fields[i].get(entity);
}
return obj;
} else if (operator.equals(SQL_UPDATE)) {
Object Tempobj[] = new Object[fields.length];
for (int i = 0; Tempobj != null && i < fields.length; i++) {
fields[i].setAccessible(true);
Tempobj[i] = fields[i].get(entity);
}
Object obj[] = new Object[fields.length];
System.arraycopy(Tempobj, 1, obj, 0, Tempobj.length - 1);
obj[obj.length - 1] = Tempobj[0];
return obj;
} else if (operator.equals(SQL_DELETE)) {
Object obj[] = new Object[1];
fields[0].setAccessible(true);
obj[0] = fields[0].get(entity);
return obj;
} else if (operator.equals(SQL_SELECT)) {
Object obj[] = new Object[1];
fields[0].setAccessible(true);
obj[0] = fields[0].get(entity);
return obj;
}else if (operator.equals(SQL_SELECTALL)){
Object obj[] = new Object[1];
fields[0].setAccessible(true);
obj[0] = fields[0].get(entity);
return obj;
}
return null;
}
}
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
/**
* Created by Administrator on 2017/1/4.
*/
public class GenericsUtils {
/**
* 通过反射,获得定义Class时声明的父类的范型参数的类型.
* 如public BookManager extends GenricManager<Book>
*
* @param clazz The class to introspect
* @return the first generic declaration, or <code>Object.class</code> if cannot be determined
*/
public static Class getSuperClassGenricType(Class clazz) {
return getSuperClassGenricType(clazz, 0);
}
/**
* 通过反射,获得定义Class时声明的父类的范型参数的类型.
* 如public BookManager extends GenricManager<Book>
* *
* @param clazz clazz The class to introspect
* @param index the Index of the generic ddeclaration,start from 0.
*/
public static Class getSuperClassGenricType(Class clazz, int index) throws IndexOutOfBoundsException {
Type genType = clazz.getGenericSuperclass();
if (!(genType instanceof ParameterizedType)) {
return Object.class;
}
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
if (index >= params.length || index < 0) {
return Object.class;
}
if (!(params[index] instanceof Class)) {
return Object.class;
}
return (Class) params[index];
}
}
实体类
public class Layer_tbl {
public int layerKeyID_grp;
public int projectId_grp;
public int layerPid_grp;
public String layerElementID_grp;
public String layerId_grp;
public Layer_tbl(int layerKeyID_grp, int projectId_grp, int layerPid_grp, String layerElementID_grp, String layerId_grp) {
this.layerKeyID_grp = layerKeyID_grp;
this.projectId_grp = projectId_grp;
this.layerPid_grp = layerPid_grp;
this.layerElementID_grp = layerElementID_grp;
this.layerId_grp = layerId_grp;
}
public Layer_tbl() {
}
public int getLayerKeyID_grp() {
return layerKeyID_grp;
}
public void setLayerKeyID_grp(int layerKeyID_grp) {
this.layerKeyID_grp = layerKeyID_grp;
}
public int getProjectId_grp() {
return projectId_grp;
}
public void setProjectId_grp(int projectId_grp) {
this.projectId_grp = projectId_grp;
}
public int getLayerPid_grp() {
return layerPid_grp;
}
public void setLayerPid_grp(int layerPid_grp) {
this.layerPid_grp = layerPid_grp;
}
public String getLayerElementID_grp() {
return layerElementID_grp;
}
public void setLayerElementID_grp(String layerElementID_grp) {
this.layerElementID_grp = layerElementID_grp;
}
public String getLayerId_grp() {
return layerId_grp;
}
public void setLayerId_grp(String layerId_grp) {
this.layerId_grp = layerId_grp;
}
}