package org.neframework.jpa.sql; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.neframework.jpa.core.OrmPersistence; import org.neframework.jpa.model.DbModel; import org.neframework.jpa.util.ChkTools; import org.neframework.jpa.util.ClassTools; import org.neframework.jpa.util.MysqlOrmTools; public class OrmComponent implements OrmPersistence { private final JdbcComponent jc = new JdbcComponent(); @Override public void saveObj(DbModel obj) { String sql = MysqlOrmTools.getInsSQL(obj.getClass()); MysqlOrmTools.initDbModel(obj); List<Object> vals = MysqlOrmTools.getValuesPar(obj); jc.update(sql, vals.toArray()); } @Override public void updateObj(DbModel obj) { if (obj == null) { return; } String sql = MysqlOrmTools.getUpdateSQL(obj.getClass()); List<Object> vals = MysqlOrmTools.getUpdateVals(obj); jc.update(sql, vals.toArray()); } @Override public void delObjById(Object id, Class<?> clazz) { String sql = MysqlOrmTools.getDelSQL(clazz); jc.update(sql, new Object[] { id }); } @Override public void delObj(DbModel obj) { if (obj == null) { return; } Field id = ClassTools.getIdField(obj.getClass()); Object val = ClassTools.getClassVal(id, obj); delObjById(val, obj.getClass()); } @Override public void delRealObj(DbModel obj) { if (obj == null) { return; } Field id = ClassTools.getIdField(obj.getClass()); Object val = ClassTools.getClassVal(id, obj); delRealObjById(val, obj.getClass()); } @Override public void delRealObjById(Object id, Class<?> clazz) { if (ChkTools.isNull(id)) { return; } String sql = MysqlOrmTools.getDelRealSQL(clazz); jc.update(sql, new Object[] { id }); } @Override public DbModel findObjById(String _id, Class<?> clazz) { if (ChkTools.isNull(_id)) { return null; } String sql = MysqlOrmTools.getSelectSQL(clazz, true); Map<String, Object> map = jc.queryForMap(sql, new String[] { _id }); DbModel model = ClassTools.trunMapToObj(map, clazz); return model; } @Override public DbModel findObj(String sql, Class<?> clazz) { return findObj(sql, null, clazz); } @Override public DbModel findObj(String sql, Object[] args, Class<?> clazz) { Map<String, Object> map = jc.queryForMap(sql, args); DbModel model = ClassTools.trunMapToObj(map, clazz); return model; } @Override public boolean saveOrUpdateObjs(List<DbModel> objs) { // TODO 批量修改对象 if (ChkTools.isNull(objs)) { return true; } List<String> sqls = new ArrayList<String>(); List<List<Object>> valList = new ArrayList<List<Object>>(); for (DbModel obj : objs) { String sql = null; List<Object> vals = null; Field id = ClassTools.getIdField(obj.getClass()); Object idVal = ClassTools.getClassVal(id, obj); if (idVal == null) { // 添加 sql = MysqlOrmTools.getInsSQL(obj.getClass()); MysqlOrmTools.initDbModel(obj); vals = MysqlOrmTools.getValuesPar(obj); } else { // 修改 sql = MysqlOrmTools.getUpdateSQL(obj.getClass()); vals = MysqlOrmTools.getUpdateVals(obj); } sqls.add(sql); valList.add(vals); } boolean b = jc.execute(sqls, valList); return b; } }