package com.coder.dao.impl;
import com.coder.util.DBUtil;
import com.coder.util.dao.IdType;
import com.coder.util.dao.TableId;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.lang.reflect.*;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
/**
* @Author: J
* @Date: 2023/09/25
* @Description:
*/
public class BaseDao<T> {
private Class<T> persistentClass ;
private static final QueryRunner RUNNER = new QueryRunner(DBUtil.getDataSource());
/**
* @description: BaseDao构造方法
* @param
* @return:
* @date: 2023/8/3
*/
public BaseDao() {
//Class表示此对象的运行时类的对象;
//如果超类是参数化类型, Type 则返回的对象必须准确反映源代码中使用的实际类型参数。
Type type = this.getClass().getGenericSuperclass();
//参数化类型是在反射方法首次需要时创建的
if (type instanceof ParameterizedType) {
//返回一个对象数组 Type ,这些对象表示此类型的实际类型参数
persistentClass = (Class<T>) ((ParameterizedType) type).getActualTypeArguments()[0];
}
}
/**
* @description: 使用QueryRunner.query输入完整sql查询语句查询数据库对应列表
* @param: 完整sql查询语句
* @return: List<T>完整列表
* @date: 2023/9/25
*/
public List<T> selectList(String sql) throws SQLException {
QueryRunner runner = getRUNNER();
Class<?> aClass = getObjectClass();
return runner.query(sql, new BeanListHandler<T>((Class<? extends T>) aClass));
}
/**
* @description: 向数据库插入数据
* @param: 完整sql查询语句
* @return: List<T>完整列表
* @date: 2023/9/25
*/
/* public boolean save(T entity) throws SQLException {
Class<?> aClass = getObjectClass();
//通过实例反射获取表名
String tableName = getTableName(aClass);
//获取所有字段
//Declared公共、受保护、默认(包)访问和私有字段,但不包括继承的字段
Field[] fields = aClass.getDeclaredFields();
//获取属性个数,values存放获得的属性值
Object[] values = new Object[fields.length];
IdType idType = null;
//循环遍历所有字段
int index = 0;
for (Field field : fields) {
//应禁止检查 Java 语言访问控制
field.setAccessible(true);
//获取注解
TableId annotation = field.getAnnotation(TableId.class);
//获取id生成方式(注解的值)(判断该属性是否在表中)
if ( annotation.exists()==false) {
continue;
}
//获取当前实体类对象的注解生成方式
TableId anno = field.getAnnotation(TableId.class);
//判断id注解是否存在并获取注解内容
if (anno != null) {
//获取id生成方式(注解的值)
idType = annotation.value();
continue;
}
try {
//获取属性的值,并存入一个Object数组中
values[++index] = field.get(entity);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
//index表示真实属性的数量
values = Arrays.copyOf(values, index);
//?占位
char[] chars = new char[index];
Arrays.fill(chars, '?');
return getRUNNER().update(sql,)
}*/
//-----------类中工具---------------
/**
* @description: 获取传入对象的表名、属性、属性值
* @param : T entity:具体实例对象
* @return: Object[] 表名、字段名、属性值([0]为null)、id生成方式
* @date: 2023/9/26
*/
public Object[] getEntityAttribute(T entity){
Class<?> aClass = getObjectClass();
Object[] entityAttribute = new Object[4];
entityAttribute[0] = getTableName(aClass);
//Declared公共、受保护、默认(包)访问和私有字段,但不包括继承的字段
Field[] fields = aClass.getDeclaredFields();
//获取属性个数,values存放获得的属性值
Object[] values = new Object[fields.length];
//属性名称
List<String> f = new ArrayList<>();
IdType idType = null;
//循环遍历所有字段
int index = 0;
for (Field field : fields) {
//应禁止检查 Java 语言访问控制
field.setAccessible(true);
//获取注解
TableId annotation = field.getAnnotation(TableId.class);
//获取id生成方式(注解的值)(判断该属性是否在表中)
if ( annotation.exists()==false) {
continue;
}
//拼sql列表名称
f.add(field.getName().toLowerCase(Locale.ROOT));
//获取当前实体类对象的注解生成方式
TableId anno = field.getAnnotation(TableId.class);
//判断id注解是否存在并获取注解内容
if (anno != null) {
//获取id生成方式(注解的值)
idType = annotation.value();
continue;
}
try {
//获取属性的值,并存入一个Object数组中
values[++index] = field.get(entity);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
entityAttribute[1] = f;
entityAttribute[2] = Arrays.copyOf(values, index);
entityAttribute[3] = idType;
//index表示真实属性的数量
return entityAttribute;
}
/**
* @description: 获取表名
* @param aClass 通过反射获取的类
* @return: String tableName
* @date: 2023/9/26
*/
private String getTableName(Class<?> aClass){
//通过实例反射获取表名
//Locale.ROOT根区域设置的有用常量。
return aClass.getSimpleName().toLowerCase(Locale.ROOT);
}
/**
* @description: 获取表名
* @param
* @return: String tableName
* @date: 2023/9/26
*/
public String getTableName(){
Class<?> aClass = getObjectClass();
//通过实例反射获取表名
//Locale.ROOT根区域设置的有用常量。
return aClass.getSimpleName().toLowerCase(Locale.ROOT);
}
/**
* @description: 获取表中所有字段名
* @param aClass 通过反射获取的类
* @return: List<String> fieldNames
* @date: 2023/9/26
*/
private List<String> getFieldNames(Class<?> aClass){
//获取所有字段
//Declared公共、受保护、默认(包)访问和私有字段,但不包括继承的字段
Field[] fields = aClass.getDeclaredFields();
//属性名称
List<String> f = new ArrayList<>();
//循环遍历所有字段
for (Field field : fields) {
//应禁止检查 Java 语言访问控制
field.setAccessible(true);
//获取注解
TableId annotation = field.getAnnotation(TableId.class);
//获取id生成方式(注解的值)
if ( annotation.exists()==false) {
continue;
}
//拼sql列表名称
f.add(field.getName().toLowerCase(Locale.ROOT));
}
return f;
}
/**
* @description: 获取传入
没有合适的资源?快使用搜索试试~ 我知道了~
ssm+MySQL酒店管理系统
共200个文件
class:56个
java:45个
jsp:26个
需积分: 0 0 下载量 193 浏览量
2023-10-18
21:33:07
上传
评论
收藏 4.02MB 7Z 举报
温馨提示
ssm+MySQL酒店管理 近几年随着社会的发展,各地旅客数量不断增加,酒店数量也随之增加,导致酒店客房的管理方面的各种信息量也在不断成倍增长,因此,传统的酒店信息管理方式暴露出越来越多的问题,耗费人力,效率低下。这时,酒店就急需各种各样能使酒店工作人员对庞大的信息量进行更快更方便更准确进行管理的系统。该系统采取面对对象的开发模式进行软件的开发和硬体的架设,采取Mysql作为后台数据的主要存储单元,采用SSM框架、Java技术、Ajax技术进行业务系统的编码及其开发,实现了本系统的全部功能。前端部分采用B/S模式;后端部分使用正则表达式在页面对查询单号的格式进行验证,提高效率。 项目职责: 需求分析设计,项目搭建开发环境,主要开发模块:注册用户,用户管理、酒店客房、客房预订、菜品分类、酒店菜品、菜品点餐、财务管理。采取Mysql作为后台数据的主要存储单元,采用SSM框架、Java技术、Ajax技术进行业务系统的编码及其开发,实现了本系统的全部功能。 项目成果: 该系统实现了前台用户根据自己的需求进行注册登录,浏览客房信息并对需要的客房进行预订操作。
资源推荐
资源详情
资源评论
收起资源包目录
ssm+MySQL酒店管理系统 (200个子文件)
BaseDao.class 7KB
BaseDao.class 7KB
AdminServlet.class 5KB
AdminServlet.class 5KB
RoomTypeServlet.class 4KB
RoomTypeServlet.class 4KB
AdminDaoImpl.class 4KB
AdminDaoImpl.class 4KB
GoodsTypeServlet.class 3KB
GoodsTypeServlet.class 3KB
RoomTypeImp.class 3KB
RoomTypeImp.class 3KB
GoodsTypeDaoImpl.class 3KB
GoodsTypeDaoImpl.class 3KB
RoomType.class 3KB
RoomType.class 3KB
BaseServlet.class 3KB
BaseServlet.class 3KB
DBUtil.class 2KB
DBUtil.class 2KB
HeadServlet.class 2KB
HeadServlet.class 2KB
GoodsType.class 2KB
GoodsType.class 2KB
AdminServiceImpl.class 2KB
AdminServiceImpl.class 2KB
Md5Util.class 2KB
Md5Util.class 2KB
GoodsTypeServiceImpl.class 1KB
GoodsTypeServiceImpl.class 1KB
RoomTypeServiceImpl.class 1KB
RoomTypeServiceImpl.class 1KB
Test.class 1KB
Test.class 1KB
Admin.class 1KB
Admin.class 1KB
IdType.class 1016B
IdType.class 1016B
DateUtil.class 772B
DateUtil.class 772B
RoomTypeDao.class 699B
RoomTypeDao.class 699B
AdminDao.class 541B
AdminDao.class 541B
TableId.class 540B
TableId.class 540B
AdminService.class 538B
AdminService.class 538B
Main.class 516B
Main.class 516B
RoomTypeServiceDao.class 468B
RoomTypeServiceDao.class 468B
GoodsTypeService.class 467B
GoodsTypeService.class 467B
GoodsTypeDao.class 462B
GoodsTypeDao.class 462B
bootstrap.min.css 119KB
bootstrap.min.css 119KB
login.css 1KB
login.css 1KB
index.css 1KB
index.css 1KB
web.css 104B
web.css 104B
.gitignore 344B
.gitignore 190B
room_type_save.html 2KB
room_type_save.html 2KB
JavaWeb_HotelManagement.iml 1KB
mysql-connector-java-8.0.30.jar 2.4MB
mysql-connector-java-8.0.30.jar 2.4MB
commons-collections-3.2.2.jar 575KB
commons-collections-3.2.2.jar 575KB
standard-1.1.2.jar 384KB
standard-1.1.2.jar 384KB
commons-beanutils-1.9.3.jar 240KB
commons-beanutils-1.9.3.jar 240KB
junit-4.8.jar 231KB
junit-4.8.jar 231KB
HikariCP-5.0.1.jar 158KB
HikariCP-5.0.1.jar 158KB
commons-dbutils-1.7.jar 95KB
commons-dbutils-1.7.jar 95KB
slf4j-api-2.0.6.jar 61KB
slf4j-api-2.0.6.jar 61KB
commons-logging-1.2.jar 60KB
commons-logging-1.2.jar 60KB
BaseDao.java 11KB
AdminServlet.java 5KB
RoomInfoServlet.java 5KB
RoomTypeServlet.java 3KB
AdminDaoImpl.java 3KB
MemberLevelServlet.java 3KB
GoodsTypeServlet.java 3KB
MemberLevelDaoImpl.java 2KB
RoomTypeImp.java 2KB
RoomInfo.java 2KB
GoodsTypeDaoImpl.java 2KB
PermissionFilter.java 2KB
RoomType.java 2KB
共 200 条
- 1
- 2
资源评论
不就是几行代码吗!!!
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功