/** * 功能说明: 根据复合主键查找该对象 创建人: 王金绍 创建时间:2013-3-18 上午10:19:52 * * @param obj * @param ormSql * @return OrmValue */ public OrmValue getGetX(Object obj, OrmSql ormSql) { OrmTable ormTable = ormSql.getTable(); Object id = AnnotationUtil.getFieldValue(obj, ormTable.getIdCol().getField()); if (id == null) throw new OrmException( "对象 [" + obj.getClass().getName() + "] 中主键字段 [" + ormTable.getIdCol().getAttrName() + "] 值不能为空"); return this.getGet(id, ormSql); }
/** * 功能说明: obj中值非空字段才作为查询条件,字符串类型采用like 动态生存,sql也是变化的,故而绕过ormSql 动态生成sql语句 创建人: 王金绍 创建时间:2013-3-18 * 上午10:09:18 * * @param obj * @param ormTable * @param likeQuery 是否模糊查询 * @return OrmValue */ public OrmValue getQuery(Object obj, OrmTable ormTable, boolean likeQuery) { OrmValue ormValue = new OrmValue(); List<OrmColumn> cols = ormTable.getOrmCols(); List<Integer> argTypes = new ArrayList<Integer>(); List<Field> fields = new ArrayList<Field>(); List<OrmColumn> sCols = new ArrayList<OrmColumn>(); List<Object> objs = new ArrayList<Object>(); StringBuilder conditionStrb = new StringBuilder(); // 查询条件 Object val = null; for (OrmColumn col : cols) { if ((val = AnnotationUtil.getFieldValue(obj, col.getField())) != null) { // 字符串类型 if (likeQuery && java.sql.Types.VARCHAR == col.getType()) { conditionStrb.append(" and t.").append(col.getSqlName()).append(" like ? "); objs.add("%" + val.toString().trim() + "%"); } else { conditionStrb.append(" and t.").append(col.getSqlName()).append("=? "); objs.add(val); } argTypes.add(col.getType()); fields.add(col.getField()); sCols.add(col); } } StringBuilder strb = new StringBuilder(ormTable.getSqlHeadPrefix()); strb.append(" where 1=1 ") .append(conditionStrb.substring(1)) .append(ormTable.getSqlOrderSuffix()); ormValue.setSql(strb.toString()); ormValue.setFields(fields); ormValue.setArgTypes(LangUtil.toArray(argTypes)); ormValue.setTable(ormTable); ormValue.setOpType(OrmSql.OPT_QUERY); ormValue.setCols(sCols); ormValue.setArgs(objs.toArray()); return ormValue; }