📄 querycontroller.java
字号:
package cn.cja.dao;
import java.lang.reflect.Array;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import net.sf.cglib.beans.BeanMap;
import cn.cja.sql.Query;
import cn.cja.sql.SubQuery;
public class QueryController extends BaseAnnotationController {
public QueryController() {
}
public Object query(Query query, Connection connection, Object[] params, Class<?> clazz, Object object)
throws SQLException {
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = connection.prepareStatement(query.value());
bindParams(ps, params);
rs = ps.executeQuery();
if (clazz.isPrimitive() || String.class.equals(clazz)
|| Date.class.isAssignableFrom(clazz)) {
if (rs.next()) {
return rs.getObject(1);
}
} else if (clazz.isArray()) {
Class realClass = clazz.getComponentType();
ArrayList list = new ArrayList();
if (realClass.isPrimitive() || String.class.equals(realClass)
|| Date.class.isAssignableFrom(realClass)) {
while (rs.next()) {
list.add(rs.getObject(1));
}
} else {
IORMapper orm = query.orm().newInstance();
while (rs.next()) {
list.add(getResultObj(query,realClass, rs, object));
}
}
Object returnArray = Array.newInstance(realClass, list.size());
for (int i = 0; i < list.size(); i++) {
Array.set(returnArray, i, list.get(i));
}
return returnArray;
} else if (Collection.class.isAssignableFrom(clazz)) {
Class realClass = query.entityClass();
Collection list = (Collection) clazz.newInstance();
if (realClass.isPrimitive() || String.class.equals(realClass)
|| Date.class.isAssignableFrom(realClass)) {
while (rs.next()) {
list.add(rs.getObject(1));
}
} else {
IORMapper orm = query.orm().newInstance();
while (rs.next()) {
list.add(getResultObj(query,realClass, rs, object));
}
}
return list;
} else {
if (rs.next()) {
return getResultObj(query,clazz, rs, object);
}
}
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return null;
}
private Method getMethod(Object obj, String id) {
Method methodArray[]=obj.getClass().getInterfaces()[0].getMethods();
Query tempQuery;
for (Method m : methodArray) {
tempQuery = m.getAnnotation(Query.class);
if (tempQuery != null && tempQuery.id().equals(id)) {
try {
return obj.getClass().getMethod(m.getName(), m.getParameterTypes());
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
return null;
}
private Object invoteMethod(Object obj, Method m, Object params[]) {
try {
return m.invoke(obj, params);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
private Object getResultObj(Query query,Class clazz, ResultSet rs, Object object)
throws SQLException, InstantiationException, IllegalAccessException {
IORMapper orm = query.orm().newInstance();
Object obj = orm.orm(clazz, rs);
SubQuery subArray[] = query.subs();
for (SubQuery sub : subArray) {
Method m = getMethod(object, sub.queryId());
String sParamArray[] = sub.params();
Object paramArray[] = new Object[sParamArray.length];
for (int i = 0; i < sParamArray.length; i++) {
paramArray[i] = rs.getObject(sParamArray[i]);
}
Object subObj = invoteMethod(object, m, paramArray);
if (subObj != null) {
BeanMap objMap = BeanMap.create(obj);
objMap.put(sub.property(), subObj);
}
}
return obj;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -