package com.ischoolbar.programmer.dao;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import com.ischoolbar.programmer.bean.Operator;
import com.ischoolbar.programmer.bean.Page;
import com.ischoolbar.programmer.bean.SearchProperty;
import com.ischoolbar.programmer.util.DbUtil;
import com.ischoolbar.programmer.util.StringUtil;
/**
* 数据库操作基础类
* @author llq
*利用泛型和反射机制来抽象数据库基本的增删该查操作
*/
public class BaseDao<T> {
public final int CURD_ADD = 1;
public final int CURD_DELETE = 2;
public final int CURD_UPDATE = 3;
public final int CURD_SELECT = 4;
public final int CURD_COUNT = 5;
public Connection con = new DbUtil().getConnection();
private Class<T> t;
/**
* 构造函数中明确传进来的参数对象
*/
@SuppressWarnings("unchecked")
public BaseDao(){
Type genericSuperclass = getClass().getGenericSuperclass();
if(genericSuperclass instanceof ParameterizedType){
Type[] actualTypeArguments = ((ParameterizedType)genericSuperclass).getActualTypeArguments();
if(actualTypeArguments.length > 0){
t = (Class<T>) actualTypeArguments[0];
}
}
}
/**
* 所有新增插入操作抽象封装
* @param t
* @return
*/
public boolean add(T t){
if(t== null)return false;
String buildSql = buildSql(CURD_ADD);
try {
PreparedStatement prepareStatement = con.prepareStatement(buildSql);
Field[] fields = t.getClass().getDeclaredFields();
for(int i=1; i < fields.length; i++){
fields[i].setAccessible(true);
prepareStatement.setObject(i, fields[i].get(t));
}
return prepareStatement.executeUpdate() > 0;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
/**
* 修改实体操作
* @param t
* @return
*/
public boolean update(T t){
String sql = buildSql(CURD_UPDATE);
try {
PreparedStatement prepareStatement = con.prepareStatement(sql);
Field[] declaredFields = this.t.getDeclaredFields();
for(int i = 1; i<declaredFields.length; i++){
declaredFields[i].setAccessible(true);
prepareStatement.setObject(i, declaredFields[i].get(t));
}
declaredFields[0].setAccessible(true);
prepareStatement.setObject(declaredFields.length, declaredFields[0].get(t));
return prepareStatement.executeUpdate() > 0;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
public boolean delete(String[] ids){
String sql = buildSql(CURD_DELETE) + StringUtils.join(ids, ",")+")";
try {
PreparedStatement prepareStatement = con.prepareStatement(sql);
return prepareStatement.executeUpdate() > 0;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
/**
* 抽象封装所有的分页查询列表操作
* @param page
* @return
*/
public Page<T> findList(Page<T> page){
String sql = buildSql(CURD_SELECT);
sql += buidSearchSql(page);
sql += " limit " + page.getOffset() + "," + page.getPageSize();
//System.out.println(sql);
try {
PreparedStatement prepareStatement = con.prepareStatement(sql);
prepareStatement = setParams(page, prepareStatement);
ResultSet executeQuery = prepareStatement.executeQuery();
List<T> conten = page.getConten();
while(executeQuery.next()){
T entity = t.newInstance();
Field[] declaredFields = t.getDeclaredFields();
for(Field field :declaredFields){
field.setAccessible(true);
field.set(entity, executeQuery.getObject(StringUtil.convertToUnderLine(field.getName())));
}
conten.add(entity);
}
page.setConten(conten);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
page.setTotal(getTotal(page));
return page;
}
/**
* 获取符合条件的所有记录数
* @param page
* @return
*/
public int getTotal(Page<T> page){
String sql = buildSql(CURD_COUNT);
sql += buidSearchSql(page);
try {
PreparedStatement prepareStatement = con.prepareStatement(sql);
prepareStatement = setParams(page, prepareStatement);
ResultSet executeQuery = prepareStatement.executeQuery();
if(executeQuery.next()){
return executeQuery.getInt("total");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
/**
* 获取所有类型的字段名称
* @param t
* @return
*/
private List<String> getFields(T t){
List<String> fieldsList = new ArrayList<String>();
Field[] declaredFields = t.getClass().getDeclaredFields();
for(Field field : declaredFields){
fieldsList.add(field.getName());
}
return fieldsList;
}
/**
* 给构造的查询链接赋值参数
* @param page
* @param prepareStatement
* @return
*/
private PreparedStatement setParams(Page<T> page,PreparedStatement prepareStatement){
List<SearchProperty> searchProperties = page.getSearchProperties();
int index = 1;
for(SearchProperty searchProperty : searchProperties){
try {
if(searchProperty.getOperator() != Operator.IN){
prepareStatement.setObject(index++, searchProperty.getValue());
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return prepareStatement;
}
/**
* 构造查询sql语句
* @param page
* @return
*/
private String buidSearchSql(Page<T> page){
String sql = "";
List<SearchProperty> searchProperties = page.getSearchProperties();
for(SearchProperty searchProperty : searchProperties){
switch(searchProperty.getOperator()){
case GT:{
sql += " and " + StringUtil.convertToUnderLine(searchProperty.getKey()) + " > ?";
break;
}
case GTE:{
sql += " and " + StringUtil.convertToUnderLine(searchProperty.getKey()) + " >= ?";
break;
}
case EQ:{
sql += " and " + StringUtil.convertToUnderLine(searchProperty.getKey()) + " = ?";
break;
}
case LT:{
sql += " and " + StringUtil.convertToUnderLine(searchProperty.getKey()) + " < ?";
break;
}
case LTE:{
sql += " and " + StringUtil.convertToUnderLine(searchProperty.getKey()) + " <= ?";
break;
}
case LIKE:{
sql += " and " + StringUtil.convertToUnderLine(searchProperty.getKey()) + " like ?";
break;
}
case NEQ:{
sql += " and " + StringUtil.convertToUnderLine(searchProperty.getKey()) + " <> ?";
break;
}
case IN:{
sql += " and " + StringUtil.convertToUnderLine(searchProperty.getKey()) + " in (" + searchProperty.getValue() + ") ";
break;
}
}
}
sql = sql.replaceFirst("and", "where");
System.out.println(sql);
return sql;
}
/**
* 构造一般查询语句
* @param type
* @return
*/
private String buildSql(int type) {
// TODO Auto-generated method stub
String sql = "";
switch (type) {
case CURD_ADD:{
String sql1 = "insert into " + StringUtil.convertToUnderLine(t.getSimpleName()) + "(";
Field[] declaredFields = t.getDeclaredFields();
for(Field field : declaredFields){
sql1 += StringUtil.convertToUnderLine(field.getName()) + ",";
}
sql1 = sql1.substring(0,sql1.length()-1) + ")";
String sql2 = " values(null,";
String[] params = new String[declaredFields.length-1];
Arrays.fill(params, "?");
sql2 += StringUtils.join(params, ",") + ")";
sql = sql1 + sql2;
break;
}
case CURD_SELECT:{
sql = "select * from " + StringUtil.convertToUnderLine(t.getSimpleName());
break;
}
case CURD_
没有合适的资源?快使用搜索试试~ 我知道了~
学生宿舍管理系统,JAVA语言,JSP + servlet + javabean
共290个文件
png:110个
css:40个
class:30个
需积分: 0 1 下载量 109 浏览量
2023-01-19
15:13:35
上传
评论 1
收藏 8.49MB ZIP 举报
温馨提示
目前好多学校还是宿舍管理人员手工记录数据,学生信息量大,人工纸质存档不仅麻烦而且不易查询容易丢失,效率也比较低。该系统方便学校管理宿舍学生,操作简单,更新信息方便,效率高,易查询。
资源推荐
资源详情
资源评论
收起资源包目录
学生宿舍管理系统,JAVA语言,JSP + servlet + javabean (290个子文件)
BaseDao.class 11KB
LiveServlet.class 9KB
DormitoryServlet.class 8KB
BuildingServlet.class 7KB
DormitoryManagerServlet.class 7KB
StudentServlet.class 7KB
CpachaUtil.class 7KB
AdminServlet.class 6KB
LoginServlet.class 5KB
CpachaServlet.class 3KB
Page.class 2KB
DormitoryDao.class 2KB
AdminDao.class 2KB
LoginFilter.class 2KB
SystemServlet.class 2KB
StringUtil.class 2KB
Dormitory.class 2KB
DbUtil.class 1KB
LiveDao.class 1KB
Operator.class 1KB
DormitoryManager.class 1KB
Student.class 1KB
SearchProperty.class 1KB
Admin.class 1KB
Building.class 1KB
Live.class 1KB
BaseConfig.class 787B
DormitoryManagerDao.class 478B
BuildingDao.class 446B
StudentDao.class 442B
.classpath 834B
org.eclipse.wst.common.component 509B
org.eclipse.wst.jsdt.ui.superType.container 49B
H-ui.css 139KB
H-ui.min.css 99KB
easyui.css 54KB
iconfont.css 12KB
icheck.css 12KB
tabs.css 9KB
datagrid.css 5KB
icon.css 4KB
linkbutton.css 4KB
color.css 4KB
calendar.css 4KB
tree.css 3KB
panel.css 3KB
default.css 2KB
menu.css 2KB
window.css 2KB
tooltip.css 2KB
menubutton.css 2KB
searchbox.css 2KB
datalist.css 2KB
textbox.css 2KB
H-ui.login.css 2KB
layout.css 2KB
slider.css 2KB
spinner.css 1KB
pagination.css 1KB
skin.css 1KB
combo.css 1KB
accordion.css 838B
messager.css 804B
propertygrid.css 716B
progressbar.css 653B
datebox.css 619B
dialog.css 560B
combobox.css 396B
filebox.css 306B
demo.css 306B
splitbutton.css 293B
numberbox.css 128B
validatebox.css 94B
Thumbs.db 56KB
Thumbs.db 18KB
Thumbs.db 13KB
Thumbs.db 4KB
iconfont.eot 92KB
loading.gif 8KB
loading_072.gif 4KB
loading.gif 2KB
hamburger-retina.gif 1KB
hamburger.gif 1KB
us.gif 367B
cn.gif 366B
blank.gif 43B
blank.gif 43B
demo.html 43KB
favicon.ico 1KB
poi-3.8-20120326.jar 1.74MB
poi-scratchpad-3.8-20120326.jar 1.13MB
poi-ooxml-3.8-20120326.jar 911KB
mysql-connector-java-5.1.7-bin.jar 693KB
c3p0-0.9.1.2.jar 596KB
commons-collections-3.2.1.jar 562KB
standard.jar 384KB
fastjson-1.1.34.jar 349KB
morph-1.1.1.jar 286KB
commons-lang-2.5.jar 273KB
commons-beanutils-1.8.3.jar 227KB
共 290 条
- 1
- 2
- 3
资源评论
墨家前任巨子
- 粉丝: 30
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (matlab源码)基于Elman神经网络的电力负荷预测模型MATLAB实现
- 微信小程序源码 趣味互动机器人 - 机器人兔兔下载
- 2022年全国各区县年平均气温
- 05-16 周四 vscode 搭建远程调试环境
- (matlab源码)基于SOM神经网络的柴油机故障诊断MATLAB实现
- 1950-2022年全国各省份逐年平均降水数据
- (matlan源码)粒子群算法的寻优算法MATLAB实现
- MTB095N10KRN3-VB一款SOT23封装N-Channel场效应MOS管
- (MATLAB源码)灰色神经网络对订单需求预测分析与MATLAB实现 (2)
- (matlab源码)基于BP-Adaboost的强分类器设计与MATLAB实现
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功