/** * 根据已经持久化的注解对象创建 Update SQL 语句 * * @param bean 已经持久化的注解对象 * @param updateFields 给定待更新的字段集合,如果为null,则更新全部 * @return object[0] -- 带占位符 ? 的Update SQL;<br> * object[1] -- 占位符对应的参数值 */ public static Object[] createUpdateSQL(Object bean, String[] updateFields) { if (null == bean) { return null; } // 采用新的解析方式,用于支持注解继承 Persistence p = parsePersistence(bean, true); Map<String, String> mapping = getFieldAnnotationMapping(bean.getClass()); if (null == p || null == p.getTableName()) { return null; } Object[] oo = new Object[2]; StringBuilder sql_buf_1 = new StringBuilder(); StringBuilder sql_buf_2 = new StringBuilder(); sql_buf_1.append("UPDATE "); sql_buf_1.append(p.getTableName()); sql_buf_1.append(" SET "); sql_buf_2.append(" WHERE "); List<Object> valList = new LinkedList<Object>(); List<ColumnField> col_fields = p.getColumnFields(); // 普通列 for (ColumnField cf : col_fields) { /*if( cf.isPrimaryKey() ) { continue; }*/ // 判断Bean的属性,而不是@Column对应的数据表列名 if (withinUpdateFields(mapping.get(cf.getName()), updateFields)) { sql_buf_1.append(cf.getName()); sql_buf_1.append(" = ?, "); valList.add(cf.getValue()); } } // 主键列 for (ColumnField pf : col_fields) { if (!pf.isPrimaryKey()) { continue; } sql_buf_2.append(pf.getName()); sql_buf_2.append(" = ? AND "); valList.add(pf.getValue()); } String sql1 = sql_buf_1.toString(); String sql2 = sql_buf_2.toString(); if (sql1.lastIndexOf(",") != -1) { sql1 = sql1.substring(0, sql1.lastIndexOf(",")); } if (sql2.lastIndexOf("AND") != -1) { sql2 = sql2.substring(0, sql2.lastIndexOf("AND")); } oo[0] = sql1 + sql2; oo[1] = valList.toArray(); sql_buf_1 = null; sql_buf_2 = null; valList.clear(); valList = null; p.clear(); p = null; return oo; }
/** * 根据未持久化的注解对象创建 Insert SQL 语句 * * @param bean 注解对象 * @return object[0] -- 带占位符 ? 的 Insert SQL; <br> * object[1] -- 占位符对应的参数值 */ public static Object[] createInsertSQL(Object bean) { if (bean == null) { return null; } // 采用新的解析方式,用于支持注解继承 Persistence p = parsePersistence(bean, false); if (null == p || null == p.getTableName()) { return null; } Object[] oo = new Object[2]; StringBuilder sql_buf_1 = new StringBuilder(); StringBuilder sql_buf_2 = new StringBuilder(); sql_buf_1.append("INSERT INTO "); sql_buf_1.append(p.getTableName()); sql_buf_1.append("("); sql_buf_2.append(" VALUES("); List<Object> valList = new LinkedList<Object>(); List<ColumnField> col_fields = p.getColumnFields(); // 主键列 for (ColumnField pf : col_fields) { if (!pf.isPrimaryKey()) { continue; } if (pf.getGeneratorType() == GeneratorType.SEQUENCE) { sql_buf_1.append(pf.getName()); sql_buf_1.append(", "); sql_buf_2.append(pf.getValue()); sql_buf_2.append(", "); } else if (pf.getGeneratorType() == GeneratorType.ASSIGN) { sql_buf_1.append(pf.getName()); sql_buf_1.append(", "); sql_buf_2.append("?, "); valList.add(pf.getValue()); } } // 普通列 for (ColumnField cf : col_fields) { if (cf.isPrimaryKey()) { continue; } sql_buf_1.append(cf.getName()); sql_buf_1.append(", "); sql_buf_2.append("?, "); valList.add(cf.getValue()); } String sql1 = sql_buf_1.toString(); String sql2 = sql_buf_2.toString(); if (sql1.lastIndexOf(",") != -1) { sql1 = sql1.substring(0, sql1.lastIndexOf(",")) + ")"; } if (sql2.lastIndexOf(",") != -1) { sql2 = sql2.substring(0, sql2.lastIndexOf(",")) + ")"; } oo[0] = sql1 + sql2; oo[1] = valList.toArray(); sql_buf_1 = null; sql_buf_2 = null; valList.clear(); valList = null; p.clear(); p = null; return oo; }