package com.lgl.dao;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import com.lgl.util.DBUtil;
public class BaseDao<T> {
DBUtil db = new DBUtil();
ResultSet rs = null;
/**
* 添加
* @param t po包中的文件名
* @param className 类名(必须和表名一致)
* @param pk 主键
* @return 受影响的行数
*/
public int add(T t,String className,String pk){
//定义po类字符串反射调用路径
String classPath = "com.lgl.po."+className;
//定义SQL语句
String sql = "insert into "+ className + " (";
//定义问号
String wstr = "";
//定义数组存放有参构造方法中的参数
Object[] params = null;
try {
//通过字符串产生对象的类型
Class clazz = Class.forName(classPath);
//获取该对象的属性
Field[] fields = clazz.getDeclaredFields();
//得到属性个数(添加操作不用添加主键,参数个数-1)
params = new Object[fields.length-1];
//定义数组下标
int index = 0;
//遍历属性数组(除主键外,添加操作不用添加主键)
for(Field field:fields){
//判断并排除主键
if(!field.getName().toLowerCase().equals(pk.toLowerCase())){
sql += field.getName()+",";
wstr += "?,";
//设置参数
Method m = clazz.getDeclaredMethod("get"+field.getName().substring(0, 1).toUpperCase()+field.getName().substring(1), null);
//调用方法并传递参数
params[index] = m.invoke(t, null);
index++;
}
}
//截取掉逗号(上一SQL语句中字段名和问号结尾处都多出一个问号)
sql = sql.substring(0, sql.length()-1);
wstr = wstr.substring(0, wstr.length()-1);
sql += ") values ("+wstr+")";
//执行SQL语句
return db.execUpdate(sql, params);
}catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} 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 -1;
}
/**
* 删除
* @param className 类名(必须和表名一致)
* @param where 删除条件
* @return
*/
public int delete(String className,String where,Object[] params){
//定义SQL
String sql = "delete from "+className;
if(where != null || where != ""){
sql += " where "+where;
}
//执行SQL
return db.execUpdate(sql, params);
}
/**
* 修改
* @param t op包下的文件名
* @param className 类名(和表名一致)
* @param pk 主键
* @param where 修改条件
* @return
*/
public int update(T t,String className,String pk,String where){
//定义po类字符串反射调用路径
String classPath = "com.lgl.po."+className;
//定义SQL语句
String sql = "update "+className+" set ";//name='',sex='',age=1 where id=2
//定义?
String wstr = "";
//修改的数据
Object [] params = null;
try {
//通过字符串产生对象类型
Class clazz = Class.forName(classPath);
//获取类的属性
Field[] fields = clazz.getDeclaredFields();
//自增列判断
int fields_length = fields.length;
//设置参数个数
if(pk != null){
params = new Object[fields_length-1];
}else{
params = new Object[fields_length];
}
//开始下标
int index = 0;
//遍历属性数组
for(Field field:fields){
String get = field.getName();
if(get.toLowerCase().equals(pk.toLowerCase())){
continue;
}
//取得获取参数值的方法
Method m = clazz.getDeclaredMethod("get"+get.substring(0,1).toUpperCase()+get.substring(1), null);
sql += get+"=?,";
//调用方法取得值存入数组
params[index] = m.invoke(t, null);
//下标加1
index++;
}
//处理 ,号
sql = sql.substring(0,sql.length()-1);
if(where != null || where != ""){
//条件
sql += " where "+where;
}
//执行SQL语句
return db.execUpdate(sql, params);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} 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 -1;
}
/**
* 条件查询(有外键约束)
* @param className className 类名(必须和表名一致)
* @param where 查询条件
* @param params ?中的参数new Object[]{参数一,参数二,...}
* @return
*/
public ArrayList<T> queryByWhereFK(String className,String where,Object[] params){
ArrayList<T> list = new ArrayList<T>();
//构建SQL语句
String sql = "select * from "+className;
//条件判断
if(where != null && where!=""){
//条件
sql += " where "+where;
}
//执行SQL语句
rs = db.execQuery(sql, params);
try {
//定义po类字符串反射调用路径
String classPath = "com.lgl.po."+className;
//通过字符串产生对象类型
Class clazz = Class.forName(classPath);
//获取对象中的所有属性
Field[] fields = clazz.getDeclaredFields();
while(rs.next()){
//实例化该对象
Object obj = clazz.newInstance();
for(Field field:fields){
//得到每一个属性名
String getField = field.getName();
//获取属性类型
String type = field.getType().getName();
//判断
if(type.length() >= 11){
if(type.substring(0,11).equals("com.lgl.po.")){
//截取外键对象
String fkClassName = type.substring(11);
//获取外键对象字符串反射调用路径
String fkClassPath = type;
//截取外键
String fkName = field.toString().substring(field.toString().indexOf("po.")+3);
fkName = fkName.substring(fkName.indexOf("po.")+3);
fkName = fkName.substring(fkName.indexOf(".")+1);
//判断
if(field.toString().substring(0,7).equals("private")){
//查询外键中的数据
ResultSet rsFK = db.execQuery("select * from "+fkClassName+" where "+fkName+" = ?;", new Object[]{rs.getObject(getField)});
//判断是否查询到数据
if(rsFK.next()){
//根据字符串产生对象类型
Class fkClazz = Class.forName(fkClassPath);
//得到外键类中的所有属性
Field[] fkFields = fkClazz.getDeclaredFields();
//实例化该对象
Object fkObj = fkClazz.newInstance();
//遍历
for(Field fkField:fkFields){
//得到外键对象的每一个属性名
String fkGetField = fkField.getName();
//===========================================================================================================================================================================
//获取属性类型
String type1 = fkField.getType().getName();
//判断
if(type1.length() >= 11){
if(type1.substring(0,11)
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
英语考试系统(附源码和数据库) (194个子文件)
BaseDao.class 12KB
TestPaperServlet.class 11KB
StudentServlet.class 11KB
TeacherServlet.class 10KB
AnswerServlet.class 9KB
ClassServlet.class 9KB
TestQuestionServlet.class 8KB
TestPaperQuestionServlet.class 7KB
TestPaperStudentServlet.class 6KB
CodeServlet.class 3KB
TestQuestionInfo.class 3KB
DBUtil.class 3KB
StudentInfo.class 2KB
AnswerInfo.class 2KB
TestQuestionDao.class 2KB
TeacherInfo.class 2KB
ClassInfo.class 2KB
TestPaperStudentInfo.class 2KB
StudentDao.class 2KB
TestPaperQuestionInfo.class 2KB
ClassDao.class 2KB
TestPaperDao.class 1KB
TestPaperInfo.class 1KB
AnswerDao.class 1KB
TestPaperQuestionDao.class 1KB
TestPaperStudentDao.class 1KB
Test.class 986B
StageServlet.class 971B
StageInfo.class 963B
StuCountInfo.class 711B
TeacherDao.class 352B
StageDao.class 344B
.classpath 530B
bootstrap.min.css 118KB
bootstrap.min.css 118KB
jquery-ui.min.css 25KB
jquery-ui.min.css 25KB
test.css 5KB
Cooldog.css 3KB
main.css 3KB
iconfont.css 2KB
login.css 857B
login.css 857B
LookAnswerInfo.css 672B
index.css 668B
startExam.css 645B
index.css 557B
LookStuTestPaper.css 422B
LookStudentInfo.css 422B
LookTestPaper.css 422B
LookClassInfo.css 422B
LookQuestionInfo.css 422B
LookQuestionInfoByTpId.css 422B
LookStuTestPaper.css 422B
LookTeacherInfo.css 422B
updateStudent.css 380B
addClassInfo.css 380B
updateClassInfo.css 380B
updatePwdById.css 380B
PersonalInfo.css 380B
updateTeacher.css 380B
addTestQuestion.css 380B
updateStudent.css 380B
addTeacher.css 380B
updateTestQuestion.css 380B
addStudent.css 380B
addTestPaper.css 380B
updateTestPaper.css 380B
iframe.css 111B
mysql-connector-java-5.1.17-bin.jar 769KB
SmartUpload.jar 22KB
BaseDao.java 25KB
TeacherServlet.java 17KB
StudentServlet.java 17KB
TestPaperServlet.java 17KB
AnswerServlet.java 16KB
ClassServlet.java 15KB
TestQuestionServlet.java 13KB
TestPaperQuestionServlet.java 12KB
TestPaperStudentServlet.java 10KB
Test.java 6KB
DBUtil.java 3KB
CodeServlet.java 3KB
TestQuestionInfo.java 2KB
StudentInfo.java 1KB
AnswerInfo.java 1KB
TeacherInfo.java 1KB
TestPaperStudentInfo.java 1KB
TestPaperQuestionInfo.java 1KB
ClassInfo.java 1KB
TestPaperInfo.java 1KB
TestQuestionDao.java 1001B
TestPaperDao.java 814B
StageServlet.java 807B
StudentDao.java 724B
StageInfo.java 652B
ClassDao.java 642B
TestPaperStudentDao.java 444B
TestPaperQuestionDao.java 442B
AnswerDao.java 416B
共 194 条
- 1
- 2
资源评论
清雨♎
- 粉丝: 4
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功