package com.neusoft.dao.impls; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import org.apache.commons.beanutils.BeanUtils; import com.neusoft.dao.BaseDao; import com.neusoft.exception.IllegalSQLException; import com.neusoft.utils.DBUtils; @SuppressWarnings("unchecked") public class BaseDaoImpl<T> implements BaseDao<T> { protected DBUtils dbUtils; public void setDbUtils(DBUtils dbUtils) { this.dbUtils = dbUtils; } private Class<?> clz; // 对象类型 private String table; // 表名 - 从配置文件中读取 private String primary; // 主键 - 从配置文件中读取 private List<String> fields; // 保存所有字段的 List public BaseDaoImpl() { fields = new ArrayList<String>(); clz = (Class<?>) ((ParameterizedType) this.getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; primary = "user_id"; table = "t_user"; // 要改为读取文件 for (Field f : clz.getDeclaredFields()) { fields.add(f.getName()); } } /** * 保存对象到数据库中 * * @param obj */ public void save(T obj) { StringBuffer insert_sql = new StringBuffer("INSERT INTO " + table + "("); StringBuffer value_sql = new StringBuffer(" VALUES('"); for (String field : fields) { insert_sql.append(field + ","); try { value_sql.append(BeanUtils.getProperty(obj, field) + "','"); } catch (Exception e) { e.printStackTrace(); } } insert_sql.setCharAt(insert_sql.length() - 1, ')'); value_sql.setCharAt(value_sql.length() - 2, ')'); value_sql.setCharAt(value_sql.length() - 1, ' '); String sql = insert_sql.toString() + value_sql.toString(); System.out.println(sql); Connection conn = null; Statement stmt = null; try { conn = dbUtils.getConnection(); stmt = conn.createStatement(); stmt.execute(sql); } catch (SQLException e) { e.printStackTrace(); } finally { dbUtils.closeAll(null, stmt, conn); } } /** * 从数据库中删除指定ID的数据 * * @param id */ public void deleteById(String id) { String column = primary; deleteByOther(column, id); } /** * 从数据库中删除指定值的数据 * * @param id */ public void deleteByOther(String column, String value) { String sql = "DELETE FROM " + table + " WHERE " + column + "='" + value + "'"; System.out.println(sql); Connection conn = null; Statement stmt = null; try { conn = dbUtils.getConnection(); stmt = conn.createStatement(); stmt.execute(sql); } catch (SQLException e) { e.printStackTrace(); } finally { dbUtils.closeAll(null, stmt, conn); } } /** * 从数据库中查找指定ID的数据 * * @param id * @return */ public T findById(String id) { List<T> list = findByCondition(primary + "=" + id); if (list.isEmpty()) { return null; } else return list.get(0); } /** * 查找所有的数据 * * @return */ public List<T> findAll() { return findByConditions(); } /** * 根据多个条件查找 */ public List<T> findByConditions(String... conditions) { if (conditions == null) { throw new IllegalSQLException(); } StringBuffer sql = new StringBuffer("SELECT * FROM " + table + " WHERE '1'='1'"); for (String c : conditions) { sql.append(" AND " + table + "." + addSingleQuotationMarks(c)); } System.err.println(sql); // 连接数据库获取数据 Connection conn = null; Statement stmt = null; ResultSet rs = null; List<T> list = null; try { list = new ArrayList<T>(); conn = dbUtils.getConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery(sql.toString()); T instance = null; while (rs.next()) { instance = (T) clz.newInstance(); for (String cn : fields) { BeanUtils.setProperty(instance, cn, rs.getObject(cn)); } list.add(instance); } } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { dbUtils.closeAll(rs, stmt, conn); } return list; } /** * 按单个条件查找 */ public List<T> findByCondition(String condition) { return findByConditions(condition); } /** * 查找某一段的数据 * * @return */ public List<T> findSliceByIndex(Integer start, Integer length) { return findByCondition("'1'='1' limit " + start + "," + length); } /** * 获取该表的长度 * * @return */ public Integer length() { String sql = "SELECT COUNT(*) from " + table; Connection conn = null; Statement stmt = null; ResultSet rs = null; Integer count = null; try { conn = dbUtils.getConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery(sql); if (rs.next()) { count = Integer.parseInt(rs.getString(1)); } } catch (SQLException e) { e.printStackTrace(); } finally { dbUtils.closeAll(rs, stmt, conn); } return count; } public String getNameByID() { // TODO Auto-generated method stub return null; } /** * 为字符添加单引号 */ private String addSingleQuotationMarks(String temp) { StringBuffer sb = new StringBuffer(temp); return (sb.insert(sb.indexOf("=") + 1, "'")).append("'").toString(); } }