管理系统

//user.Dao
public interface Dao<T> {

	public static final int INSERT=1; 
	public static final int UPDATE=2; 
	public static final int DELETE=3; 
	public static final int SELECT=4; 
	public static final int SELECTALL=5; 
	public int  add(T t);
	public int delete(Object id,Class<T> clzz);
	public int Update(T t);
	public T getByID(Object id,Class<T> clzz);

	public T getByParamter(Object[] fields,Object [] values,Class<T> clazz);
	
	public List<T> getAll(Class<T> clzz);
	
	public List<T> getForFild();
	
	public String getSql(int stype,T t);
	
}
public class DaoImp<T> implements Dao<T> {

	private Connection conn = null;
	private PreparedStatement stm = null;
	private ResultSet rs = null;
	private ResultSetMetaData rmd = null;

	// 反射出真正类;

	@Override
	public int add(T t) {

		String sql = getSql(1, t);
		conn = DBUtil.getConn();

		Field fields[] = t.getClass().getDeclaredFields();
		try {
			stm = conn.prepareStatement(sql);

			for (int i = 0; i < fields.length; ++i) {

				fields[i].setAccessible(true);

				PropertyDescriptor pro = new PropertyDescriptor(fields[i]
						.getName(), t.getClass());
				Object value = pro.getReadMethod().invoke(t);
				stm.setObject(i + 1, value);
			}

			return stm.executeUpdate();

		} catch (Exception e) {

			e.printStackTrace();
		} finally {

			DBUtil.close(conn, stm, rs);
		}


		return 0;

	}

	@Override
	public int Update(T t) {
		conn = DBUtil.getConn();
		String sql = getSql(UPDATE, t);
		Field fields[] = t.getClass().getDeclaredFields();
		try {

			stm = conn.prepareStatement(sql);
			for (int i = 0; i < fields.length; ++i) {

				fields[i].setAccessible(true);

				PropertyDescriptor pro = new PropertyDescriptor(fields[i]
						.getName(), t.getClass());
				Object value = pro.getReadMethod().invoke(t);

				stm.setObject(i+1, value);
				
				if (fields[i].getName().equals("id")) {
					stm.setObject(fields.length + 1, value);
				} else {
					stm.setObject(i + 1, value);
				}

			}

			return stm.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {

			DBUtil.close(conn, stm, rs);
		}

		return 0;
	}

	@Override
	public int delete(Object id, Class<T> clzz) {
		// delete from tableName where id=?
		
		try {
			String sql = getSql(DELETE, clzz.newInstance());
			conn = DBUtil.getConn();
			stm = conn.prepareStatement(sql);
			
			stm.setObject(1, id);
			return stm.executeUpdate();

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			DBUtil.close(conn, stm, rs);
		}
		return 0;
	}
	
	
	public T getByParamter(Object[] fields, Object[] values, Class<T> clazz) {
		
		try {
		conn = DBUtil.getConn();
		
		StringBuffer sql = new StringBuffer();
		sql.append("select * from ").append(getTableName(clazz.newInstance())).append(" where ");
		
		
		//select * from user where name=? and pass=? 
		for (int i = 0; i < fields.length; i++) {
			
			if(i!=fields.length-1)
			 sql.append(fields[i]).append("=? and ");
			
			else
			 sql.append(fields[i]).append("=? ");
		}
		
		
			T t=clazz.newInstance();
			
			stm=conn.prepareStatement(sql.toString());
			for (int i = 0; i < values.length; i++){
				stm.setObject(i+1, values[i]);
			}
			
			rs=stm.executeQuery();
			// 1.获取查询元数据
			ResultSetMetaData rmd = rs.getMetaData();
            while(rs.next())
            {
            	for (int i = 0; i < rmd.getColumnCount(); i++) 
            	{
            		Object value = rs.getObject(rmd.getColumnLabel(i + 1));
					// 4.获取查询字段名 对应到对象属性
					Field f = t.getClass().getDeclaredField(rmd.getColumnName(i + 1));
					// 5.设置编辑
					f.setAccessible(true);
					// 6.将查询的字段放入对象的属性值中
					f.set(t, value);
				}
            }
            
            return t;
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			DBUtil.close(conn, stm, rs);
		}
		
		return null;
	}

	@Override
	public T getByID(Object id,Class<T> clzz) {

		//select * from tname where id=?
		

		try {
			
			String sql=getSql(SELECT, clzz.newInstance());
			conn = DBUtil.getConn();
			stm=conn.prepareStatement(sql);
			stm.setObject(1, id);
			
			rs=stm.executeQuery();
			// 1.获取查询元数据
			ResultSetMetaData rmd = rs.getMetaData();
			T t=clzz.newInstance();
            while(rs.next())
            {
            	for (int i = 0; i < rmd.getColumnCount(); i++) 
            	{
            		Object value = rs.getObject(rmd.getColumnLabel(i + 1));
					// 4.获取查询字段名 对应到对象属性
					Field f = t.getClass().getDeclaredField(rmd.getColumnName(i + 1));
					// 5.设置编辑
					f.setAccessible(true);
					// 6.将查询的字段放入对象的属性值中
					f.set(t, value);
				}
            }
            
            return t;
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally{
			DBUtil.close(conn, stm, rs);
		}
		
		return null;
	}

	@Override
	public List<T> getAll(Class<T> clazz) {
        
		
		
		try {
			
			T t=clazz.newInstance();
			List<T> list=new ArrayList<T>();
			String sql=getSql(SELECTALL, t);
			conn = DBUtil.getConn();
           
			stm=conn.prepareStatement(sql);
			rs=stm.executeQuery();
			// 1.获取查询元数据
			ResultSetMetaData rmd = rs.getMetaData();
			
            while(rs.next())
            {
            	T tt=clazz.newInstance();
            	
            	for (int i = 0; i < rmd.getColumnCount(); i++) 
            	{
            		Object value = rs.getObject(rmd.getColumnLabel(i + 1));
					// 4.获取查询字段名 对应到对象属性
					Field f = tt.getClass().getDeclaredField(rmd.getColumnName(i + 1));
					// 5.设置编辑
					f.setAccessible(true);
					// 6.将查询的字段放入对象的属性值中
					f.set(tt, value);
				}
            	
            	list.add(tt);
            }
			
            return list;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			DBUtil.close(conn, stm, rs);
		}
		
		
		return null;
	}

	@Override
	public List<T> getForFild() {

		return null;
	}

	@Override
	public String getSql(int stype, T t) {
		// 存储Sql语句
		StringBuffer sql = new StringBuffer();
		Class<?> clazz = t.getClass();
		// 1.获取表明
		String tname = getTableName(t);
		// 2.拼接语句
		Field fields[] = t.getClass().getDeclaredFields();

		if (stype == INSERT)// insert into tableName (field1,) values(?,?)
		{

			sql.append("insert into ").append(tname).append("(");

			// 拼接字段
			for (int i = 0; i < fields.length; ++i) {

				if (i == fields.length - 1) {
					sql.append(fields[i].getName()).append(") values(");
				} else {
					sql.append(fields[i].getName() + ",");
				}

			}

			for (int i = 0; i < fields.length; ++i) {
				if (i == fields.length - 1) {
					sql.append("?)");
				} else {
					sql.append("?,");
				}

			}
			return sql.toString();
		} else if (stype == UPDATE) {// update tablenamn set nae=?, nae=? where
			// id=?

			sql.append("update ").append(tname).append(" set ");

			// 拼接字段
			for (int i = 0; i < fields.length; ++i) {

				if (i == fields.length - 1) {
					sql.append(fields[i].getName()).append("=? where id=?");
				} else {
					sql.append(fields[i].getName() + "=?,");
				}

			}
			return sql.toString();
		} else if (stype == DELETE) {
			// delete from tableName where id=?
			sql.append("delete from ").append(tname).append(" where id=?");
			return sql.toString();
		}else if(stype==SELECT){
			
			sql.append("select * from ").append(tname).append(" where id=?");
			return sql.toString();
			
		}else if(stype==SELECTALL){
			sql.append("select * from ").append(tname);
			return sql.toString();
		}
		return null;
	}

	public String getTableName(T t) {

		return t.getClass().getSimpleName().toLowerCase();
	}

}

package com.imau.student.dao;

/**
 * 
 * @author Administrator 1.0
 * 数据库工具类:主要实现数据库连接,关闭资源
 * Connection Statment Resultset ;20
 */

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class DBUtil {

	// 返回数据库连接。
	public static Connection getConn() {

		
		try {
			InputStream in=DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
			Properties pro=new Properties();
			pro.load(in);
			String driver=pro.getProperty("driver");
			String url=pro.getProperty("url");
			String user=pro.getProperty("user");
			String pass=pro.getProperty("password");
			//1.注册驱动
			Class.forName(driver);
			//2.获取连接
			return DriverManager.getConnection(url,user,pass);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			System.out.println("数据库驱动加载失败");
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("数据库连接失败");
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} 
		
		
		return null;
	}

	public static void close(Connection conn, Statement stm, ResultSet rs) {

		try {
			if (rs != null) {
				rs.close();
			}

			if (stm != null) {
				stm.close();
			}

			if (conn != null) {

				conn.close();
			}

		} catch (SQLException e) {
           e.printStackTrace();
			System.out.println("资源关闭失败");
		}

	}

	// 关闭资源的方法
	public static void close(Connection conn) {

		if (conn != null) {
			try {
				conn.close();

			} catch (SQLException e) {
				System.out.println("conn关闭失败");
			}
		}

	}

	public static void close(PreparedStatement stm) {

		if (stm != null) {
			try {
				stm.close();

			} catch (SQLException e) {
				System.out.println("conn关闭失败");
			}
		}

	}

	public static void close(ResultSet rs) {

		if (rs != null) {
			try {
				rs.close();

			} catch (SQLException e) {
				System.out.println("conn关闭失败");
			}
		}

	}

}
package com.imau.student.dao;

import java.lang.reflect.Field;
public class StudentDao extends DaoImp<Clerka>{

}
import com.imau.user.bean.User;

public class UserDaoImp extends DaoImp<User>  {

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三分天注定,七分靠打拼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值