queryproxy.java
来自「anewssystem新闻发布系统集成使用了spring hibernate f」· Java 代码 · 共 92 行
JAVA
92 行
package anni.core.mock.db.hibernate;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Query;
public class QueryProxy implements InvocationHandler {
/**
* logger.
*/
private static Log logger = LogFactory.getLog(QueryProxy.class);
private String hql;
private Query query;
/**
*
*/
public static Object getInstance(Class clz, String hql) {
QueryProxy proxy = new QueryProxy();
proxy.hql = hql;
proxy.query = (Query) Proxy.newProxyInstance(clz.getClassLoader(),
new Class[] {clz}, proxy);
return proxy.query;
}
/**
*
*/
public Object invoke(Object proxy, Method m, Object[] args)
throws Throwable {
logger.info(m);
String methodName = m.getName();
if (methodName.equals("list")) {
Class queryType = null;
for (Class domainClass : MockFactoryBean.domainMap.keySet()) {
String domainClassName = domainClass.getSimpleName();
if (hql.indexOf(domainClassName) != -1) {
queryType = domainClass;
}
}
if (hql.indexOf("count") != -1) {
List<Long> result = new ArrayList<Long>();
long count = 0L;
try {
count = (long) MockFactoryBean.domainMap.get(queryType)
.values().size();
} catch (Exception ex) {
logger.error(ex);
}
result.add(count);
return result;
} else {
List result = new ArrayList();
try {
result.addAll(MockFactoryBean.domainMap.get(queryType)
.values());
} catch (Exception ex) {
logger.error(ex);
}
return result;
}
} else if (methodName.equals("setFirstResult")) {
return query;
} else if (methodName.equals("setMaxResults")) {
return query;
}
return ProxyHelper.generateReturn(proxy, m, args);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?