diff --git a/CommonDao.java b/CommonDao.java new file mode 100644 index 0000000..4231583 --- /dev/null +++ b/CommonDao.java @@ -0,0 +1,89 @@ +// 声明当前文件所在的包路径为com.dao,表示这是一个数据访问层(Dao)的类 +package com.dao; + +// 导入java.util.List类,用于处理有序集合数据 +import java.util.List; +// 导入java.util.Map类,用于处理键值对映射数据 +import java.util.Map; + + //通用接口 + //提供各种数据查询和统计方法的接口定义,包括饼图、柱状图等的数据求和与计数。 + +public interface CommonDao{ + + + //获取饼图数据的求和结果 + //@param params 查询参数 + // @return 包含求和结果的列表 + + List> pieSum(Map params); + + + //获取饼图数据的计数结果 + // @param params 查询参数 + // @return 包含计数结果的列表 + + List> pieCount(Map params); + + + //获取单组柱状图数据的求和结果 + //@param params 查询参数 + // @return 包含求和结果的列表 + + List> barSumOne(Map params); + + + //获取单组柱状图数据的计数结果 + //@param params 查询参数 + // @return 包含计数结果的列表 + + List >barCountOne(Map params); + + + //获取双组柱状图数据的求和结果 + //@param params 查询参数 + // @return 包含求和结果的列表 + + List> barSumTwo(Map params); + + //获取双组柱状图数据的计数结果 + //@param params 查询参数 + // @return 包含计数结果的列表 + + List> barCountTwo(Map params); + + + //查询评分信息 + // @param params 查询参数 + // @return 包含评分信息的Map + + Map queryScore(Map params); + + + // 新的级联字典表的分组求和方法 + //@param params 查询参数 + // @return 包含分组求和结果的列表 + + List> newSelectGroupSum(Map params); + + + // 新的级联字典表的分组条数统计方法 + //@param params 查询参数 + // @return 包含分组条数统计结果的列表 + + List> newSelectGroupCount(Map params); + + + //获取柱状图数据的求和结果 + //@param params 查询参数 + // @return 包含求和结果的列表 + + List> barSum(Map params); + + + //获取柱状图数据的计数结果 + //@param params 查询参数 + // @return 包含计数结果的列表 + + List> barCount(Map params); +} diff --git a/ConfigDao.java b/ConfigDao.java new file mode 100644 index 0000000..83fcf0e --- /dev/null +++ b/ConfigDao.java @@ -0,0 +1,16 @@ + +// 声明当前文件所在的包路径,表示该文件位于com.dao包下 +package com.dao; + +// 导入MyBatis Plus框架中的BaseMapper接口 +// BaseMapper是MyBatis Plus提供的核心接口,包含基本的CRUD操作方法 +import com.baomidou.mybatisplus.mapper.BaseMapper; + +// 导入自定义的ConfigEntity实体类 +// ConfigEntity通常对应数据库中的配置表,用于存储配置信息 +import com.entity.ConfigEntity; + + //配置数据访问对象接口,用于对配置相关的数据库操作 +public interface ConfigDao extends BaseMapper { + // 继承自MyBatis-Plus的BaseMapper,无需额外编写基本的CRUD方法 +} diff --git a/ConfigEntity.java b/ConfigEntity.java new file mode 100644 index 0000000..97a4cd6 --- /dev/null +++ b/ConfigEntity.java @@ -0,0 +1,61 @@ +package com.entity; + +import java.io.Serializable; // Java序列化支持 +import com.baomidou.mybatisplus.annotations.TableId; // 主键注解 +import com.baomidou.mybatisplus.annotations.TableName; // 表名注解 +import com.baomidou.mybatisplus.enums.IdType; // ID类型枚举 +@TableName("config") +public class ConfigEntity implements Serializable { + + // 序列化版本UID,保证序列化兼容性 + private static final long serialVersionUID = 1L; + + // 主键ID(自增) + // 使用MyBatis-Plus的数据库ID自增策略 + @TableId(type = IdType.AUTO) + private Long id; + + // 配置项名称(唯一标识) + // 存储配置的键名称,具有唯一性约束 + private String name; + + // 配置项值 + // 存储与配置名称对应的具体配置值 + private String value; + + // 获取主键ID + // @return 主键ID + public Long getId() { + return id; + } + + // 设置主键ID + // @param id 主键ID + public void setId(Long id) { + this.id = id; + } + + // 获取配置项名称 + // @return 配置项名称 + public String getName() { + return name; + } + + // 设置配置项名称 + // @param name 配置项名称 + public void setName(String name) { + this.name = name; + } + + // 获取配置项值 + // @return 配置项值 + public String getValue() { + return value; + } + + // 设置配置项值 + // @param value 配置项值 + public void setValue(String value) { + this.value = value; + } +} \ No newline at end of file diff --git a/DictionaryDao.java b/DictionaryDao.java new file mode 100644 index 0000000..88b8fc1 --- /dev/null +++ b/DictionaryDao.java @@ -0,0 +1,36 @@ +// 声明当前文件所在的包路径,表示该接口位于com.dao包下 +package com.dao; + +// 导入字典实体类,用于操作数据库中的字典表 +import com.entity.DictionaryEntity; +// 导入MyBatis Plus的基础Mapper接口,提供基本的CRUD操作 +import com.baomidou.mybatisplus.mapper.BaseMapper; +// 导入Java的List集合类,用于返回多个结果的集合 +import java.util.List; +// 导入Java的Map集合类,用于传递键值对参数 +import java.util.Map; +// 导入MyBatis Plus的分页插件类,用于实现分页查询功能 +import com.baomidou.mybatisplus.plugins.pagination.Pagination; + +// 导入MyBatis的Param注解,用于给Mapper接口的参数命名 +import org.apache.ibatis.annotations.Param; +// 导入字典视图类,用于返回自定义的视图对象 +import com.entity.view.DictionaryView; + + + //字典 Dao 接口 + //该接口继承自MyBatis Plus的BaseMapper,提供对字典表的基本操作 + //并定义了自定义的查询方法 + // @author + +public interface DictionaryDao extends BaseMapper { + + + //分页查询字典数据 + // @param page 分页参数对象,包含当前页、每页数量等信息 + //@param params 查询条件参数Map,可以包含各种查询条件 + // @return 返回字典视图对象的列表,包含查询结果数据 + + List selectListView(Pagination page,@Param("params")Map params); + +} diff --git a/DictionaryEntity.java b/DictionaryEntity.java new file mode 100644 index 0000000..a4826d7 --- /dev/null +++ b/DictionaryEntity.java @@ -0,0 +1,239 @@ +package com.entity; + +import com.annotation.ColumnInfo; +import javax.validation.constraints.*; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import java.lang.reflect.InvocationTargetException; +import java.io.Serializable; +import java.util.*; +import org.apache.tools.ant.util.DateUtils; +import org.springframework.format.annotation.DateTimeFormat; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.beanutils.BeanUtils; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import com.baomidou.mybatisplus.enums.FieldFill; +import com.utils.DateUtil; + + +/** + * 字典 + * + * @author + * @email + */ +@TableName("dictionary") +public class DictionaryEntity implements Serializable { + private static final long serialVersionUID = 1L; + + + public DictionaryEntity() { + + } + + public DictionaryEntity(T t) { + try { + BeanUtils.copyProperties(this, t); + } catch (IllegalAccessException | InvocationTargetException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + + /** + * 主键 + */ + @TableId(type = IdType.AUTO) + @ColumnInfo(comment="主键",type="bigint(20)") + @TableField(value = "id") + + private Long id; + + + /** + * 字段 + */ + @ColumnInfo(comment="字段",type="varchar(200)") + @TableField(value = "dic_code") + + private String dicCode; + + + /** + * 字段名 + */ + @ColumnInfo(comment="字段名",type="varchar(200)") + @TableField(value = "dic_name") + + private String dicName; + + + /** + * 编码 + */ + @ColumnInfo(comment="编码",type="int(11)") + @TableField(value = "code_index") + + private Integer codeIndex; + + + /** + * 编码名字 + */ + @ColumnInfo(comment="编码名字",type="varchar(200)") + @TableField(value = "index_name") + + private String indexName; + + + /** + * 父字段id + */ + @ColumnInfo(comment="父字段id",type="int(11)") + @TableField(value = "super_id") + + private Integer superId; + + + /** + * 备注 + */ + @ColumnInfo(comment="备注",type="varchar(200)") + @TableField(value = "beizhu") + + private String beizhu; + + + /** + * 创建时间 + */ + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @ColumnInfo(comment="创建时间",type="timestamp") + @TableField(value = "create_time",fill = FieldFill.INSERT) + + private Date createTime; + + + /** + * 获取:主键 + */ + public Long getId() { + return id; + } + /** + * 设置:主键 + */ + + public void setId(Long id) { + this.id = id; + } + /** + * 获取:字段 + */ + public String getDicCode() { + return dicCode; + } + /** + * 设置:字段 + */ + + public void setDicCode(String dicCode) { + this.dicCode = dicCode; + } + /** + * 获取:字段名 + */ + public String getDicName() { + return dicName; + } + /** + * 设置:字段名 + */ + + public void setDicName(String dicName) { + this.dicName = dicName; + } + /** + * 获取:编码 + */ + public Integer getCodeIndex() { + return codeIndex; + } + /** + * 设置:编码 + */ + + public void setCodeIndex(Integer codeIndex) { + this.codeIndex = codeIndex; + } + /** + * 获取:编码名字 + */ + public String getIndexName() { + return indexName; + } + /** + * 设置:编码名字 + */ + + public void setIndexName(String indexName) { + this.indexName = indexName; + } + /** + * 获取:父字段id + */ + public Integer getSuperId() { + return superId; + } + /** + * 设置:父字段id + */ + + public void setSuperId(Integer superId) { + this.superId = superId; + } + /** + * 获取:备注 + */ + public String getBeizhu() { + return beizhu; + } + /** + * 设置:备注 + */ + + public void setBeizhu(String beizhu) { + this.beizhu = beizhu; + } + /** + * 获取:创建时间 + */ + public Date getCreateTime() { + return createTime; + } + /** + * 设置:创建时间 + */ + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Override + public String toString() { + return "Dictionary{" + + ", id=" + id + + ", dicCode=" + dicCode + + ", dicName=" + dicName + + ", codeIndex=" + codeIndex + + ", indexName=" + indexName + + ", superId=" + superId + + ", beizhu=" + beizhu + + ", createTime=" + DateUtil.convertString(createTime,"yyyy-MM-dd") + + "}"; + } +} diff --git a/DictionaryVO.java b/DictionaryVO.java new file mode 100644 index 0000000..4b16c38 --- /dev/null +++ b/DictionaryVO.java @@ -0,0 +1,345 @@ +package com.entity.vo; + +import com.entity.DictionaryEntity; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import java.util.Date; +import org.springframework.format.annotation.DateTimeFormat; + +import java.package com.entity.vo; + +// 导入MyBatis Plus表名注解 +import com.baomidou.mybatisplus.annotations.TableName; +// 导入MyBatis Plus字段映射注解 +import com.baomidou.mybatisplus.annotations.TableField; +// 导入JSON时间格式化注解 +import com.fasterxml.jackson.annotation.JsonFormat; +// 导入基础实体类 +import com.entity.DictionaryEntity; +// 导入日期工具类 +import java.util.Date; +// 导入Spring时间格式化注解 +import org.springframework.format.annotation.DateTimeFormat; +// 实现序列化接口 +import java.io.Serializable; + +// 字典数据手机端接口返回VO,精简非必要字段 +@TableName("dictionary") +public class DictionaryVO implements Serializable { + // 序列化版本UID + private static final long serialVersionUID = 1L; + + // 主键ID(Long类型保证大数据量存储) + @TableField(value = "id") + private Long id; + + // 字典类型编码(如:gender_type) + @TableField(value = "dic_code") + private String dicCode; + + // 字典类型名称(如:性别分类) + @TableField(value = "dic_name") + private String dicName; + + // 具体选项编码值(如:1/2/3) + @TableField(value = "code_index") + private Integer codeIndex; + + // 选项显示名称(如:男/女) + @TableField(value = "index_name") + private String indexName; + + // 父级字典项ID(用于层级字典结构) + @TableField(value = "super_id") + private Integer superId; + + // 字典项备注说明 + @TableField(value = "beizhu") + private String beizhu; + + // 记录创建时间(带时区格式化) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "create_time") + private Date createTime; + + // 获取:主键ID + public Long getId() { + return id; + } + + // 设置:主键ID + public void setId(Long id) { + this.id = id; + } + + // 获取:字典类型编码 + public String getDicCode() { + return dicCode; + } + + // 设置:字典类型编码 + public void setDicCode(String dicCode) { + this.dicCode = dicCode; + } + + // 获取:字典类型名称 + public String getDicName() { + return dicName; + } + + // 设置:字典类型名称 + public void setDicName(String dicName) { + this.dicName = dicName; + } + + // 获取:选项编码值 + public Integer getCodeIndex() { + return codeIndex; + } + + // 设置:选项编码值 + public void setCodeIndex(Integer codeIndex) { + this.codeIndex = codeIndex; + } + + // 获取:选项显示名称 + public String getIndexName() { + return indexName; + } + + // 设置:选项显示名称 + public void setIndexName(String indexName) { + this.indexName = indexName; + } + + // 获取:父级字典ID + public Integer getSuperId() { + return superId; + } + + // 设置:父级字典ID + public void setSuperId(Integer superId) { + this.superId = superId; + } + + // 获取:备注信息 + public String getBeizhu() { + return beizhu; + } + + // 设置:备注信息 + public void setBeizhu(String beizhu) { + this.beizhu = beizhu; + } + + // 获取:创建时间(带时区信息) + public Date getCreateTime() { + return createTime; + } + + // 设置:创建时间(带时区信息) + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +}io.Serializable; + +/** + * 字典 + * 手机端接口返回实体辅助类 + * (主要作用去除一些不必要的字段) + */ +@TableName("dictionary") +public class DictionaryVO implements Serializable { + private static final long serialVersionUID = 1L; + + + /** + * 主键 + */ + + @TableField(value = "id") + private Long id; + + + /** + * 字段 + */ + + @TableField(value = "dic_code") + private String dicCode; + + + /** + * 字段名 + */ + + @TableField(value = "dic_name") + private String dicName; + + + /** + * 编码 + */ + + @TableField(value = "code_index") + private Integer codeIndex; + + + /** + * 编码名字 + */ + + @TableField(value = "index_name") + private String indexName; + + + /** + * 父字段id + */ + + @TableField(value = "super_id") + private Integer superId; + + + /** + * 备注 + */ + + @TableField(value = "beizhu") + private String beizhu; + + + /** + * 创建时间 + */ + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + + @TableField(value = "create_time") + private Date createTime; + + + /** + * 设置:主键 + */ + public Long getId() { + return id; + } + + + /** + * 获取:主键 + */ + + public void setId(Long id) { + this.id = id; + } + /** + * 设置:字段 + */ + public String getDicCode() { + return dicCode; + } + + + /** + * 获取:字段 + */ + + public void setDicCode(String dicCode) { + this.dicCode = dicCode; + } + /** + * 设置:字段名 + */ + public String getDicName() { + return dicName; + } + + + /** + * 获取:字段名 + */ + + public void setDicName(String dicName) { + this.dicName = dicName; + } + /** + * 设置:编码 + */ + public Integer getCodeIndex() { + return codeIndex; + } + + + /** + * 获取:编码 + */ + + public void setCodeIndex(Integer codeIndex) { + this.codeIndex = codeIndex; + } + /** + * 设置:编码名字 + */ + public String getIndexName() { + return indexName; + } + + + /** + * 获取:编码名字 + */ + + public void setIndexName(String indexName) { + this.indexName = indexName; + } + /** + * 设置:父字段id + */ + public Integer getSuperId() { + return superId; + } + + + /** + * 获取:父字段id + */ + + public void setSuperId(Integer superId) { + this.superId = superId; + } + /** + * 设置:备注 + */ + public String getBeizhu() { + return beizhu; + } + + + /** + * 获取:备注 + */ + + public void setBeizhu(String beizhu) { + this.beizhu = beizhu; + } + /** + * 设置:创建时间 + */ + public Date getCreateTime() { + return createTime; + } + + + /** + * 获取:创建时间 + */ + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + +} diff --git a/EIException.java b/EIException.java new file mode 100644 index 0000000..040cff4 --- /dev/null +++ b/EIException.java @@ -0,0 +1,70 @@ +// 包路径声明,定义该类的存放位置 +package com.entity; + +// 自定义异常类,继承自RuntimeException +// 用于在业务逻辑中抛出特定错误,包含错误信息和状态码 +public class EIException extends RuntimeException { + // 序列化版本ID,用于反序列化时保持版本兼容性 + private static final long serialVersionUID = 1L; + + // 异常信息字段,存储具体的错误描述 + private String msg; + // 状态码字段,默认500表示服务器内部错误 + private int code = 500; + + // 构造器1:通过错误信息创建异常对象 + // 参数msg - 需要传递的异常描述信息 + public EIException(String msg) { + super(msg); // 调用父类构造器初始化异常信息 + this.msg = msg; // 设置当前对象的msg字段 + } + + // 构造器2:通过错误信息和原因异常创建对象 + // 参数msg - 异常描述信息 + // 参数e - 触发当前异常的底层异常对象 + public EIException(String msg, Throwable e) { + super(msg, e); // 调用父类构造器初始化信息和原因 + this.msg = msg; // 设置当前对象的msg字段 + } + + // 构造器3:通过错误信息和状态码创建异常对象 + // 参数msg - 异常描述信息 + // 参数code - 自定义状态码(如400表示客户端错误) + public EIException(String msg, int code) { + super(msg); // 调用父类构造器初始化信息 + this.msg = msg; // 设置msg字段 + this.code = code; // 设置状态码字段 + } + + // 构造器4:通过错误信息、状态码和原因异常创建对象 + // 参数msg - 异常描述信息 + // 参数code - 自定义状态码 + // 参数e - 触发当前异常的底层异常对象 + public EIException(String msg, int code, Throwable e) { + super(msg, e); // 调用父类构造器初始化信息和原因 + this.msg = msg; // 设置msg字段 + this.code = code; // 设置状态码字段 + } + + // 以下为字段的getter和setter方法 + + // 获取异常信息 + public String getMsg() { + return msg; + } + + // 设置异常信息 + public void setMsg(String msg) { + this.msg = msg; + } + + // 获取状态码 + public int getCode() { + return code; + } + + // 设置状态码 + public void setCode(int code) { + this.code = code; + } +} diff --git a/ForumDao.java b/ForumDao.java new file mode 100644 index 0000000..f0db237 --- /dev/null +++ b/ForumDao.java @@ -0,0 +1,35 @@ +// 声明当前文件所在的包路径,表示该接口位于com.dao包下 +package com.dao; + +// 导入ForumEntity实体类,用于数据库表映射 +import com.entity.ForumEntity; +// 导入MyBatis Plus的BaseMapper接口,提供基础的CRUD操作 +import com.baomidou.mybatisplus.mapper.BaseMapper; +// 导入Java的List集合类 +import java.util.List; +// 导入Java的Map集合类,用于存储键值对参数 +import java.util.Map; +// 导入MyBatis Plus的分页插件类 +import com.baomidou.mybatisplus.plugins.pagination.Pagination; + +// 导入MyBatis的Param注解,用于给参数命名 +import org.apache.ibatis.annotations.Param; +// 导入论坛视图实体类,用于展示论坛数据 +import com.entity.view.ForumView; + + + //健身论坛 Dao 接口 + // 该接口继承MyBatis Plus的BaseMapper,提供对ForumEntity的基本数据库操作 + // @author 作者信息(未填写具体作者) + +public interface ForumDao extends BaseMapper { + + + //分页查询论坛列表视图 + // @param page 分页对象,包含当前页、每页显示条数等信息 + //@param params 查询参数Map,可以包含各种查询条件 + // @return 返回论坛视图对象的列表,用于前端展示 + + List selectListView(Pagination page,@Param("params")Map params); + +} \ No newline at end of file diff --git a/ForumEntity.java b/ForumEntity.java new file mode 100644 index 0000000..afe394b --- /dev/null +++ b/ForumEntity.java @@ -0,0 +1,196 @@ +// 包声明:实体类所在的包,用于存放所有与数据库表映射的实体类 +package com.entity; + +// 导入注解类,用于定义数据库字段的额外信息(如注释、类型) +import com.annotation.ColumnInfo; +// 导入数据验证相关注解,用于对字段进行校验(如非空、长度限制) +import javax.validation.constraints.*; +// 导入Jackson注解,用于在JSON序列化/反序列化时忽略未知属性 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +// 反射相关异常类,用于处理属性拷贝时的异常 +import java.lang.reflect.InvocationTargetException; +// 序列化接口标记 +import java.io.Serializable; +// Java集合框架类 +import java.util.*; +// Apache Ant日期工具类(但实际未在类中使用,可能需检查) +import org.apache.tools.ant.util.DateUtils; +// Spring的日期格式化注解,用于绑定请求参数中的日期 +import org.springframework.format.annotation.DateTimeFormat; +// Jackson的日期格式化注解,用于控制JSON日期格式 +import com.fasterxml.jackson.annotation.JsonFormat; +// Apache Commons Bean工具类,用于对象属性拷贝 +import org.apache.commons.beanutils.BeanUtils; +// MyBatis Plus表字段注解 +import com.baomidou.mybatisplus.annotations.TableField; +// MyBatis Plus主键注解 +import com.baomidou.mybatisplus.annotations.TableId; +// MyBatis Plus表名注解 +import com.baomidou.mybatisplus.annotations.TableName; +// MyBatis Plus主键生成策略枚举 +import com.baomidou.mybatisplus.enums.IdType; +// MyBatis Plus字段自动填充策略枚举 +import com.baomidou.mybatisplus.enums.FieldFill; +// 自定义日期工具类,用于日期格式转换 +import com.utils.DateUtil; + + + + //健身论坛实体 + //对应数据库表 forum,存储论坛帖子的基本信息及关联信息 + //*@author + //@email + +@TableName("forum") // 指定对应的数据库表名 +public class ForumEntity implements Serializable { + private static final long serialVersionUID = 1L; // 序列化版本UID + + + // 无参构造器 + public ForumEntity() { + + } + + // 泛型构造器:通过反射将泛型对象属性拷贝到当前实体 + public ForumEntity(T t) { + try { + BeanUtils.copyProperties(this, t); // 使用BeanUtils进行属性拷贝 + } catch (IllegalAccessException | InvocationTargetException e) { + // 打印异常堆栈(实际生产环境建议记录日志而非直接打印) + e.printStackTrace(); + } + } + + + // 主键 + // 使用数据库自增策略 + + @TableId(type = IdType.AUTO) // MyBatis Plus主键注解,自增类型 + @ColumnInfo(comment="主键",type="int(11)") // 自定义字段注释信息 + @TableField(value = "id") // 指定数据库字段名(可省略,默认属性名转换) + private Integer id; + + + //帖子标题 + // 数据库字段类型为varchar(200) + + @ColumnInfo(comment="帖子标题",type="varchar(200)") + @TableField(value = "forum_name") + private String forumName; + + + //关联用户ID + //对应yonghu表的主键 + + @ColumnInfo(comment="用户",type="int(11)") + @TableField(value = "yonghu_id") + private Integer yonghuId; + + + + //关联教练ID + //对应jiaolian表的主键 + + @ColumnInfo(comment="教练",type="int(11)") + @TableField(value = "jiaolian_id") + private Integer jiaolianId; + + + + //关联管理员ID + //对应users表的主键 + + @ColumnInfo(comment="管理员",type="int(11)") + @TableField(value = "users_id") + private Integer usersId; + + + + // 帖子内容 + //使用长文本类型存储 + + @ColumnInfo(comment="发布内容",type="longtext") + @TableField(value = "forum_content") + private String forumContent; + + + + // 父级帖子ID + //用于实现评论层级结构,0表示顶级帖子 + + @ColumnInfo(comment="父id",type="int(11)") + @TableField(value = "super_ids") + private Integer superIds; + + + //帖子状态 + //使用枚举值表示(如0-正常,1-关闭) + @ColumnInfo(comment="帖子状态",type="int(11)") + @TableField(value = "forum_state_types") + private Integer forumStateTypes; + + + + //发帖时间 + //插入时自动填充当前时间 + + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") // 定义JSON序列化格式 + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") // 定义请求参数绑定格式 + @ColumnInfo(comment="发帖时间",type="timestamp") + @TableField(value = "insert_time",fill = FieldFill.INSERT) // 插入时自动填充 + private Date insertTime; + + + //修改时间 + // 更新时自动填充当前时间 + + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ColumnInfo(comment="修改时间",type="timestamp") + @TableField(value = "update_time",fill = FieldFill.UPDATE) // 更新时自动填充 + private Date updateTime; + + + //创建时间(与insert_time重复?可能需要确认字段用途) + // 插入时自动填充 + + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ColumnInfo(comment="创建时间",type="timestamp") + @TableField(value = "create_time",fill = FieldFill.INSERT) // 与insert_time重复,可能需检查数据库设计 + private Date createTime; + + + // 以下为字段的getter和setter方法 + //获取主键ID + + public Integer getId() { + return id; + } + + //设置主键ID + + public void setId(Integer id) { + this.id = id; + } + + // 其他getter/setter方法类似,此处省略详细注释... + // 提示:实际开发中建议使用Lombok的@Data注解自动生成 + + @Override + public String toString() { + return "Forum{" + + ", id=" + id + + ", forumName=" + forumName + + ", yonghuId=" + yonghuId + + ", jiaolianId=" + jiaolianId + + ", usersId=" + usersId + + ", forumContent=" + forumContent + + ", superIds=" + superIds + + ", forumStateTypes=" + forumStateTypes + + ", insertTime=" + DateUtil.convertString(insertTime,"yyyy-MM-dd") + // 使用自定义工具类格式化日期 + ", updateTime=" + DateUtil.convertString(updateTime,"yyyy-MM-dd") + + ", createTime=" + DateUtil.convertString(createTime,"yyyy-MM-dd") + + "}"; + } +} \ No newline at end of file diff --git a/ForumVO.java b/ForumVO.java new file mode 100644 index 0000000..8ff2812 --- /dev/null +++ b/ForumVO.java @@ -0,0 +1,182 @@ +package com.entity.vo; + +// 导入MyBatis Plus注解 +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableName; +// 导入JSON时间格式注解 +import com.fasterxml.jackson.annotation.JsonFormat; +// 导入实体类 +import com.entity.ForumEntity; +// 导入日期类 +import java.util.Date; +// 导入Spring时间格式注解 +import org.springframework.format.annotation.DateTimeFormat; +// 实现序列化接口 +import java.io.Serializable; + +// 健身论坛手机端接口返回VO,精简非必要字段 +@TableName("forum") +public class ForumVO implements Serializable { + // 序列化版本UID + private static final long serialVersionUID = 1L; + + // 主键ID + @TableField(value = "id") + private Integer id; + + // 帖子标题名称 + @TableField(value = "forum_name") + private String forumName; + + // 关联用户ID(普通用户) + @TableField(value = "yonghu_id") + private Integer yonghuId; + + // 关联教练ID + @TableField(value = "jiaolian_id") + private Integer jiaolianId; + + // 关联管理员ID + @TableField(value = "users_id") + private Integer usersId; + + // 论坛内容详情 + @TableField(value = "forum_content") + private String forumContent; + + // 上级帖子ID(关联父级讨论) + @TableField(value = "super_ids") + private Integer superIds; + + // 帖子状态类型(0正常/1关闭) + @TableField(value = "forum_state_types") + private Integer forumStateTypes; + + // 发帖时间(带时区格式化) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "insert_time") + private Date insertTime; + + // 最后修改时间(带时区格式化) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "update_time") + private Date updateTime; + + // 记录创建时间(用于特定展示场景) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "create_time") + private Date createTime; + + // 获取:主键ID + public Integer getId() { + return id; + } + + // 设置:主键ID + public void setId(Integer id) { + this.id = id; + } + + // 获取:帖子标题 + public String getForumName() { + return forumName; + } + + // 设置:帖子标题 + public void setForumName(String forumName) { + this.forumName = forumName; + } + + // 获取:关联用户ID + public Integer getYonghuId() { + return yonghuId; + } + + // 设置:关联用户ID + public void setYonghuId(Integer yonghuId) { + this.yonghuId = yonghuId; + } + + // 获取:教练ID + public Integer getJiaolianId() { + return jiaolianId; + } + + // 设置:教练ID + public void setJiaolianId(Integer jiaolianId) { + this.jiaolianId = jiaolianId; + } + + // 获取:管理员ID + public Integer getUsersId() { + return usersId; + } + + // 设置:管理员ID + public void setUsersId(Integer usersId) { + this.usersId = usersId; + } + + // 获取:论坛内容详情 + public String getForumContent() { + return forumContent; + } + + // 设置:论坛内容详情 + public void setForumContent(String forumContent) { + this.forumContent = forumContent; + } + + // 获取:父级帖子ID + public Integer getSuperIds() { + return superIds; + } + + // 设置:父级帖子ID + public void setSuperIds(Integer superIds) { + this.superIds = superIds; + } + + // 获取:帖子状态类型 + public Integer getForumStateTypes() { + return forumStateTypes; + } + + // 设置:帖子状态类型 + public void setForumStateTypes(Integer forumStateTypes) { + this.forumStateTypes = forumStateTypes; + } + + // 获取:发帖时间 + public Date getInsertTime() { + return insertTime; + } + + // 设置:发帖时间 + public void setInsertTime(Date insertTime) { + this.insertTime = insertTime; + } + + // 获取:最后修改时间 + public Date getUpdateTime() { + return updateTime; + } + + // 设置:最后修改时间 + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + // 获取:创建时间(展示用) + public Date getCreateTime() { + return createTime; + } + + // 设置:创建时间(展示用) + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/JianshenkechengCollectionDao.java b/JianshenkechengCollectionDao.java new file mode 100644 index 0000000..702feb4 --- /dev/null +++ b/JianshenkechengCollectionDao.java @@ -0,0 +1,35 @@ +// 声明当前文件所在的包路径,表示这是com.dao包下的类 +package com.dao; + +// 导入课程收藏实体类,用于数据库操作 +import com.entity.JianshenkechengCollectionEntity; +// 导入MyBatis Plus的基础Mapper接口,提供基本的CRUD操作 +import com.baomidou.mybatisplus.mapper.BaseMapper; +// 导入Java的List集合类,用于返回多条数据 +import java.util.List; +// 导入Java的Map集合类,用于传递参数键值对 +import java.util.Map; +// 导入MyBatis Plus的分页插件类,用于实现分页查询 +import com.baomidou.mybatisplus.plugins.pagination.Pagination; + +// 导入MyBatis的Param注解,用于给Mapper方法参数命名 +import org.apache.ibatis.annotations.Param; +// 导入课程收藏的视图实体类,用于返回视图数据 +import com.entity.view.JianshenkechengCollectionView; + + + //课程收藏 Dao 接口 + //继承MyBatis Plus的BaseMapper,提供对课程收藏表的基本数据库操作 + //@author 作者信息(未填写) + +public interface JianshenkechengCollectionDao extends BaseMapper { + + + // 分页查询课程收藏列表视图 + //@param page 分页对象,包含当前页、每页条数等信息 + //@param params 查询参数Map,可以包含各种查询条件 + //@return 返回课程收藏视图对象的列表 + + List selectListView(Pagination page,@Param("params")Map params); + +} diff --git a/JianshenkechengCollectionEntity.java b/JianshenkechengCollectionEntity.java new file mode 100644 index 0000000..24627af --- /dev/null +++ b/JianshenkechengCollectionEntity.java @@ -0,0 +1,170 @@ +// 包声明:实体类包,存放所有与数据库表映射的JavaBean对象 +package com.entity; + +// 字段注解:自定义数据库字段描述信息 +import com.annotation.ColumnInfo; +// 数据校验注解:非空、范围等验证规则 +import javax.validation.constraints.*; +// JSON序列化注解:忽略未定义字段 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +// 反射异常类:用于处理属性拷贝时的异常 +import java.lang.reflect.InvocationTargetException; +// 序列化接口标识 +import java.io.Serializable; +// 集合工具类 +import java.util.*; +// Apache Ant日期工具(代码中未实际使用,建议检查是否冗余) +import org.apache.tools.ant.util.DateUtils; +// Spring日期格式注解:请求参数绑定 +import org.springframework.format.annotation.DateTimeFormat; +// Jackson日期格式注解:响应数据格式化 +import com.fasterxml.jackson.annotation.JsonFormat; +// Bean工具类:对象属性拷贝 +import org.apache.commons.beanutils.BeanUtils; +// MyBatis Plus字段注解 +import com.baomidou.mybatisplus.annotations.TableField; +// MyBatis Plus主键注解 +import com.baomidou.mybatisplus.annotations.TableId; +// MyBatis Plus表名注解 +import com.baomidou.mybatisplus.annotations.TableName; +// MyBatis Plus主键策略枚举 +import com.baomidou.mybatisplus.enums.IdType; +// MyBatis Plus字段填充策略枚举 +import com.baomidou.mybatisplus.enums.FieldFill; +// 自定义日期工具类 +import com.utils.DateUtil; + + +@TableName("jianshenkecheng_collection") // 指定关联数据库表名 +public class JianshenkechengCollectionEntity implements Serializable { + // 序列化版本UID(类版本控制) + private static final long serialVersionUID = 1L; + + // 空参构造器(JPA/MyBatis等框架需要) + public JianshenkechengCollectionEntity() { + + } + + // 泛型构造器:通过反射将泛型对象属性拷贝到当前实体 + public JianshenkechengCollectionEntity(T t) { + try { + // 使用Apache BeanUtils进行属性拷贝 + BeanUtils.copyProperties(this, t); + } catch (IllegalAccessException | InvocationTargetException e) { + // 异常处理(建议生产环境改为日志记录) + e.printStackTrace(); + } + } + + // 主键字段 + @TableId(type = IdType.AUTO) // 主键自增策略 + @ColumnInfo(comment="主键",type="int(11)") // 字段注释:主键,数据库类型int(11) + @TableField(value = "id") // 映射数据库字段名(可省略,默认驼峰转下划线) + private Integer id; + + // 关联健身课程ID(外键) + @ColumnInfo(comment="健身课程",type="int(11)") // 字段注释:关联健身课程表 + @TableField(value = "jianshenkecheng_id") // 数据库字段名 + private Integer jianshenkechengId; + + // 关联用户ID(外键) + @ColumnInfo(comment="用户",type="int(11)") // 字段注释:关联用户表 + @TableField(value = "yonghu_id") // 数据库字段名 + private Integer yonghuId; + + // 收藏类型(需配合字典表或枚举类使用) + @ColumnInfo(comment="类型",type="int(11)") // 字段注释:1-收藏 2-点赞等类型 + @TableField(value = "jianshenkecheng_collection_types") + private Integer jianshenkechengCollectionTypes; + + // 收藏时间(插入时自动填充) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") // 响应JSON格式 + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") // 请求参数格式 + @ColumnInfo(comment="收藏时间",type="timestamp") // 数据库类型timestamp + @TableField(value = "insert_time",fill = FieldFill.INSERT) // 插入时自动填充 + private Date insertTime; + + // 创建时间(与insert_time可能存在冗余) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ColumnInfo(comment="创建时间",type="timestamp") + @TableField(value = "create_time",fill = FieldFill.INSERT) // 与insert_time同样使用插入填充,需确认业务需求 + private Date createTime; + + // Getter/Setter方法 + // ---------------------------- + + // 主键访问器 + public Integer getId() { + return id; + } + + // 主键修改器 + public void setId(Integer id) { + this.id = id; + } + + // 健身课程ID访问器 + public Integer getJianshenkechengId() { + return jianshenkechengId; + } + + // 健身课程ID修改器 + public void setJianshenkechengId(Integer jianshenkechengId) { + this.jianshenkechengId = jianshenkechengId; + } + + // 用户ID访问器 + public Integer getYonghuId() { + return yonghuId; + } + + // 用户ID修改器 + public void setYonghuId(Integer yonghuId) { + this.yonghuId = yonghuId; + } + + // 收藏类型访问器 + public Integer getJianshenkechengCollectionTypes() { + return jianshenkechengCollectionTypes; + } + + // 收藏类型修改器(建议使用枚举限定值) + public void setJianshenkechengCollectionTypes(Integer jianshenkechengCollectionTypes) { + this.jianshenkechengCollectionTypes = jianshenkechengCollectionTypes; + } + + // 收藏时间访问器 + public Date getInsertTime() { + return insertTime; + } + + // 收藏时间修改器(通常自动填充,无需手动设置) + public void setInsertTime(Date insertTime) { + this.insertTime = insertTime; + } + + // 创建时间访问器 + public Date getCreateTime() { + return createTime; + } + + // 创建时间修改器(通常自动填充,需确认与insert_time的区别) + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + // 对象字符串表示(调试用) + @Override + public String toString() { + return "JianshenkechengCollection{" + + ", id=" + id + + ", jianshenkechengId=" + jianshenkechengId + + ", yonghuId=" + yonghuId + + ", jianshenkechengCollectionTypes=" + jianshenkechengCollectionTypes + + // 使用自定义工具类格式化日期(注意:格式化为yyyy-MM-dd会丢失时间精度) + ", insertTime=" + DateUtil.convertString(insertTime,"yyyy-MM-dd") + + ", createTime=" + DateUtil.convertString(createTime,"yyyy-MM-dd") + + "}"; + } +} \ No newline at end of file diff --git a/JianshenkechengCollectionVO.java b/JianshenkechengCollectionVO.java new file mode 100644 index 0000000..ea8067b --- /dev/null +++ b/JianshenkechengCollectionVO.java @@ -0,0 +1,104 @@ +package com.entity.vo; + +import com.entity.JianshenkechengCollectionEntity; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import java.util.Date; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; + +// 课程收藏手机端接口返回VO,去除不必要字段 +@TableName("jianshenkecheng_collection") +public class JianshenkechengCollectionVO implements Serializable { + private static final long serialVersionUID = 1L; + + // 主键ID + @TableField(value = "id") + private Integer id; + + // 关联的健身课程ID + @TableField(value = "jianshenkecheng_id") + private Integer jianshenkechengId; + + // 收藏用户ID + @TableField(value = "yonghu_id") + private Integer yonghuId; + + // 收藏类型(如:1收藏/2取消) + @TableField(value = "jianshenkecheng_collection_types") + private Integer jianshenkechengCollectionTypes; + + // 收藏时间(带时区格式化) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "insert_time") + private Date insertTime; + + // 记录创建时间(用于特定展示场景) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "create_time") + private Date createTime; + + // 获取:主键ID + public Integer getId() { + return id; + } + + // 设置:主键ID + public void setId(Integer id) { + this.id = id; + } + + // 获取:关联课程ID + public Integer getJianshenkechengId() { + return jianshenkechengId; + } + + // 设置:关联课程ID + public void setJianshenkechengId(Integer jianshenkechengId) { + this.jianshenkechengId = jianshenkechengId; + } + + // 获取:用户ID + public Integer getYonghuId() { + return yonghuId; + } + + // 设置:用户ID + public void setYonghuId(Integer yonghuId) { + this.yonghuId = yonghuId; + } + + // 获取:收藏类型 + public Integer getJianshenkechengCollectionTypes() { + return jianshenkechengCollectionTypes; + } + + // 设置:收藏类型 + public void setJianshenkechengCollectionTypes(Integer jianshenkechengCollectionTypes) { + this.jianshenkechengCollectionTypes = jianshenkechengCollectionTypes; + } + + // 获取:收藏时间 + public Date getInsertTime() { + return insertTime; + } + + // 设置:收藏时间 + public void setInsertTime(Date insertTime) { + this.insertTime = insertTime; + } + + // 获取:创建时间(展示用) + public Date getCreateTime() { + return createTime; + } + + // 设置:创建时间(展示用) + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/JianshenkechengDao.java b/JianshenkechengDao.java new file mode 100644 index 0000000..dc7d4f1 --- /dev/null +++ b/JianshenkechengDao.java @@ -0,0 +1,35 @@ +// 声明当前文件所在的包路径,表示该文件位于com.dao包下 +package com.dao; + +// 导入健身课程实体类,用于数据库表映射 +import com.entity.JianshenkechengEntity; +// 导入MyBatis Plus的基础Mapper接口,提供基本的CRUD操作 +import com.baomidou.mybatisplus.mapper.BaseMapper; +// 导入List集合类,用于返回多条数据 +import java.util.List; +// 导入Map集合类,用于传递参数键值对 +import java.util.Map; +// 导入MyBatis Plus的分页插件类,用于实现分页查询 +import com.baomidou.mybatisplus.plugins.pagination.Pagination; + +// 导入MyBatis的Param注解,用于给Mapper方法参数命名 +import org.apache.ibatis.annotations.Param; +// 导入健身课程的视图类,用于展示数据 +import com.entity.view.JianshenkechengView; + + + //健身课程 Dao 接口 + //继承MyBatis Plus的BaseMapper接口,提供对JianshenkechengEntity的基本数据库操作 + // @author 作者信息(未填写) + +public interface JianshenkechengDao extends BaseMapper { + + + // 分页查询健身课程列表 + // @param page 分页对象,包含当前页、每页显示条数等信息 + // @param params 查询参数Map集合,可包含各种筛选条件 + //@return 返回健身课程视图对象的列表,用于前端展示 + + List selectListView(Pagination page,@Param("params")Map params); + +} \ No newline at end of file diff --git a/JianshenkechengEntity.java b/JianshenkechengEntity.java new file mode 100644 index 0000000..2783952 --- /dev/null +++ b/JianshenkechengEntity.java @@ -0,0 +1,282 @@ +// 包声明:实体类包,存放所有与数据库表映射的JavaBean对象 +package com.entity; + +// 字段描述注解:自定义数据库字段元数据 +import com.annotation.ColumnInfo; +// 数据校验注解:提供非空、范围等验证规则 +import javax.validation.constraints.*; +// JSON序列化配置:忽略未定义属性 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +// 反射异常类:处理属性拷贝时的异常 +import java.lang.reflect.InvocationTargetException; +// 序列化接口标识 +import java.io.Serializable; +// 集合工具类 +import java.util.*; +// Apache Ant日期工具(代码中未使用,建议移除) +import org.apache.tools.ant.util.DateUtils; +// Spring日期参数绑定注解 +import org.springframework.format.annotation.DateTimeFormat; +// Jackson日期格式化注解 +import com.fasterxml.jackson.annotation.JsonFormat; +// Bean属性拷贝工具 +import org.apache.commons.beanutils.BeanUtils; +// MyBatis Plus字段注解 +import com.baomidou.mybatisplus.annotations.TableField; +// MyBatis Plus主键注解 +import com.baomidou.mybatisplus.annotations.TableId; +// MyBatis Plus表名注解 +import com.baomidou.mybatisplus.annotations.TableName; +// MyBatis Plus主键策略枚举 +import com.baomidou.mybatisplus.enums.IdType; +// MyBatis Plus字段填充策略 +import com.baomidou.mybatisplus.enums.FieldFill; +// 自定义日期格式化工具 +import com.utils.DateUtil; + + + // 健身课程实体 + //映射数据库表 jianshenkecheng + //存储健身课程基本信息、统计数据和关联信息 + +@TableName("jianshenkecheng") // 指定关联数据库表名 +public class JianshenkechengEntity implements Serializable { + // 序列化版本标识(类版本控制) + private static final long serialVersionUID = 1L; + + // 空构造器(持久层框架需要) + public JianshenkechengEntity() { + + } + + // 泛型构造器:通过反射进行属性拷贝 + public JianshenkechengEntity(T t) { + try { + BeanUtils.copyProperties(this, t); // 使用Apache工具类拷贝属性 + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); // 生产环境建议改为日志记录 + } + } + + // 主键字段(自增策略) + @TableId(type = IdType.AUTO) // 主键生成策略:数据库自增 + @ColumnInfo(comment="主键",type="int(11)") // 字段注释:主键,数据库类型int(11) + @TableField("id") // 映射数据库字段名(可省略) + private Integer id; + + // 关联教练ID(外键) + @ColumnInfo(comment="教练",type="int(11)") // 关联jiaolian表主键 + @TableField("jiaolian_id") + private Integer jiaolianId; + + // 课程名称(需考虑唯一性约束) + @ColumnInfo(comment="健身课程名称",type="varchar(200)") // 数据库类型varchar(200) + @TableField("jianshenkecheng_name") + private String jianshenkechengName; + + // 课程封面图URL(建议添加OSS存储注释) + @ColumnInfo(comment="健身课程照片",type="varchar(200)") // 存储图片路径 + @TableField("jianshenkecheng_photo") + private String jianshenkechengPhoto; + + // 课程视频地址(建议标注支持的格式) + @ColumnInfo(comment="课程视频",type="varchar(200)") // 存储视频文件路径或URL + @TableField("jianshenkecheng_video") + private String jianshenkechengVideo; + + // 点赞计数器(建议添加并发控制) + @ColumnInfo(comment="赞",type="int(11)") // 默认值建议设置为0 + @TableField("zan_number") + private Integer zanNumber; + + // 点踩计数器(考虑是否需要负值限制) + @ColumnInfo(comment="踩",type="int(11)") + @TableField("cai_number") + private Integer caiNumber; + + // 课程分类(应关联字典表或使用枚举类) + @ColumnInfo(comment="健身课程类型",type="int(11)") // 例:1-有氧 2-力量 3-柔韧 + @TableField("jianshenkecheng_types") + private Integer jianshenkechengTypes; + + // 点击量统计(可考虑每日统计优化) + @ColumnInfo(comment="健身课程热度",type="int(11)") // 记录课程查看次数 + @TableField("jianshenkecheng_clicknum") + private Integer jianshenkechengClicknum; + + // 富文本课程介绍(需考虑XSS防护) + @ColumnInfo(comment="健身课程介绍",type="longtext") // 存储HTML格式内容 + @TableField("jianshenkecheng_content") + private String jianshenkechengContent; + + // 逻辑删除标志(0-未删除 1-已删除) + @ColumnInfo(comment="逻辑删除",type="int(11)") // 替代物理删除 + @TableField("data_delete") + private Integer dataDelete; + + // 数据录入时间(管理后台操作时间) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") // 响应格式 + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") // 请求参数格式 + @ColumnInfo(comment="录入时间",type="timestamp") // 数据库类型timestamp + @TableField(value = "insert_time", fill = FieldFill.INSERT) // 新增时自动填充 + private Date insertTime; + + // 课程创建时间(业务时间,可能与insert_time重复) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ColumnInfo(comment="创建时间",type="timestamp") // 建议确认与insert_time的区别 + @TableField(value = "create_time", fill = FieldFill.INSERT) + private Date createTime; + + // ----------------------------- Getter/Setter方法 ----------------------------- + + // 主键访问器 + public Integer getId() { + return id; + } + + // 主键修改器 + public void setId(Integer id) { + this.id = id; + } + + // 教练ID访问器 + public Integer getJiaolianId() { + return jiaolianId; + } + + // 教练ID修改器(应校验教练存在性) + public void setJiaolianId(Integer jiaolianId) { + this.jiaolianId = jiaolianId; + } + + // 课程名称访问器 + public String getJianshenkechengName() { + return jianshenkechengName; + } + + // 课程名称修改器(建议添加唯一性校验) + public void setJianshenkechengName(String jianshenkechengName) { + this.jianshenkechengName = jianshenkechengName; + } + + // 课程图片访问器 + public String getJianshenkechengPhoto() { + return jianshenkechengPhoto; + } + + // 课程图片修改器(建议添加格式校验) + public void setJianshenkechengPhoto(String jianshenkechengPhoto) { + this.jianshenkechengPhoto = jianshenkechengPhoto; + } + + // 课程视频访问器 + public String getJianshenkechengVideo() { + return jianshenkechengVideo; + } + + // 课程视频修改器(建议添加视频格式校验) + public void setJianshenkechengVideo(String jianshenkechengVideo) { + this.jianshenkechengVideo = jianshenkechengVideo; + } + + // 点赞数访问器 + public Integer getZanNumber() { + return zanNumber; + } + + // 点赞数修改器(建议添加非负校验) + public void setZanNumber(Integer zanNumber) { + this.zanNumber = zanNumber; + } + + // 点踩数访问器 + public Integer getCaiNumber() { + return caiNumber; + } + + // 点踩数修改器(建议添加非负校验) + public void setCaiNumber(Integer caiNumber) { + this.caiNumber = caiNumber; + } + + // 课程类型访问器 + public Integer getJianshenkechengTypes() { + return jianshenkechengTypes; + } + + // 课程类型修改器(应限制有效值范围) + public void setJianshenkechengTypes(Integer jianshenkechengTypes) { + this.jianshenkechengTypes = jianshenkechengTypes; + } + + // 点击量访问器 + public Integer getJianshenkechengClicknum() { + return jianshenkechengClicknum; + } + + // 点击量修改器(建议只允许递增) + public void setJianshenkechengClicknum(Integer jianshenkechengClicknum) { + this.jianshenkechengClicknum = jianshenkechengClicknum; + } + + // 课程详情访问器 + public String getJianshenkechengContent() { + return jianshenkechengContent; + } + + // 课程详情修改器(建议添加HTML过滤) + public void setJianshenkechengContent(String jianshenkechengContent) { + this.jianshenkechengContent = jianshenkechengContent; + } + + // 逻辑删除标志访问器 + public Integer getDataDelete() { + return dataDelete; + } + + // 逻辑删除标志修改器(应限制0/1取值) + public void setDataDelete(Integer dataDelete) { + this.dataDelete = dataDelete; + } + + // 录入时间访问器(通常自动生成) + public Date getInsertTime() { + return insertTime; + } + + // 录入时间修改器(通常无需手动设置) + public void setInsertTime(Date insertTime) { + this.insertTime = insertTime; + } + + // 创建时间访问器(注意与insert_time区别) + public Date getCreateTime() { + return createTime; + } + + // 创建时间修改器(需确认业务场景) + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + // 对象字符串表示(调试用) + @Override + public String toString() { + return "Jianshenkecheng{" + + ", id=" + id + + ", jiaolianId=" + jiaolianId + + ", jianshenkechengName=" + jianshenkechengName + + ", jianshenkechengPhoto=" + jianshenkechengPhoto + + ", jianshenkechengVideo=" + jianshenkechengVideo + + ", zanNumber=" + zanNumber + + ", caiNumber=" + caiNumber + + ", jianshenkechengTypes=" + jianshenkechengTypes + + ", jianshenkechengClicknum=" + jianshenkechengClicknum + + ", jianshenkechengContent=" + jianshenkechengContent + + ", dataDelete=" + dataDelete + + ", insertTime=" + DateUtil.convertString(insertTime,"yyyy-MM-dd") + // 格式化丢失时间精度 + ", createTime=" + DateUtil.convertString(createTime,"yyyy-MM-dd") + + "}"; + } +} \ No newline at end of file diff --git a/JianshenkechengLiuyanDao.java b/JianshenkechengLiuyanDao.java new file mode 100644 index 0000000..77f1c44 --- /dev/null +++ b/JianshenkechengLiuyanDao.java @@ -0,0 +1,35 @@ +// 声明当前文件所在的包路径,表示该接口位于com.dao包下 +package com.dao; + +// 导入课程留言实体类,用于数据库操作 +import com.entity.JianshenkechengLiuyanEntity; +// 导入MyBatis Plus的基础Mapper接口,提供基本的CRUD操作 +import com.baomidou.mybatisplus.mapper.BaseMapper; +// 导入List集合类,用于返回多条数据 +import java.util.List; +// 导入Map集合类,用于传递参数或返回键值对数据 +import java.util.Map; +// 导入MyBatis Plus的分页插件类,用于实现分页查询 +import com.baomidou.mybatisplus.plugins.pagination.Pagination; + +// 导入MyBatis的Param注解,用于给参数命名 +import org.apache.ibatis.annotations.Param; +// 导入课程留言的视图实体类,可能用于返回特定视图数据 +import com.entity.view.JianshenkechengLiuyanView; + + + //课程留言 Dao 接口 + //该接口继承自MyBatis Plus的BaseMapper,提供对JianshenkechengLiuyanEntity的基本数据库操作 + // 并扩展了分页查询方法 + // @author 作者信息(未填写具体作者) + +public interface JianshenkechengLiuyanDao extends BaseMapper { + + // 分页查询课程留言列表 + // @param page 分页对象,包含当前页、每页显示条数等信息 + // @param params 查询参数Map,可以包含各种查询条件 + // @return 返回课程留言视图对象列表,包含分页后的数据 + + List selectListView(Pagination page,@Param("params")Map params); + +} diff --git a/JianshenkechengLiuyanEntity.java b/JianshenkechengLiuyanEntity.java new file mode 100644 index 0000000..9ddacf9 --- /dev/null +++ b/JianshenkechengLiuyanEntity.java @@ -0,0 +1,212 @@ +// 包声明:实体类包,存放所有与数据库表映射的JavaBean对象 +package com.entity; + +// 字段描述注解:自定义数据库字段元数据 +import com.annotation.ColumnInfo; +// 数据校验注解:提供非空、长度等验证规则 +import javax.validation.constraints.*; +// JSON序列化配置:忽略未定义属性 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +// 反射异常类:处理属性拷贝时的异常 +import java.lang.reflect.InvocationTargetException; +// 序列化接口标识 +import java.io.Serializable; +// 集合工具类 +import java.util.*; +// Apache Ant日期工具(代码中未使用,建议移除) +import org.apache.tools.ant.util.DateUtils; +// Spring日期参数绑定注解 +import org.springframework.format.annotation.DateTimeFormat; +// Jackson日期格式化注解 +import com.fasterxml.jackson.annotation.JsonFormat; +// Bean属性拷贝工具 +import org.apache.commons.beanutils.BeanUtils; +// MyBatis Plus字段注解 +import com.baomidou.mybatisplus.annotations.TableField; +// MyBatis Plus主键注解 +import com.baomidou.mybatisplus.annotations.TableId; +// MyBatis Plus表名注解 +import com.baomidou.mybatisplus.annotations.TableName; +// MyBatis Plus主键策略枚举 +import com.baomidou.mybatisplus.enums.IdType; +// MyBatis Plus字段填充策略 +import com.baomidou.mybatisplus.enums.FieldFill; +// 自定义日期格式化工具 +import com.utils.DateUtil; + + + // 课程留言实体 + // 映射数据库表 jianshenkecheng_liuyan + // 存储用户对健身课程的留言及管理员回复信息 + +@TableName("jianshenkecheng_liuyan") // 指定关联数据库表名 +public class JianshenkechengLiuyanEntity implements Serializable { + // 序列化版本标识(类版本控制) + private static final long serialVersionUID = 1L; + + // 空构造器(持久层框架需要) + public JianshenkechengLiuyanEntity() { + + } + + // 泛型构造器:通过反射进行属性拷贝 + public JianshenkechengLiuyanEntity(T t) { + try { + BeanUtils.copyProperties(this, t); // 使用Apache工具类拷贝属性 + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); // 生产环境建议改为日志记录 + } + } + + // 主键字段(自增策略) + @TableId(type = IdType.AUTO) // 主键生成策略:数据库自增 + @ColumnInfo(comment="主键",type="int(11)") // 字段注释:主键,数据库类型int(11) + @TableField("id") // 映射数据库字段名 + private Integer id; // 唯一标识符 + + // 关联健身课程ID(外键) + @ColumnInfo(comment="健身课程",type="int(11)") // 关联jianshenkecheng表主键 + @TableField("jianshenkecheng_id") + private Integer jianshenkechengId; // 被评论的课程ID + + // 关联用户ID(外键) + @ColumnInfo(comment="用户",type="int(11)") // 关联yonghu表主键 + @TableField("yonghu_id") + private Integer yonghuId; // 留言用户ID + + // 留言内容(需考虑敏感词过滤) + @ColumnInfo(comment="留言内容",type="longtext") // 数据库类型longtext + @TableField("jianshenkecheng_liuyan_text") + private String jianshenkechengLiuyanText; // 用户留言正文 + + // 留言时间(自动填充) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") // 响应JSON格式 + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") // 请求参数格式 + @ColumnInfo(comment="留言时间",type="timestamp") // 数据库类型timestamp + @TableField(value = "insert_time", fill = FieldFill.INSERT) // 插入时自动填充 + private Date insertTime; // 用户提交留言时间 + + // 管理员回复内容(null表示未回复) + @ColumnInfo(comment="回复内容",type="longtext") + @TableField("reply_text") + private String replyText; // 管理员回复正文 + + // 回复时间(更新时自动填充) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ColumnInfo(comment="回复时间",type="timestamp") + @TableField(value = "update_time", fill = FieldFill.UPDATE) // 更新时自动填充 + private Date updateTime; // 最后回复/更新时间 + + // 创建时间(与insert_time可能存在冗余) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ColumnInfo(comment="创建时间",type="timestamp") + @TableField(value = "create_time", fill = FieldFill.INSERT) + private Date createTime; // 记录创建时间(建议确认业务需求) + + // ----------------------------- Getter/Setter方法 ----------------------------- + + // 主键访问器 + public Integer getId() { + return id; + } + + // 主键修改器 + public void setId(Integer id) { + this.id = id; + } + + // 课程ID访问器 + public Integer getJianshenkechengId() { + return jianshenkechengId; + } + + // 课程ID修改器(应校验课程存在性) + public void setJianshenkechengId(Integer jianshenkechengId) { + this.jianshenkechengId = jianshenkechengId; + } + + // 用户ID访问器 + public Integer getYonghuId() { + return yonghuId; + } + + // 用户ID修改器(应校验用户存在性) + public void setYonghuId(Integer yonghuId) { + this.yonghuId = yonghuId; + } + + // 留言内容访问器 + public String getJianshenkechengLiuyanText() { + return jianshenkechengLiuyanText; + } + + // 留言内容修改器(建议添加敏感词过滤) + public void setJianshenkechengLiuyanText(String jianshenkechengLiuyanText) { + this.jianshenkechengLiuyanText = jianshenkechengLiuyanText; + } + + // 留言时间访问器(通常自动生成) + public Date getInsertTime() { + return insertTime; + } + + // 留言时间修改器(通常无需手动设置) + public void setInsertTime(Date insertTime) { + this.insertTime = insertTime; + } + + // 回复内容访问器 + public String getReplyText() { + return replyText; + } + + // 回复内容修改器(需权限控制) + public void setReplyText(String replyText) { + this.replyText = replyText; + } + + // 回复时间访问器 + public Date getUpdateTime() { + return updateTime; + } + + // 回复时间修改器(通常自动更新) + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + // 创建时间访问器(注意与insert_time区别) + public Date getCreateTime() { + return createTime; + } + + // 创建时间修改器(需确认业务场景) + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + // 对象字符串表示(调试用) + @Override + public String toString() { + return "JianshenkechengLiuyan{" + + // 主键ID + ", id=" + id + + // 关联课程ID + ", jianshenkechengId=" + jianshenkechengId + + // 用户ID + ", yonghuId=" + yonghuId + + // 留言内容(建议截断显示) + ", jianshenkechengLiuyanText=" + jianshenkechengLiuyanText + + // 留言时间(格式化为日期) + ", insertTime=" + DateUtil.convertString(insertTime,"yyyy-MM-dd") + + // 回复内容(建议截断显示) + ", replyText=" + replyText + + // 最后更新时间(格式化为日期) + ", updateTime=" + DateUtil.convertString(updateTime,"yyyy-MM-dd") + + // 记录创建时间 + ", createTime=" + DateUtil.convertString(createTime,"yyyy-MM-dd") + + "}"; + } +} \ No newline at end of file diff --git a/JianshenkechengLiuyanVO.java b/JianshenkechengLiuyanVO.java new file mode 100644 index 0000000..ce6a62c --- /dev/null +++ b/JianshenkechengLiuyanVO.java @@ -0,0 +1,134 @@ +package com.entity.vo; + +import com.entity.JianshenkechengLiuyanEntity; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import java.util.Date; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; + +// 健身课程留言手机端接口返回VO,去除不必要字段 +@TableName("jianshenkecheng_liuyan") +public class JianshenkechengLiuyanVO implements Serializable { + private static final long serialVersionUID = 1L; + + // 主键ID + @TableField(value = "id") + private Integer id; + + // 关联的健身课程ID + @TableField(value = "jianshenkecheng_id") + private Integer jianshenkechengId; + + // 留言用户ID + @TableField(value = "yonghu_id") + private Integer yonghuId; + + // 留言内容文本 + @TableField(value = "jianshenkecheng_liuyan_text") + private String jianshenkechengLiuyanText; + + // 留言时间(带时区格式化) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "insert_time") + private Date insertTime; + + // 管理员回复内容 + @TableField(value = "reply_text") + private String replyText; + + // 回复时间(带时区格式化) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "update_time") + private Date updateTime; + + // 记录创建时间(用于特定展示场景) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "create_time") + private Date createTime; + + // 获取:主键ID + public Integer getId() { + return id; + } + + // 设置:主键ID + public void setId(Integer id) { + this.id = id; + } + + // 获取:关联课程ID + public Integer getJianshenkechengId() { + return jianshenkechengId; + } + + // 设置:关联课程ID + public void setJianshenkechengId(Integer jianshenkechengId) { + this.jianshenkechengId = jianshenkechengId; + } + + // 获取:留言用户ID + public Integer getYonghuId() { + return yonghuId; + } + + // 设置:留言用户ID + public void setYonghuId(Integer yonghuId) { + this.yonghuId = yonghuId; + } + + // 获取:留言内容 + public String getJianshenkechengLiuyanText() { + return jianshenkechengLiuyanText; + } + + // 设置:留言内容 + public void setJianshenkechengLiuyanText(String jianshenkechengLiuyanText) { + this.jianshenkechengLiuyanText = jianshenkechengLiuyanText; + } + + // 获取:留言时间 + public Date getInsertTime() { + return insertTime; + } + + // 设置:留言时间 + public void setInsertTime(Date insertTime) { + this.insertTime = insertTime; + } + + // 获取:回复内容 + public String getReplyText() { + return replyText; + } + + // 设置:回复内容 + public void setReplyText(String replyText) { + this.replyText = replyText; + } + + // 获取:回复时间 + public Date getUpdateTime() { + return updateTime; + } + + // 设置:回复时间 + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + // 获取:创建时间(展示用) + public Date getCreateTime() { + return createTime; + } + + // 设置:创建时间(展示用) + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/JianshenkechengVO.java b/JianshenkechengVO.java new file mode 100644 index 0000000..abc3929 --- /dev/null +++ b/JianshenkechengVO.java @@ -0,0 +1,202 @@ +package com.entity.vo; + +import com.entity.JianshenkechengEntity; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import java.util.Date; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; + +// 健身课程手机端接口返回实体VO,去除不必要字段 +@TableName("jianshenkecheng") +public class JianshenkechengVO implements Serializable { + private static final long serialVersionUID = 1L; + + // 主键 + @TableField(value = "id") + private Integer id; + + // 教练ID + @TableField(value = "jiaolian_id") + private Integer jiaolianId; + + // 健身课程名称 + @TableField(value = "jianshenkecheng_name") + private String jianshenkechengName; + + // 健身课程照片 + @TableField(value = "jianshenkecheng_photo") + private String jianshenkechengPhoto; + + // 课程视频 + @TableField(value = "jianshenkecheng_video") + private String jianshenkechengVideo; + + // 赞数 + @TableField(value = "zan_number") + private Integer zanNumber; + + // 踩数 + @TableField(value = "cai_number") + private Integer caiNumber; + + // 健身课程类型 + @TableField(value = "jianshenkecheng_types") + private Integer jianshenkechengTypes; + + // 课程点击量(热度) + @TableField(value = "jianshenkecheng_clicknum") + private Integer jianshenkechengClicknum; + + // 课程详细介绍 + @TableField(value = "jianshenkecheng_content") + private String jianshenkechengContent; + + // 逻辑删除标记(0未删1已删) + @TableField(value = "data_delete") + private Integer dataDelete; + + // 数据录入时间 + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "insert_time") + private Date insertTime; + + // 创建时间(用于不同展示场景) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "create_time") + private Date createTime; + + // 获取:主键 + public Integer getId() { + return id; + } + + // 设置:主键 + public void setId(Integer id) { + this.id = id; + } + + // 获取:教练ID + public Integer getJiaolianId() { + return jiaolianId; + } + + // 设置:教练ID + public void setJiaolianId(Integer jiaolianId) { + this.jiaolianId = jiaolianId; + } + + // 获取:课程名称 + public String getJianshenkechengName() { + return jianshenkechengName; + } + + // 设置:课程名称 + public void setJianshenkechengName(String jianshenkechengName) { + this.jianshenkechengName = jianshenkechengName; + } + + // 获取:课程照片路径 + public String getJianshenkechengPhoto() { + return jianshenkechengPhoto; + } + + // 设置:课程照片路径 + public void setJianshenkechengPhoto(String jianshenkechengPhoto) { + this.jianshenkechengPhoto = jianshenkechengPhoto; + } + + // 获取:课程视频路径 + public String getJianshenkechengVideo() { + return jianshenkechengVideo; + } + + // 设置:课程视频路径 + public void setJianshenkechengVideo(String jianshenkechengVideo) { + this.jianshenkechengVideo = jianshenkechengVideo; + } + + // 获取:点赞数量 + public Integer getZanNumber() { + return zanNumber; + } + + // 设置:点赞数量 + public void setZanNumber(Integer zanNumber) { + this.zanNumber = zanNumber; + } + + // 获取:点踩数量 + public Integer getCaiNumber() { + return caiNumber; + } + + // 设置:点踩数量 + public void setCaiNumber(Integer caiNumber) { + this.caiNumber = caiNumber; + } + + // 获取:课程类型 + public Integer getJianshenkechengTypes() { + return jianshenkechengTypes; + } + + // 设置:课程类型 + public void setJianshenkechengTypes(Integer jianshenkechengTypes) { + this.jianshenkechengTypes = jianshenkechengTypes; + } + + // 获取:课程点击量 + public Integer getJianshenkechengClicknum() { + return jianshenkechengClicknum; + } + + // 设置:课程点击量 + public void setJianshenkechengClicknum(Integer jianshenkechengClicknum) { + this.jianshenkechengClicknum = jianshenkechengClicknum; + } + + // 获取:课程详情内容 + public String getJianshenkechengContent() { + return jianshenkechengContent; + } + + // 设置:课程详情内容 + public void setJianshenkechengContent(String jianshenkechengContent) { + this.jianshenkechengContent = jianshenkechengContent; + } + + // 获取:逻辑删除标记 + public Integer getDataDelete() { + return dataDelete; + } + + // 设置:逻辑删除标记 + public void setDataDelete(Integer dataDelete) { + this.dataDelete = dataDelete; + } + + // 获取:数据录入时间 + public Date getInsertTime() { + return insertTime; + } + + // 设置:数据录入时间 + public void setInsertTime(Date insertTime) { + this.insertTime = insertTime; + } + + // 获取:创建时间(用于展示) + public Date getCreateTime() { + return createTime; + } + + // 设置:创建时间(用于展示) + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/JiaolianDao.java b/JiaolianDao.java new file mode 100644 index 0000000..1ed89e1 --- /dev/null +++ b/JiaolianDao.java @@ -0,0 +1,35 @@ +// 声明当前文件所在的包路径,表示该接口位于com.dao包下 +package com.dao; + +// 导入教练实体类,用于数据库操作 +import com.entity.JiaolianEntity; +// 导入MyBatis Plus的BaseMapper接口,提供基本的CRUD操作 +import com.baomidou.mybatisplus.mapper.BaseMapper; +// 导入List集合类,用于返回多条数据 +import java.util.List; +// 导入Map集合类,用于传递参数键值对 +import java.util.Map; +// 导入MyBatis Plus的分页插件类,用于实现分页功能 +import com.baomidou.mybatisplus.plugins.pagination.Pagination; + +// 导入MyBatis的Param注解,用于给参数命名 +import org.apache.ibatis.annotations.Param; +// 导入教练视图类,用于返回视图数据 +import com.entity.view.JiaolianView; + + + //教练 Dao 接口 + //定义与教练表相关的数据库操作方法 + // @author + +public interface JiaolianDao extends BaseMapper { + + + // 分页查询教练信息列表 + //@param page 分页对象,包含当前页、每页显示条数等信息 + //@param params 查询参数Map集合,可包含各种查询条件 + //@return 返回教练视图对象列表,用于前端展示 + + List selectListView(Pagination page,@Param("params")Map params); + +} \ No newline at end of file diff --git a/JiaolianEntity.java b/JiaolianEntity.java new file mode 100644 index 0000000..25c24c2 --- /dev/null +++ b/JiaolianEntity.java @@ -0,0 +1,254 @@ +// 包声明 +package com.entity; + +// 导入Java核心库 +import java.io.Serializable; +import java.lang.reflect.InvocationTargetException; + +// 导入校验相关注解 +import javax.validation.constraints.*; + +// 导入Jackson注解 +import com.fasterxml.jackson.annotation.JsonFormat; + +// 导入Apache工具类 +import org.apache.commons.beanutils.BeanUtils; + +// 导入Spring框架注解 +import org.springframework.format.annotation.DateTimeFormat; + +// 导入MyBatis Plus注解 +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import com.baomidou.mybatisplus.enums.FieldFill; + +// 导入自定义注解和工具类 +import com.annotation.ColumnInfo; +import com.utils.DateUtil; + +// 教练实体类(对应数据库表jiaolian) +@TableName("jiaolian") +public class JiaolianEntity implements Serializable { + // 序列化版本UID + private static final long serialVersionUID = 1L; + + // 无参构造方法 + public JiaolianEntity() { + } + + // 带泛型参数的构造方法(通过BeanUtils进行属性拷贝) + public JiaolianEntity(T t) { + try { + BeanUtils.copyProperties(this, t); + } catch (IllegalAccessException | InvocationTargetException e) { + // 异常处理(打印堆栈跟踪) + e.printStackTrace(); + } + } + + // 主键(自增) + @TableId(type = IdType.AUTO) + @ColumnInfo(comment = "主键", type = "int(11)") + @TableField(value = "id") + private Integer id; + + // 登录账户 + @ColumnInfo(comment = "账户", type = "varchar(200)") + @TableField(value = "username") + private String username; + + // 登录密码 + @ColumnInfo(comment = "密码", type = "varchar(200)") + @TableField(value = "password") + private String password; + + // 教练姓名 + @ColumnInfo(comment = "教练名称", type = "varchar(200)") + @TableField(value = "jiaolian_name") + private String jiaolianName; + + // 教练联系电话 + @ColumnInfo(comment = "教练手机号", type = "varchar(200)") + @TableField(value = "jiaolian_phone") + private String jiaolianPhone; + + // 教练头像存储路径 + @ColumnInfo(comment = "教练头像", type = "varchar(200)") + @TableField(value = "jiaolian_photo") + private String jiaolianPhoto; + + // 性别(0=未知,1=男,2=女) + @ColumnInfo(comment = "性别", type = "int(11)") + @TableField(value = "sex_types") + private Integer sexTypes; + + // 教练联系邮箱 + @ColumnInfo(comment = "教练邮箱", type = "varchar(200)") + @TableField(value = "jiaolian_email") + private String jiaolianEmail; + + // 教练详细描述(长文本) + @ColumnInfo(comment = "教练简介", type = "longtext") + @TableField(value = "jiaolian_content") + private String jiaolianContent; + + // 逻辑删除标记(0=正常,1=删除) + @ColumnInfo(comment = "逻辑删除", type = "int(11)") + @TableField(value = "data_delete") + private Integer dataDelete; + + // 数据插入时间(自动填充) + @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @ColumnInfo(comment = "添加时间", type = "timestamp") + @TableField(value = "insert_time", fill = FieldFill.INSERT) + private Date insertTime; + + // 记录创建时间(自动填充) + @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @ColumnInfo(comment = "创建时间", type = "timestamp") + @TableField(value = "create_time", fill = FieldFill.INSERT) + private Date createTime; + + // 获取主键ID + public Integer getId() { + return id; + } + + // 设置主键ID + public void setId(Integer id) { + this.id = id; + } + + // 获取登录账户 + public String getUsername() { + return username; + } + + // 设置登录账户 + public void setUsername(String username) { + this.username = username; + } + + // 获取登录密码 + public String getPassword() { + return password; + } + + // 设置登录密码 + public void setPassword(String password) { + this.password = password; + } + + // 获取教练姓名 + public String getJiaolianName() { + return jiaolianName; + } + + // 设置教练姓名 + public void setJiaolianName(String jiaolianName) { + this.jiaolianName = jiaolianName; + } + + // 获取联系电话 + public String getJiaolianPhone() { + return jiaolianPhone; + } + + // 设置联系电话 + public void setJiaolianPhone(String jiaolianPhone) { + this.jiaolianPhone = jiaolianPhone; + } + + // 获取头像路径 + public String getJiaolianPhoto() { + return jiaolianPhoto; + } + + // 设置头像路径 + public void setJiaolianPhoto(String jiaolianPhoto) { + this.jiaolianPhoto = jiaolianPhoto; + } + + // 获取性别类型 + public Integer getSexTypes() { + return sexTypes; + } + + // 设置性别类型 + public void setSexTypes(Integer sexTypes) { + this.sexTypes = sexTypes; + } + + // 获取联系邮箱 + public String getJiaolianEmail() { + return jiaolianEmail; + } + + // 设置联系邮箱 + public void setJiaolianEmail(String jiaolianEmail) { + this.jiaolianEmail = jiaolianEmail; + } + + // 获取教练简介 + public String getJiaolianContent() { + return jiaolianContent; + } + + // 设置教练简介 + public void setJiaolianContent(String jiaolianContent) { + this.jiaolianContent = jiaolianContent; + } + + // 获取逻辑删除状态 + public Integer getDataDelete() { + return dataDelete; + } + + // 设置逻辑删除状态 + public void setDataDelete(Integer dataDelete) { + this.dataDelete = dataDelete; + } + + // 获取数据插入时间 + public Date getInsertTime() { + return insertTime; + } + + // 设置数据插入时间 + public void setInsertTime(Date insertTime) { + this.insertTime = insertTime; + } + + // 获取记录创建时间 + public Date getCreateTime() { + return createTime; + } + + // 设置记录创建时间 + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + // 重写toString方法(返回对象字符串表示) + @Override + public String toString() { + return "Jiaolian{" + + ", id=" + id + + ", username=" + username + + ", password=" + password + + ", jiaolianName=" + jiaolianName + + ", jiaolianPhone=" + jiaolianPhone + + ", jiaolianPhoto=" + jiaolianPhoto + + ", sexTypes=" + sexTypes + + ", jiaolianEmail=" + jiaolianEmail + + ", jiaolianContent=" + jiaolianContent + + ", dataDelete=" + dataDelete + + ", insertTime=" + DateUtil.convertString(insertTime, "yyyy-MM-dd") + + ", createTime=" + DateUtil.convertString(createTime, "yyyy-MM-dd") + + "}"; + } +} \ No newline at end of file diff --git a/JiaolianVO.java b/JiaolianVO.java new file mode 100644 index 0000000..0df4ee3 --- /dev/null +++ b/JiaolianVO.java @@ -0,0 +1,198 @@ +// 包声明 +package com.entity.vo; + +// 导入原教练实体类 +import com.entity.JiaolianEntity; + +// 导入MyBatis Plus表字段注解 +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableName; + +// 导入Jackson日期格式化注解 +import com.fasterxml.jackson.annotation.JsonFormat; + +// 导入Java核心库 +import java.io.Serializable; +import java.util.Date; + +// 导入Spring日期格式化注解 +import org.springframework.format.annotation.DateTimeFormat; + +// 教练手机端接口返回实体辅助类(精简字段) +@TableName("jiaolian") +public class JiaolianVO implements Serializable { + // 序列化版本UID + private static final long serialVersionUID = 1L; + + // 主键字段(自增) + @TableField(value = "id") + private Integer id; + + // 登录账户(唯一标识) + @TableField(value = "username") + private String username; + + // 登录密码(加密存储) + @TableField(value = "password") + private String password; + + // 教练真实姓名 + @TableField(value = "jiaolian_name") + private String jiaolianName; + + // 教练联系电话 + @TableField(value = "jiaolian_phone") + private String jiaolianPhone; + + // 教练头像存储路径 + @TableField(value = "jiaolian_photo") + private String jiaolianPhoto; + + // 性别类型(0=未知,1=男,2=女) + @TableField(value = "sex_types") + private Integer sexTypes; + + // 教练联系邮箱 + @TableField(value = "jiaolian_email") + private String jiaolianEmail; + + // 教练详细介绍(支持富文本) + @TableField(value = "jiaolian_content") + private String jiaolianContent; + + // 逻辑删除标记(0=正常,1=删除) + @TableField(value = "data_delete") + private Integer dataDelete; + + // 数据入库时间(带中文时区格式化) + @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "insert_time") + private Date insertTime; + + // 记录创建时间(支持多种展示模式) + @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "create_time") + private Date createTime; + + // 获取主键ID + public Integer getId() { + return id; + } + + // 设置主键ID + public void setId(Integer id) { + this.id = id; + } + + // 获取登录账户 + public String getUsername() { + return username; + } + + // 设置登录账户 + public void setUsername(String username) { + this.username = username; + } + + // 获取登录密码 + public String getPassword() { + return password; + } + + // 设置登录密码 + public void setPassword(String password) { + this.password = password; + } + + // 获取教练姓名 + public String getJiaolianName() { + return jiaolianName; + } + + // 设置教练姓名 + public void setJiaolianName(String jiaolianName) { + this.jiaolianName = jiaolianName; + } + + // 获取联系电话 + public String getJiaolianPhone() { + return jiaolianPhone; + } + + // 设置联系电话 + public void setJiaolianPhone(String jiaolianPhone) { + this.jiaolianPhone = jiaolianPhone; + } + + // 获取头像路径 + public String getJiaolianPhoto() { + return jiaolianPhoto; + } + + // 设置头像路径 + public void setJiaolianPhoto(String jiaolianPhoto) { + this.jiaolianPhoto = jiaolianPhoto; + } + + // 获取性别类型 + public Integer getSexTypes() { + return sexTypes; + } + + // 设置性别类型 + public void setSexTypes(Integer sexTypes) { + this.sexTypes = sexTypes; + } + + // 获取联系邮箱 + public String getJiaolianEmail() { + return jiaolianEmail; + } + + // 设置联系邮箱 + public void setJiaolianEmail(String jiaolianEmail) { + this.jiaolianEmail = jiaolianEmail; + } + + // 获取详细介绍 + public String getJiaolianContent() { + return jiaolianContent; + } + + // 设置详细介绍 + public void setJiaolianContent(String jiaolianContent) { + this.jiaolianContent = jiaolianContent; + } + + // 获取逻辑删除状态 + public Integer getDataDelete() { + return dataDelete; + } + + // 设置逻辑删除状态 + public void setDataDelete(Integer dataDelete) { + this.dataDelete = dataDelete; + } + + // 获取数据入库时间 + public Date getInsertTime() { + return insertTime; + } + + // 设置数据入库时间 + public void setInsertTime(Date insertTime) { + this.insertTime = insertTime; + } + + // 获取记录创建时间(支持列表/详情/头像展示模式) + public Date getCreateTime() { + return createTime; + } + + // 设置记录创建时间 + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/JiaolianYuyueDao.java b/JiaolianYuyueDao.java new file mode 100644 index 0000000..5b8bd83 --- /dev/null +++ b/JiaolianYuyueDao.java @@ -0,0 +1,36 @@ +// 声明当前类所在的包路径,表示该类位于com.dao包下 +package com.dao; + +// 导入教练预约申请实体类,用于数据库操作 +import com.entity.JiaolianYuyueEntity; +// 导入MyBatis Plus的基础Mapper接口,提供基本的CRUD操作 +import com.baomidou.mybatisplus.mapper.BaseMapper; +// 导入List集合类,用于返回多条数据 +import java.util.List; +// 导入Map集合类,用于存储键值对参数 +import java.util.Map; +// 导入MyBatis Plus的分页插件类,用于实现分页查询 +import com.baomidou.mybatisplus.plugins.pagination.Pagination; + +// 导入Param注解,用于给Mapper接口的参数命名 +import org.apache.ibatis.annotations.Param; +// 导入教练预约申请的视图实体类,用于展示数据 +import com.entity.view.JiaolianYuyueView; + + + // 教练预约申请 Dao 接口 + //该接口继承自MyBatis Plus的BaseMapper,提供了基本的数据库操作方法 + //同时定义了自定义的查询方法用于处理教练预约申请相关的业务逻辑 + // @author 作者信息(未填写具体作者) + +public interface JiaolianYuyueDao extends BaseMapper { + + + //分页查询教练预约申请列表 + //@param page 分页对象,包含当前页码、每页显示条数等信息 + //@param params 查询参数Map集合,可以包含各种查询条件 + // @return 返回教练预约申请的视图对象列表,用于前端展示 + + List selectListView(Pagination page,@Param("params")Map params); + +} \ No newline at end of file diff --git a/JiaolianYuyueVO.java b/JiaolianYuyueVO.java new file mode 100644 index 0000000..868da61 --- /dev/null +++ b/JiaolianYuyueVO.java @@ -0,0 +1,242 @@ +// 包声明:定义当前类所在的包路径 +package com.entity; + +// 引入自定义注解-用于字段信息描述 +import com.annotation.ColumnInfo; +// 引入Java校验注解-用于参数校验 +import javax.validation.constraints.*; +// 引入JSON序列化忽略注解-用于过滤特定字段 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +// 引入反射相关异常类 +import java.lang.reflect.InvocationTargetException; +// 引入序列化接口 +import java.io.Serializable; +// 引入集合工具类 +import java.util.*; +// 引入Ant日期工具类(注:实际建议使用Java8日期API) +import org.apache.tools.ant.util.DateUtils; +// 引入日期格式注解-用于请求参数格式化 +import org.springframework.format.annotation.DateTimeFormat; +// 引入JSON格式注解-用于响应数据格式化 +import com.fasterxml.jackson.annotation.JsonFormat; +// 引入Bean操作工具类-用于对象属性拷贝 +import org.apache.commons.beanutils.BeanUtils; +// 引入MyBatis Plus字段注解 +import com.baomidou.mybatisplus.annotations.TableField; +// 引入MyBatis Plus主键注解 +import com.baomidou.mybatisplus.annotations.TableId; +// 引入MyBatis Plus表名注解 +import com.baomidou.mybatisplus.annotations.TableName; +// 引入MyBatis Plus主键类型枚举 +import com.baomidou.mybatisplus.enums.IdType; +// 引入MyBatis Plus字段填充策略枚举 +import com.baomidou.mybatisplus.enums.FieldFill; +// 引入自定义日期工具类 +import com.utils.DateUtil; +// 教练预约申请实体类 +// @author +// @email +@TableName("jiaolian_yuyue") +public class JiaolianYuyueEntity implements Serializable { + // 序列化版本UID + private static final long serialVersionUID = 1L; + + // 无参构造 + public JiaolianYuyueEntity() { + + } + + // 带参构造(通过反射拷贝属性) + public JiaolianYuyueEntity(T t) { + try { + BeanUtils.copyProperties(this, t); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + } + + // 主键 + @TableId(type = IdType.AUTO) + @ColumnInfo(comment="主键",type="int(11)") + @TableField(value = "id") + private Integer id; + + // 预约编号 + @ColumnInfo(comment="预约编号",type="varchar(200)") + @TableField(value = "jiaolian_yuyue_uuid_number") + private String jiaolianYuyueUuidNumber; + + // 关联用户ID + @ColumnInfo(comment="用户",type="int(11)") + @TableField(value = "yonghu_id") + private Integer yonghuId; + + // 预约备注 + @ColumnInfo(comment="预约备注",type="longtext") + @TableField(value = "jiaolian_yuyue_text") + private String jiaolianYuyueText; + + // 预约时间(带格式转换) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @ColumnInfo(comment="预约时间",type="timestamp") + @TableField(value = "jiaolian_yuyue_time") + private Date jiaolianYuyueTime; + + // 预约状态(0待审核 1已同意 2已拒绝) + @ColumnInfo(comment="预约状态",type="int(11)") + @TableField(value = "jiaolian_yuyue_yesno_types") + private Integer jiaolianYuyueYesnoTypes; + + // 审核回复内容 + @ColumnInfo(comment="审核回复",type="longtext") + @TableField(value = "jiaolian_yuyue_yesno_text") + private String jiaolianYuyueYesnoText; + + // 申请时间(自动填充) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @ColumnInfo(comment="申请时间",type="timestamp") + @TableField(value = "insert_time",fill = FieldFill.INSERT) + private Date insertTime; + + // 创建时间(列表展示用) + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @ColumnInfo(comment="创建时间",type="timestamp") + @TableField(value = "create_time",fill = FieldFill.INSERT) + private Date createTime; + + // id的get方法 + // 获取:主键 + public Integer getId() { + return id; + } + + // id的set方法 + // 设置:主键 + public void setId(Integer id) { + this.id = id; + } + + // 预约编号的get方法 + // 获取:预约编号 + public String getJiaolianYuyueUuidNumber() { + return jiaolianYuyueUuidNumber; + } + + // 预约编号的set方法 + // 设置:预约编号 + public void setJiaolianYuyueUuidNumber(String jiaolianYuyueUuidNumber) { + this.jiaolianYuyueUuidNumber = jiaolianYuyueUuidNumber; + } + + // 用户ID的get方法 + // 获取:用户 + public Integer getYonghuId() { + return yonghuId; + } + + // 用户ID的set方法 + // 设置:用户 + public void setYonghuId(Integer yonghuId) { + this.yonghuId = yonghuId; + } + + // 预约备注的get方法 + // 获取:预约备注 + public String getJiaolianYuyueText() { + return jiaolianYuyueText; + } + + // 预约备注的set方法 + // 设置:预约备注 + public void setJiaolianYuyueText(String jiaolianYuyueText) { + this.jiaolianYuyueText = jiaolianYuyueText; + } + + // 预约时间的get方法 + // 获取:预约时间 + public Date getJiaolianYuyueTime() { + return jiaolianYuyueTime; + } + + // 预约时间的set方法 + // 设置:预约时间 + public void setJiaolianYuyueTime(Date jiaolianYuyueTime) { + this.jiaolianYuyueTime = jiaolianYuyueTime; + } + + // 预约状态的get方法 + // 获取:预约状态 + public Integer getJiaolianYuyueYesnoTypes() { + return jiaolianYuyueYesnoTypes; + } + + // 预约状态的set方法 + // 设置:预约状态 + public void setJiaolianYuyueYesnoTypes(Integer jiaolianYuyueYesnoTypes) { + this.jiaolianYuyueYesnoTypes = jiaolianYuyueYesnoTypes; + } + + // 审核回复的get方法 + // 获取:审核回复 + public String getJiaolianYuyueYesnoText() { + return jiaolianYuyueYesnoText; + } + + // 审核回复的set方法 + // 设置:审核回复 + public void setJiaolianYuyueYesnoText(String jiaolianYuyueYesnoText) { + this.jiaolianYuyueYesnoText = jiaolianYuyueYesnoText; + } + + // 申请时间的get方法 + // 获取:申请时间 + public Date getInsertTime() { + return insertTime; + } + + // 申请时间的set方法 + // 设置:申请时间 + public void setInsertTime(Date insertTime) { + this.insertTime = insertTime; + } + + // 创建时间的get方法 + // 获取:创建时间 listShow + public Date getCreateTime() { + return createTime; + } + + // 创建时间的set方法 + // 设置:创建时间 listShow + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + // toString方法(实体对象字符串表示) + @Override + public String toString() { + return "JiaolianYuyue{" + + // 主键字段 + ", id=" + id + + // 预约编号字段 + ", jiaolianYuyueUuidNumber=" + jiaolianYuyueUuidNumber + + // 用户ID字段 + ", yonghuId=" + yonghuId + + // 预约备注字段 + ", jiaolianYuyueText=" + jiaolianYuyueText + + // 预约时间字段(格式化) + ", jiaolianYuyueTime=" + DateUtil.convertString(jiaolianYuyueTime,"yyyy-MM-dd") + + // 预约状态字段 + ", jiaolianYuyueYesnoTypes=" + jiaolianYuyueYesnoTypes + + // 审核回复字段 + ", jiaolianYuyueYesnoText=" + jiaolianYuyueYesnoText + + // 申请时间字段(格式化) + ", insertTime=" + DateUtil.convertString(insertTime,"yyyy-MM-dd") + + // 创建时间字段(格式化) + ", createTime=" + DateUtil.convertString(createTime,"yyyy-MM-dd") + + "}"; + } +} \ No newline at end of file diff --git a/NewsDao.java b/NewsDao.java new file mode 100644 index 0000000..1697ef1 --- /dev/null +++ b/NewsDao.java @@ -0,0 +1,35 @@ +// 声明当前文件所属的包路径,表示该接口位于com.dao包下 +package com.dao; + +// 导入新闻实体类,用于数据库表映射 +import com.entity.NewsEntity; +// 导入MyBatis Plus的基础Mapper接口,提供基本CRUD操作 +import com.baomidou.mybatisplus.mapper.BaseMapper; +// 导入Java的List集合类 +import java.util.List; +// 导入Java的Map集合类,用于键值对存储 +import java.util.Map; +// 导入MyBatis Plus的分页插件类 +import com.baomidou.mybatisplus.plugins.pagination.Pagination; + +// 导入MyBatis的参数注解,用于标识方法参数 +import org.apache.ibatis.annotations.Param; +// 导入新闻视图实体类,用于展示层数据 +import com.entity.view.NewsView; + + + // 健身资讯 Dao 接口 + //定义数据库访问层操作方法 + // @author // 作者信息(未填写) + +public interface NewsDao extends BaseMapper { + + + //分页查询新闻资讯列表视图 + //@param page 分页参数对象,包含当前页、每页数量等信息 + // @param params 查询条件参数Map集合 + // @return 返回新闻视图对象列表 + + List selectListView(Pagination page,@Param("params")Map params); + +} \ No newline at end of file diff --git a/NewsVO.java b/NewsVO.java new file mode 100644 index 0000000..486afd7 --- /dev/null +++ b/NewsVO.java @@ -0,0 +1,128 @@ +// 包声明 +package com.entity.vo; + +// 导入原资讯实体类 +import com.entity.NewsEntity; + +// 导入MyBatis Plus表字段注解 +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableName; + +// 导入Jackson日期格式化注解 +import com.fasterxml.jackson.annotation.JsonFormat; + +// 导入Java核心库 +import java.io.Serializable; +import java.util.Date; + +// 导入Spring日期格式化注解 +import org.springframework.format.annotation.DateTimeFormat; + +// 健身资讯手机端接口返回实体辅助类(精简字段) +@TableName("news") +public class NewsVO implements Serializable { + // 序列化版本UID + private static final long serialVersionUID = 1L; + + // 主键字段 + @TableField(value = "id") + private Integer id; + + // 资讯标题(最大长度200) + @TableField(value = "news_name") + private String newsName; + + // 资讯类型标识(通过数字表示不同类型) + @TableField(value = "news_types") + private Integer newsTypes; + + // 资讯封面图存储路径 + @TableField(value = "news_photo") + private String newsPhoto; + + // 数据添加时间(带中文时区格式化) + @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "insert_time") + private Date insertTime; + + // 资讯详细内容(HTML格式文本) + @TableField(value = "news_content") + private String newsContent; + + // 记录创建时间(带格式化注解) + @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "create_time") + private Date createTime; + + // 获取主键ID + public Integer getId() { + return id; + } + + // 设置主键ID + public void setId(Integer id) { + this.id = id; + } + + // 获取资讯标题 + public String getNewsName() { + return newsName; + } + + // 设置资讯标题 + public void setNewsName(String newsName) { + this.newsName = newsName; + } + + // 获取资讯类型标识 + public Integer getNewsTypes() { + return newsTypes; + } + + // 设置资讯类型标识 + public void setNewsTypes(Integer newsTypes) { + this.newsTypes = newsTypes; + } + + // 获取封面图路径 + public String getNewsPhoto() { + return newsPhoto; + } + + // 设置封面图路径 + public void setNewsPhoto(String newsPhoto) { + this.newsPhoto = newsPhoto; + } + + // 获取数据添加时间 + public Date getInsertTime() { + return insertTime; + } + + // 设置数据添加时间 + public void setInsertTime(Date insertTime) { + this.insertTime = insertTime; + } + + // 获取资讯详细内容 + public String getNewsContent() { + return newsContent; + } + + // 设置资讯详细内容 + public void setNewsContent(String newsContent) { + this.newsContent = newsContent; + } + + // 获取记录创建时间(支持多种显示格式) + public Date getCreateTime() { + return createTime; + } + + // 设置记录创建时间 + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/SingleSeachDao.java b/SingleSeachDao.java new file mode 100644 index 0000000..02beebf --- /dev/null +++ b/SingleSeachDao.java @@ -0,0 +1,34 @@ +// 声明当前文件所属的包路径,表示该接口位于com.dao包下 +package com.dao; + +// 导入单页数据实体类,用于数据库表映射 +import com.entity.SingleSeachEntity; +// 导入MyBatis Plus的基础Mapper接口,提供基本CRUD操作 +import com.baomidou.mybatisplus.mapper.BaseMapper; +// 导入Java的List集合类,用于存储查询结果列表 +import java.util.List; +// 导入Java的Map集合类,用于存储键值对形式的查询参数 +import java.util.Map; +// 导入MyBatis Plus的分页插件类,用于实现分页查询 +import com.baomidou.mybatisplus.plugins.pagination.Pagination; + +// 导入MyBatis的参数注解,用于标识方法参数 +import org.apache.ibatis.annotations.Param; +// 导入单页数据视图实体类,用于展示层数据 +import com.entity.view.SingleSeachView; + + + //单页数据 Dao 接口 + //定义数据库访问层操作方法 + //@author // 作者信息(未填写) + +public interface SingleSeachDao extends BaseMapper { + + //分页查询单页数据列表视图 + // @param page 分页参数对象,包含当前页、每页数量等信息 + //@param params 查询条件参数Map集合 + //@return 返回单页数据视图对象列表 + + List selectListView(Pagination page,@Param("params")Map params); + +} diff --git a/SingleSeachVO.java b/SingleSeachVO.java new file mode 100644 index 0000000..003400c --- /dev/null +++ b/SingleSeachVO.java @@ -0,0 +1,112 @@ +// 包声明 +package com.entity.vo; + +// 导入原实体类 +import com.entity.SingleSeachEntity; + +// 导入MyBatis Plus表字段注解 +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableName; + +// 导入Jackson日期格式化注解 +import com.fasterxml.jackson.annotation.JsonFormat; + +// 导入Java核心库 +import java.io.Serializable; +import java.util.Date; + +// 导入Spring日期格式化注解 +import org.springframework.format.annotation.DateTimeFormat; + +// 单页数据手机端接口返回实体辅助类(精简字段) +@TableName("single_seach") +public class SingleSeachVO implements Serializable { + // 序列化版本UID + private static final long serialVersionUID = 1L; + + // 主键字段 + @TableField(value = "id") + private Integer id; + + // 数据项名称 + @TableField(value = "single_seach_name") + private String singleSeachName; + + // 数据类型标识(通过数字表示不同类型) + @TableField(value = "single_seach_types") + private Integer singleSeachTypes; + + // 关联图片存储路径 + @TableField(value = "single_seach_photo") + private String singleSeachPhoto; + + // 数据内容(长文本) + @TableField(value = "single_seach_content") + private String singleSeachContent; + + // 记录创建时间(带格式化注解) + @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "create_time") + private Date createTime; + + // 获取主键ID + public Integer getId() { + return id; + } + + // 设置主键ID + public void setId(Integer id) { + this.id = id; + } + + // 获取数据项名称 + public String getSingleSeachName() { + return singleSeachName; + } + + // 设置数据项名称 + public void setSingleSeachName(String singleSeachName) { + this.singleSeachName = singleSeachName; + } + + // 获取数据类型标识 + public Integer getSingleSeachTypes() { + return singleSeachTypes; + } + + // 设置数据类型标识 + public void setSingleSeachTypes(Integer singleSeachTypes) { + this.singleSeachTypes = singleSeachTypes; + } + + // 获取图片路径 + public String getSingleSeachPhoto() { + return singleSeachPhoto; + } + + // 设置图片路径 + public void setSingleSeachPhoto(String singleSeachPhoto) { + this.singleSeachPhoto = singleSeachPhoto; + } + + // 获取数据内容 + public String getSingleSeachContent() { + return singleSeachContent; + } + + // 设置数据内容 + public void setSingleSeachContent(String singleSeachContent) { + this.singleSeachContent = singleSeachContent; + } + + // 获取创建时间(带中文时区格式化) + public Date getCreateTime() { + return createTime; + } + + // 设置创建时间 + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/TokenDao.java b/TokenDao.java new file mode 100644 index 0000000..b61c552 --- /dev/null +++ b/TokenDao.java @@ -0,0 +1,39 @@ +// 声明当前文件所属的包路径,表示该接口位于com.dao包下 +package com.dao; + +// 导入Java的List集合类,用于存储查询结果列表 +import java.util.List; + +// 导入MyBatis的参数注解,用于标识方法参数 +import org.apache.ibatis.annotations.Param; + +// 导入MyBatis Plus的基础Mapper接口,提供基本CRUD操作 +import com.baomidou.mybatisplus.mapper.BaseMapper; +// 导入MyBatis Plus的条件构造器Wrapper,用于动态SQL条件拼接 +import com.baomidou.mybatisplus.mapper.Wrapper; +// 导入MyBatis Plus的分页插件类,用于分页查询 +import com.baomidou.mybatisplus.plugins.pagination.Pagination; +// 导入Token实体类,用于数据库表映射 +import com.entity.TokenEntity; + + + // Token数据访问层接口 + //定义Token相关的数据库操作方法 + +public interface TokenDao extends BaseMapper { + + + //查询Token列表(不带分页) + //@param wrapper 条件构造器,用于动态SQL条件拼接 + //@return 返回Token实体对象列表 + + List selectListView(@Param("ew") Wrapper wrapper); + + + //查询Token列表(带分页) + //@param page 分页参数对象,包含当前页、每页数量等信息 + //@param wrapper 条件构造器,用于动态SQL条件拼接 + // @return 返回Token实体对象列表 + + List selectListView(Pagination page, @Param("ew") Wrapper wrapper); +} \ No newline at end of file diff --git a/UsersDao.java b/UsersDao.java new file mode 100644 index 0000000..e074ba9 --- /dev/null +++ b/UsersDao.java @@ -0,0 +1,40 @@ +// 声明当前文件所属的包路径,表示该接口位于com.dao包下 +package com.dao; + +// 导入Java的List集合类,用于存储查询结果列表 +import java.util.List; + +// 导入MyBatis的参数注解,用于标识方法参数 +import org.apache.ibatis.annotations.Param; + +// 导入MyBatis Plus的基础Mapper接口,提供基本CRUD操作 +import com.baomidou.mybatisplus.mapper.BaseMapper; +// 导入MyBatis Plus的条件构造器Wrapper,用于动态SQL条件拼接 +import com.baomidou.mybatisplus.mapper.Wrapper; +// 导入MyBatis Plus的分页插件类,用于分页查询 +import com.baomidou.mybatisplus.plugins.pagination.Pagination; +// 导入用户实体类,用于数据库表映射 +import com.entity.UsersEntity; + + + // 用户数据访问层接口 + // 定义用户相关的数据库操作方法 + +public interface UsersDao extends BaseMapper { + + + // 查询用户列表(不带分页) + //@param wrapper 条件构造器,用于动态SQL条件拼接 + //@return 返回用户实体对象列表 + + List selectListView(@Param("ew") Wrapper wrapper); + + + // 分页查询用户列表 + // @param page 分页参数对象,包含当前页、每页数量等信息 + //@param wrapper 条件构造器,用于动态SQL条件拼接 + //@return 返回用户实体对象列表 + + List selectListView(Pagination page, @Param("ew") Wrapper wrapper); + +} \ No newline at end of file diff --git a/YonghuDao.java b/YonghuDao.java new file mode 100644 index 0000000..fb10c8b --- /dev/null +++ b/YonghuDao.java @@ -0,0 +1,35 @@ +// 声明当前文件所属的包路径,表示该接口位于com.dao包下 +package com.dao; + +// 导入用户实体类,用于数据库表映射 +import com.entity.YonghuEntity; +// 导入MyBatis Plus的基础Mapper接口,提供基本CRUD操作 +import com.baomidou.mybatisplus.mapper.BaseMapper; +// 导入Java的List集合类 +import java.util.List; +// 导入Java的Map集合类,用于键值对存储 +import java.util.Map; +// 导入MyBatis Plus的分页插件类 +import com.baomidou.mybatisplus.plugins.pagination.Pagination; + +// 导入MyBatis的参数注解,用于标识方法参数 +import org.apache.ibatis.annotations.Param; +// 导入用户视图实体类,用于展示层数据 +import com.entity.view.YonghuView; + + + //用户 Dao 接口 + //定义用户数据访问层操作方法 + // @author // 作者信息(未填写) + +public interface YonghuDao extends BaseMapper { + + + //分页查询用户列表视图 + //@param page 分页参数对象,包含当前页、每页数量等信息 + // @param params 查询条件参数Map集合 + //@return 返回用户视图对象列表 + + List selectListView(Pagination page,@Param("params")Map params); + +} diff --git a/YonghuEntity.java b/YonghuEntity.java new file mode 100644 index 0000000..3f7bced --- /dev/null +++ b/YonghuEntity.java @@ -0,0 +1,273 @@ +// 包声明 + package com.entity; + +// 导入Java核心库 +import java.io.Serializable; +import java.lang.reflect.InvocationTargetException; +import java.util.Date; + +// 导入校验相关注解 +import javax.validation.constraints.*; + +// 导入Jackson注解 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonFormat; + +// 导入Apache工具类 +import org.apache.tools.ant.util.DateUtils; +import org.apache.commons.beanutils.BeanUtils; + +// 导入Spring框架注解 +import org.springframework.format.annotation.DateTimeFormat; + +// 导入MyBatis Plus注解 +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import com.baomidou.mybatisplus.enums.FieldFill; + +// 导入自定义注解和工具类 +import com.annotation.ColumnInfo; +import com.utils.DateUtil; + +// 用户实体类(对应数据库表yonghu) +@TableName("yonghu") +public class YonghuEntity implements Serializable { + // 序列化版本UID + private static final long serialVersionUID = 1L; + + // 无参构造方法 + public YonghuEntity() { + } + + // 带泛型参数的构造方法(通过BeanUtils进行属性拷贝) + public YonghuEntity(T t) { + try { + BeanUtils.copyProperties(this, t); + } catch (IllegalAccessException | InvocationTargetException e) { + // 异常处理(打印堆栈跟踪) + e.printStackTrace(); + } + } + + // 主键(自增) + @TableId(type = IdType.AUTO) + @ColumnInfo(comment = "主键", type = "int(11)") + @TableField(value = "id") + private Integer id; + + // 用户账户 + @ColumnInfo(comment = "账户", type = "varchar(200)") + @TableField(value = "username") + private String username; + + // 登录密码 + @ColumnInfo(comment = "密码", type = "varchar(200)") + @TableField(value = "password") + private String password; + + // 用户真实姓名 + @ColumnInfo(comment = "用户名称", type = "varchar(200)") + @TableField(value = "yonghu_name") + private String yonghuName; + + // 用户手机号码 + @ColumnInfo(comment = "用户手机号", type = "varchar(200)") + @TableField(value = "yonghu_phone") + private String yonghuPhone; + + // 用户身份证号码 + @ColumnInfo(comment = "用户身份证号", type = "varchar(200)") + @TableField(value = "yonghu_id_number") + private String yonghuIdNumber; + + // 用户头像存储路径 + @ColumnInfo(comment = "用户头像", type = "varchar(200)") + @TableField(value = "yonghu_photo") + private String yonghuPhoto; + + // 性别(0=未知,1=男,2=女) + @ColumnInfo(comment = "性别", type = "int(11)") + @TableField(value = "sex_types") + private Integer sexTypes; + + // 用户电子邮箱 + @ColumnInfo(comment = "用户邮箱", type = "varchar(200)") + @TableField(value = "yonghu_email") + private String yonghuEmail; + + // 账户余额(十进制类型) + @ColumnInfo(comment = "现有余额", type = "decimal(10,2)") + @TableField(value = "new_money") + private Double newMoney; + + // 逻辑删除标记(0=正常,1=删除) + @ColumnInfo(comment = "逻辑删除", type = "int(11)") + @TableField(value = "data_delete") + private Integer dataDelete; + + // 数据插入时间(自动填充) + @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @ColumnInfo(comment = "添加时间", type = "timestamp") + @TableField(value = "insert_time", fill = FieldFill.INSERT) + private Date insertTime; + + // 记录创建时间(自动填充) + @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @ColumnInfo(comment = "创建时间", type = "timestamp") + @TableField(value = "create_time", fill = FieldFill.INSERT) + private Date createTime; + + // 获取主键ID + public Integer getId() { + return id; + } + + // 设置主键ID + public void setId(Integer id) { + this.id = id; + } + + // 获取用户账户 + public String getUsername() { + return username; + } + + // 设置用户账户 + public void setUsername(String username) { + this.username = username; + } + + // 获取登录密码 + public String getPassword() { + return password; + } + + // 设置登录密码 + public void setPassword(String password) { + this.password = password; + } + + // 获取用户真实姓名 + public String getYonghuName() { + return yonghuName; + } + + // 设置用户真实姓名 + public void setYonghuName(String yonghuName) { + this.yonghuName = yonghuName; + } + + // 获取用户手机号 + public String getYonghuPhone() { + return yonghuPhone; + } + + // 设置用户手机号 + public void setYonghuPhone(String yonghuPhone) { + this.yonghuPhone = yonghuPhone; + } + + // 获取身份证号码 + public String getYonghuIdNumber() { + return yonghuIdNumber; + } + + // 设置身份证号码 + public void setYonghuIdNumber(String yonghuIdNumber) { + this.yonghuIdNumber = yonghuIdNumber; + } + + // 获取头像路径 + public String getYonghuPhoto() { + return yonghuPhoto; + } + + // 设置头像路径 + public void setYonghuPhoto(String yonghuPhoto) { + this.yonghuPhoto = yonghuPhoto; + } + + // 获取性别类型 + public Integer getSexTypes() { + return sexTypes; + } + + // 设置性别类型 + public void setSexTypes(Integer sexTypes) { + this.sexTypes = sexTypes; + } + + // 获取用户邮箱 + public String getYonghuEmail() { + return yonghuEmail; + } + + // 设置用户邮箱 + public void setYonghuEmail(String yonghuEmail) { + this.yonghuEmail = yonghuEmail; + } + + // 获取账户余额 + public Double getNewMoney() { + return newMoney; + } + + // 设置账户余额 + public void setNewMoney(Double newMoney) { + this.newMoney = newMoney; + } + + // 获取逻辑删除状态 + public Integer getDataDelete() { + return dataDelete; + } + + // 设置逻辑删除状态 + public void setDataDelete(Integer dataDelete) { + this.dataDelete = dataDelete; + } + + // 获取数据插入时间 + public Date getInsertTime() { + return insertTime; + } + + // 设置数据插入时间 + public void setInsertTime(Date insertTime) { + this.insertTime = insertTime; + } + + // 获取记录创建时间 + public Date getCreateTime() { + return createTime; + } + + // 设置记录创建时间 + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + // 重写toString方法(返回对象字符串表示) + @Override + public String toString() { + return "Yonghu{" + + ", id=" + id + + ", username=" + username + + ", password=" + password + + ", yonghuName=" + yonghuName + + ", yonghuPhone=" + yonghuPhone + + ", yonghuIdNumber=" + yonghuIdNumber + + ", yonghuPhoto=" + yonghuPhoto + + ", sexTypes=" + sexTypes + + ", yonghuEmail=" + yonghuEmail + + ", newMoney=" + newMoney + + ", dataDelete=" + dataDelete + + ", insertTime=" + DateUtil.convertString(insertTime, "yyyy-MM-dd") + + ", createTime=" + DateUtil.convertString(createTime, "yyyy-MM-dd") + + "}"; + } +} \ No newline at end of file diff --git a/YonghuVO.java b/YonghuVO.java new file mode 100644 index 0000000..c4fccd2 --- /dev/null +++ b/YonghuVO.java @@ -0,0 +1,212 @@ +// 包声明 +package com.entity.vo; + +// 导入原用户实体类 +import com.entity.YonghuEntity; + +// 导入MyBatis Plus表字段注解 +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableName; + +// 导入Jackson日期格式化注解 +import com.fasterxml.jackson.annotation.JsonFormat; + +// 导入Java核心库 +import java.io.Serializable; +import java.util.Date; + +// 导入Spring日期格式化注解 +import org.springframework.format.annotation.DateTimeFormat; + +// 用户手机端接口返回实体辅助类(精简字段) +@TableName("yonghu") +public class YonghuVO implements Serializable { + // 序列化版本UID + private static final long serialVersionUID = 1L; + + // 主键字段 + @TableField(value = "id") + private Integer id; + + // 用户登录账户 + @TableField(value = "username") + private String username; + + // 用户登录密码 + @TableField(value = "password") + private String password; + + // 用户真实姓名 + @TableField(value = "yonghu_name") + private String yonghuName; + + // 用户手机号码 + @TableField(value = "yonghu_phone") + private String yonghuPhone; + + // 用户身份证号码 + @TableField(value = "yonghu_id_number") + private String yonghuIdNumber; + + // 用户头像存储路径 + @TableField(value = "yonghu_photo") + private String yonghuPhoto; + + // 性别类型(0=未知,1=男,2=女) + @TableField(value = "sex_types") + private Integer sexTypes; + + // 用户电子邮箱 + @TableField(value = "yonghu_email") + private String yonghuEmail; + + // 用户账户余额 + @TableField(value = "new_money") + private Double newMoney; + + // 逻辑删除标记(0=正常,1=删除) + @TableField(value = "data_delete") + private Integer dataDelete; + + // 数据插入时间(带格式化注解) + @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "insert_time") + private Date insertTime; + + // 记录创建时间(带格式化注解) + @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat + @TableField(value = "create_time") + private Date createTime; + + // 获取主键ID + public Integer getId() { + return id; + } + + // 设置主键ID + public void setId(Integer id) { + this.id = id; + } + + // 获取登录账户 + public String getUsername() { + return username; + } + + // 设置登录账户 + public void setUsername(String username) { + this.username = username; + } + + // 获取登录密码 + public String getPassword() { + return password; + } + + // 设置登录密码 + public void setPassword(String password) { + this.password = password; + } + + // 获取用户真实姓名 + public String getYonghuName() { + return yonghuName; + } + + // 设置用户真实姓名 + public void setYonghuName(String yonghuName) { + this.yonghuName = yonghuName; + } + + // 获取手机号码 + public String getYonghuPhone() { + return yonghuPhone; + } + + // 设置手机号码 + public void setYonghuPhone(String yonghuPhone) { + this.yonghuPhone = yonghuPhone; + } + + // 获取身份证号码 + public String getYonghuIdNumber() { + return yonghuIdNumber; + } + + // 设置身份证号码 + public void setYonghuIdNumber(String yonghuIdNumber) { + this.yonghuIdNumber = yonghuIdNumber; + } + + // 获取头像路径 + public String getYonghuPhoto() { + return yonghuPhoto; + } + + // 设置头像路径 + public void setYonghuPhoto(String yonghuPhoto) { + this.yonghuPhoto = yonghuPhoto; + } + + // 获取性别类型 + public Integer getSexTypes() { + return sexTypes; + } + + // 设置性别类型 + public void setSexTypes(Integer sexTypes) { + this.sexTypes = sexTypes; + } + + // 获取电子邮箱 + public String getYonghuEmail() { + return yonghuEmail; + } + + // 设置电子邮箱 + public void setYonghuEmail(String yonghuEmail) { + this.yonghuEmail = yonghuEmail; + } + + // 获取账户余额 + public Double getNewMoney() { + return newMoney; + } + + // 设置账户余额 + public void setNewMoney(Double newMoney) { + this.newMoney = newMoney; + } + + // 获取逻辑删除状态 + public Integer getDataDelete() { + return dataDelete; + } + + // 设置逻辑删除状态 + public void setDataDelete(Integer dataDelete) { + this.dataDelete = dataDelete; + } + + // 获取数据插入时间 + public Date getInsertTime() { + return insertTime; + } + + // 设置数据插入时间 + public void setInsertTime(Date insertTime) { + this.insertTime = insertTime; + } + + // 获取记录创建时间 + public Date getCreateTime() { + return createTime; + } + + // 设置记录创建时间 + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file