模板泛型的常见应用

来源:互联网 发布:wp8怎么下载软件 编辑:程序博客网 时间:2024/05/22 17:31

帮同学写东西,没必要j2ee,直接用的servlet,但是写着写着又到那边去了,实现dao的时候写了个GenericDao<T>,任何一个pojoDao继承了都能实现增删查改。

1. 使用T继续做泛型模板。List<T>。

2. 使用T做参数类型 T entity。

3. 使用T得到其Class类,用于进行包括创建该类和描述该类的各种活动。

4. 使用Class可以得到T的所有属性和方法。

5. 通过属性可以得到特定的方法。

6.通过属性和类型可以得到带参数的方法。

package com.kiln.dao;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.List;import net.sf.json.JSONArray;import net.sf.json.JSONObject;import com.kiln.common.DBManager;public abstract class GenericDao<T> {Class clazz;public GenericDao() {clazz = getGenericType();}public T jsonToObject(String str){JSONObject jsonObject = JSONObject.fromObject(str);T obj = (T)JSONObject.toBean(jsonObject,clazz);return obj;}public String toJson(List<T> list){return JSONArray.fromObject(list).toString();}public String toJson(T obj){return JSONObject.fromObject(obj).toString();}protected ResultSet executeQuery(String sql){Statement stt = connectDB();if (stt == null)return null;System.out.println(sql);ResultSet rs = null;try {rs = stt.executeQuery(sql);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return rs;}protected boolean executeUpdate(String sql){boolean res=true;Statement stt = connectDB();if (stt == null)return false;System.out.println(sql);try{stt.executeUpdate(sql);}catch(SQLException e){e.printStackTrace();res=false;}try {stt.close();} catch (SQLException e) {e.printStackTrace();}return res;}protected Class getGenericType() {Type genType = getClass().getGenericSuperclass();if (!(genType instanceof ParameterizedType)) {return Object.class;}Type[] params = ((ParameterizedType) genType).getActualTypeArguments();if (!(params[0] instanceof Class)) {return Object.class;}return (Class) params[0];}protected Statement connectDB() {Connection conn = null;try {conn = DBManager.getInstance().getConnection("mysql");} catch (SQLException e) {e.printStackTrace();return null;}Statement stt = null;try {stt = conn.createStatement();} catch (SQLException e) {e.printStackTrace();}return stt;}public boolean insert(T object) {StringBuffer sql = new StringBuffer("insert into ");sql.append(clazz.getSimpleName().toLowerCase());Field[] fields = clazz.getDeclaredFields();sql.append("(");for (int i = 0; i < fields.length; i++) {sql.append(fields[i].getName());if (i != fields.length - 1)sql.append(",");}sql.append(") values(");String st = null;Method mt = null;try {for (int i = 0; i < fields.length; i++) {st = fields[i].getName();mt = clazz.getMethod("get" + st.substring(0, 1).toUpperCase()+ st.substring(1, st.length()));Object tmp = mt.invoke(object);if (tmp == null)st = "null";elsest = "'" + tmp.toString() + "'";sql.append(st);if (i != fields.length - 1)sql.append(",");}} catch (Exception e) {e.printStackTrace();System.out.println("��ȡ���Գ���:" + st);}sql.append(");");return executeUpdate(sql.toString());}public boolean update(T object) {String st = null;Method mt = null;StringBuffer sql = new StringBuffer("update ");sql.append(clazz.getSimpleName().toLowerCase());Field[] fields = clazz.getDeclaredFields();sql.append(" set ");try {for (int i = 0; i < fields.length; i++) {st = fields[i].getName();if(st.equals("id"))continue;sql.append(st);sql.append("=");mt = clazz.getMethod("get" + st.substring(0, 1).toUpperCase()+ st.substring(1, st.length()));Object tmp = mt.invoke(object);if (tmp == null)st = "null";elsest = "'" + tmp.toString() + "'";sql.append(st);if (i != fields.length - 1)sql.append(",");}} catch (Exception e) {e.printStackTrace();System.out.println("can't read attribute:" + st);return false;}try {mt = clazz.getMethod("getId");sql.append(" where id='"+mt.invoke(object)+"'");} catch (Exception e1) {e1.printStackTrace();return false;}sql.append(";");return executeUpdate(sql.toString());}public boolean delete(int id){StringBuffer sql = new StringBuffer("delete from ");sql.append(clazz.getSimpleName().toLowerCase());sql.append(" where id='"+id+"'");System.out.println(sql.toString());return executeUpdate(sql.toString());}public T getById(int id){StringBuffer sql = new StringBuffer("select * from ");sql.append(clazz.getSimpleName().toLowerCase());sql.append(" where id='"+id+"'");System.out.println(sql.toString());ResultSet rs = executeQuery(sql.toString());if(rs==null)return null;try {while(rs.next()){T object = (T)clazz.newInstance();Field[] fields = clazz.getDeclaredFields();Method mt = null;String st = null;for(int i=0;i<fields.length;i++){st = fields[i].getName();mt = clazz.getMethod("set"+ st.substring(0, 1).toUpperCase()+ st.substring(1, st.length()),fields[i].getType());mt.invoke(object, rs.getObject(st));}rs.close();return object;}} catch (Exception e) {e.printStackTrace();}return null;}public List<T> getAll(){StringBuffer sb = new StringBuffer("select * from ");sb.append(clazz.getSimpleName().toLowerCase());ResultSet rs = this.executeQuery(sb.toString());List<T> list = new ArrayList<T>();if(rs==null)return list;try{Field[] fields = clazz.getDeclaredFields();T t;Method mt;String st;while(rs.next()){t = (T)clazz.newInstance();for(int i=0;i<fields.length;i++){st = fields[i].getName();mt = clazz.getMethod("set"+ st.substring(0, 1).toUpperCase()+ st.substring(1, st.length()),fields[i].getType());mt.invoke(t,rs.getObject(st));}list.add(t);}}catch(Exception e){e.printStackTrace();}return list;}}


原创粉丝点击