用反射写出通用SqlDao的增删改查

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

查询通用Dao

public static List<Object> queryall(Object o) throws Exception{
		List<Object> lp=new ArrayList<Object>();
		Connection conn = BaseDao.getcon();
		Class c=o.getClass();
		Field[] f1 = c.getDeclaredFields();
		StringBuffer sb=new StringBuffer();
		sb.append("select * from "+c.getSimpleName());
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			pstmt = conn.prepareStatement(sb.toString());
			rs = pstmt.executeQuery();
			ResultSetMetaData metaData = rs.getMetaData();
			int count = metaData.getColumnCount();
			while(rs.next()){
				Object obj = cs.newInstance();
				for(int i=0;i<f1.length;i++) {
					for(int j=0;j<count;j++) {
						String lm = metaData.getColumnName(j+1);
		if(f1[i].getName().toUpperCase().equals(lm.toUpperCase())) {
							f1[i].setAccessible(true);
							f1[i].set(obj, rs.getObject(lm));
						}
						
					}
				}
				
				lp.add(obj);
			}
			}catch (SQLException e) {
				e.printStackTrace();
			}
		return lp;
	}

增加通用Dao

public static int insert(Object obj){
		int count=0;
		Connection con = BaseDao.getcon();
		Class c=obj.getClass();
		Field[] f1 = c.getDeclaredFields();
		Method[] m1=c.getDeclaredMethods();
		StringBuffer sb=new StringBuffer();
		sb.append("insert into "+c.getSimpleName()+"(");
		for(int i=1;i<f1.length;i++) {
			if(i<f1.length-1) {
				sb.append(f1[i].getName()+", ");
			}else {
				sb.append(f1[i].getName());
			}
		}
		sb.append(") values(");
		for(int i=1;i<f1.length;i++) {
			if(i<f1.length-1) {
				sb.append("?,");
			}else {
				sb.append("?)");
			}
		}
		Field.setAccessible(f1, true);
		
		PreparedStatement stm=null;
		
		try {
			stm=con.prepareStatement(sb.toString());
			for(int i=0;i<f1.length;i++) {
				if(i<f1.length-1) {
				stm.setObject(i+1, f1[i+1].get(obj));
				}else {
				}
			}
			count=stm.executeUpdate();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			BaseDao.closeall(null, stm, con);
		}
		return count;
	} 

删除通用Dao

public static int del(Object obj) throws Exception{
		int count=0;
		Connection con = BaseDao.getcon();
		Class c=obj.getClass();
		Field[] f1 = c.getDeclaredFields();
		Field.setAccessible(f1, true);
		StringBuffer sb=new StringBuffer();
		String sql="delete from "+c.getSimpleName()+" where "+f1[0].getName()+"=?";
		PreparedStatement stm=null;
		try {
			stm=con.prepareStatement(sql);
			stm.setObject(1, f1[0].get(obj));
			count=stm.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			BaseDao.closeall(null, stm, con);
		}
		return count;
	}

修改通用Dao

	public static int update(Object obj) throws Exception{
		int count=0;
		Connection con = BaseDao.getcon();
		PreparedStatement stm=null;
		Class c=obj.getClass();
		Field[] f1 = c.getDeclaredFields();
		StringBuffer sb=new StringBuffer();
		sb.append("update "+c.getSimpleName()+" set ");
		for(int i=1;i<f1.length;i++) {
			if(i<f1.length-1) {
				sb.append(f1[i].getName()+"=?, ");
			}else {
				sb.append(f1[i].getName()+"=?");
			}
		}
		sb.append(" where "+f1[0].getName()+"=?");
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			stm=con.prepareStatement(sb.toString());
			System.out.println(sb);
				for(int i=0;i<f1.length;i++) {
					f1[i].setAccessible(true);
					if(i<f1.length-1) {
						System.out.println(i+1);
						f1[i+1].setAccessible(true);
						stm.setObject(i+1, f1[i+1].get(obj));
					}else {
						stm.setObject(i+1, f1[0].get(obj));
					}
		}
			count=stm.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			BaseDao.closeall(null, stm, con);
		}
		return count;
	} 
	```

猜你喜欢

转载自blog.csdn.net/D1206/article/details/94750970
今日推荐