⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 querycontroller.java

📁 使用annotation封装的jdbc
💻 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 + -