//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> {
}
管理系统
最新推荐文章于 2023-02-27 16:44:31 发布