本帖最后由 lj312051787 于 2014-08-20 07:53:08 编辑

解决方案 »

  1.   

    在这里花100分问,不如花两周的时间研究一下hibernate的源代码。一方面解决了自己的问题,另一方面也对hibernate搞的门清。
      

  2.   

    真搞不懂  删除和修改都出来了   修改和增加还会很难吗  只是拼接的sql方式不一样而已嘛
      

  3.   

    自己写可能想的不够那面全面,你还是去看下hibernate或者mybatis是怎么生成SQL的吧!
      

  4.   

    一个增加方法   修改也差不多 就不写了/**
     * 增加方法
     * @param obj
     * @return
     * @throws Exception
     */
    public static int add(Object obj) throws Exception {
    /** 声明部分 **/
    Class clazz = obj.getClass();// 获取对象反射信息
    StringBuffer sql = new StringBuffer("insert into"
    + clazz.getSimpleName() + " (");
    StringBuffer sqlParams = new StringBuffer("");
    StringBuffer sqlVals = new StringBuffer("");
    // 获取对象属性信息
    Field[] fields = clazz.getDeclaredFields();/** 拼接SQL语句 **/
    for (Field f : fields) {
    // 获取对象方法名
    String methodName = getMethodNameByField("get", f.getName());
    // 获得此方法的反射
    Method method = clazz.getDeclaredMethod(methodName);
    // 执行方法获取返回值
    Object value = method.invoke(obj);
    // 判断返回值是否为空,不为空则拼接到sql语句
    if (value != null) {
    if (f.getType() == String.class) {// 字符类型
    sqlParams.append(" , " +f.getName());
    sqlVals.append(" , " +value);
    } else if (f.getType() == Date.class
    || f.getType() == Timestamp.class) {
    sqlParams.append(" , " +f.getName());
    sqlVals.append(" , " +to_date('"
    + sdf.format(value) + "','yyyy-MM-dd')");
    } else {
    sqlParams.append(" , " +f.getName());
    sqlVals.append(" , " +value);
    }
    }
    }
    sqlParams和sqlVals 的第一个逗号 要去掉 代码我就不写了
    sql.append(sqlParams).append(" ) values(").append(sqlVals).append(")");
    System.out.println(sql.toString());
    /** 执行SQL语句 **/
    Connection conn = null;
    PreparedStatement ps = null;
    int count = 0;
    try {
    conn = DbUtil.getConn();
    ps = conn.prepareStatement(sql.toString());
    count = ps.executeUpdate();
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    DbUtil.closeconn(conn, ps, null);
    }
    return count;
    }