当前位置: 首页 > news >正文

嘉兴微网站建设网站代运营方案

嘉兴微网站建设,网站代运营方案,网站推广软件推荐,商城网站后台管理系统1.前期设计 一般看来#xff0c;网盘系统主要实体包括#xff1a;用户、存储信息、用户文件、文件、回收文件等基本功能点。 各实体对应的表结构如下所示#xff1a; 表名#xff1a;user#xff08;用户表#xff09; 字段名属性说明userIdbigint主键usernamevarcha…1.前期设计 一般看来网盘系统主要实体包括用户、存储信息、用户文件、文件、回收文件等基本功能点。 各实体对应的表结构如下所示 表名user用户表 字段名属性说明userIdbigint主键usernamevarchar用户名passwordvarchar密码telephonevarchar手机号saltvarchar盐值registerTimevarchar注册时间 表名userfile 用户文件表 字段名属性说明userFileIdbigint用户文件 iduserIdbigint用户 idfileIdbigint文件 idfileNamevarchar文件名filePathvarchar文件路径extendNamevarchar扩展名isDirint是否时目录uploadTimevarchar上传时间deleteFlagint删除标志deleteTimevarchar删除时间deleteBatchNumvarchar删除批次号 表名file 文件表 字段名属性说明fileIdbigint文件 idtimeStampNamevarchar时间戳名fileUrlvarchar文件 urlfileSizebigint文件大小storageTypeint存储类型identifiervarcharmd5 唯一标识pointCountint引用数量 表名storage 存储信息表 字段名属性说明storageIdbigint存储信息 iduserIdbigint用户 idstorageSizebigint存储大小 表名recoveryfile 回收文件表 字段名属性说明recoveryFileIdbigint回收文件 iduserFileIdbigint用户文件 iddeleteTimevarchar删除时间deleteBatchNumvarchar删除批次号 2.创建项目 2.1 文件与用户 网盘系统主要功能就是对文件进行管理因此这里就需要对网盘文件进行分类。 文件分为普通文件和目录文件。普通文件是真实存在的保存在磁盘上因此它具有真实的文件路径和大小。目录文件是虚拟的它存在的目的是对普通文件进行分类归档。 在一个网盘系统中首先实现用户登录登录的用户就可以对文件进行管理最主要的功能为 文件的上传删除修改文件名文件列表展示。文件的移动文件的复制等。 在一个网盘系统一个用户可以拥有多个文件一个文件被多个用户所拥有。 2.2 JPA建表 JPAJava Persistence API)中文名 Java 持久层 API是 Java 持久化规范这里可以使用这个工具建立一个 Java 数据模型与数据库表结构之间的一种关系并将 Java 的数据模型映射到数据库并建立数据库表结构。 2.2.1 添加依赖 pom.xml ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.shiyanlou.file/groupIdartifactIdqiwen-file/artifactIdversion1.0.0-SNAPSHOT/versionpackagingjar/packagingparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.4.1/version/parentdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jdbc/artifactId/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdscoperuntime/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency/dependencies/project2.2.2 添加配置文件 application.properties spring.datasource.urljdbc:mysql://localhost:3306/springboot-file spring.datasource.usernameroot spring.datasource.password12345678# 配置日志保存路径 logging.file.name/Users/xuzhi/java-projects/java-WangPan/log # 配置日志级别 logging.level.rootinfo#jpa 配置 spring.jpa.properties.hibernate.hbm2ddl.autoupdate spring.jpa.properties.hibernate.dialectorg.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.show-sqltrue spring.jpa.hibernate.naming.physical-strategyorg.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl2.2.3 创建实体类 创建entity包在该包下创建对应的实体类。 File.java import lombok.Data; import javax.persistence.*;Data Table(name file) Entity public class File {IdGeneratedValue(strategy GenerationType.IDENTITY)Column(columnDefinitionbigint(20) comment 文件id)private Long fileId;Column(columnDefinitionvarchar(500) comment 时间戳名称)private String timeStampName;Column(columnDefinitionvarchar(500) comment 文件url)private String fileUrl;Column(columnDefinitionbigint(10) comment 文件大小)private Long fileSize; }User.java import lombok.Data; import javax.persistence.*;Data Table(name user) Entity public class User {IdGeneratedValue(strategy GenerationType.IDENTITY)Column(columnDefinition bigint(20) comment 用户id)private Long userId;Column(columnDefinition varchar(30) comment 用户名)private String username;Column(columnDefinition varchar(35) comment 密码)private String password;Column(columnDefinition varchar(15) comment 手机号码)private String telephone;Column(columnDefinition varchar(20) comment 盐值)private String salt;Column(columnDefinition varchar(30) comment 注册时间)private String registerTime; }UserFile.java import lombok.Data; import javax.persistence.*;Data Table(name userfile, uniqueConstraints {UniqueConstraint(name fileindex, columnNames {fileName, filePath, extendName})}) Entity public class UserFile {IdGeneratedValue(strategy GenerationType.IDENTITY)Column(columnDefinition bigint(20) comment 用户文件id)private Long userFileId;Column(columnDefinition bigint(20) comment 用户id)private Long userId;Column(columnDefinitionbigint(20) comment 文件id)private Long fileId;Column(columnDefinitionvarchar(100) comment 文件名)private String fileName;Column(columnDefinitionvarchar(500) comment 文件路径)private String filePath;Column(columnDefinitionvarchar(100) comment 扩展名)private String extendName;Column(columnDefinitionint(1) comment 是否是目录 0-否, 1-是)private Integer isDir;Column(columnDefinitionvarchar(25) comment 上传时间)private String uploadTime; }在JPA中主要的注解作用如下 Entity 表明该类是一个实体类添加了该注解后才能被 jpa 扫描到Table 可以自定义表名让实体类的类名和数据库中表名进行对应Id 用来声明主键GeneratedValue 设置主键生成方式主要有四种类型这里将 strategy 属性设置为 GenerationType.IDENTITY表明主键由数据库生成为自动增长型Column 可以自定义列名或者定义其他的数据类型 接着启动项目就会在数据库中创建对应的表。 3.整合MyBatis与MyBatis plus 在完整的项目中一般会使用成熟的持久层框架来操作数据库这里就选用mybatis和mybatis plus进行持久层操作。 3.1 添加依赖 dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion2.1.1/version/dependencydependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.4.1/version/dependency3.2 添加配置 # mybatis配置 mybatis.config-locationclasspath:mybatis/mybatis-config.xml mybatis.mapper-locationsclasspath:mybatis/mapper/*.xmlmybatis-plus.mapper-locationsclasspath:mybatis/mapper/*.xml mybatis-plus.configuration.map-underscore-to-camel-casefalse在启动类上添加MapperScan注解用于指定扫描的mapper接口。 3.3 创建mapper接口 创建mapper包在该包下创建实体类对应的mapper接口。 FileMapper public interface FileMapper {}UserfileMapper public interface UserfileMapper {}UserMapper import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.picacho.entity.User;import java.util.List;public interface UserMapper extends BaseMapperUser {void insertUser(User user);ListUser selectUser(); }在 resources 文件夹下创建mybatis文件夹并在该文件夹下创建配置文件 mybatis-config.xml 该配置文件主要用来指定 MyBatis 基础配置文件和实体类映射文件的地址。 ?xml version1.0 encodingUTF-8 ? !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtdconfigurationtypeAliasestypeAlias aliasInteger typejava.lang.Integer /typeAlias aliasLong typejava.lang.Long /typeAlias aliasHashMap typejava.util.HashMap /typeAlias aliasLinkedHashMap typejava.util.LinkedHashMap /typeAlias aliasArrayList typejava.util.ArrayList /typeAlias aliasLinkedList typejava.util.LinkedList //typeAliases /configuration3.4 创建mapper对应的xml文件 在mybatis文件夹下创建mapper文件夹在该文件夹下创建UserMapper.xml文件。 ?xml version1.0 encodingUTF-8?!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtdmapper namespacecom.picacho.mapper.UserMapperinsert idinsertUser parameterTypecom.picacho.entity.Userinsert into user (username, password, telephone)value (#{username}, #{password}, #{telephone})/insertselect idselectUser resultTypecom.picacho.entity.Userselect * from user/select /mapper3.5 进行测试 Autowiredprivate UserMapper userMapper;Testpublic void testInsert() {User user new User();user.setUsername(picacho1);user.setPassword(123456);user.setTelephone(12345566789);userMapper.insertUser(user);System.out.println(数据库字段查询结果显示);ListUser list userMapper.selectUser();list.forEach(System.out::println);}3.6 使用MyBatis Plus功能 在之前已经创建的三个实体类中需要添加 MyBatis Plus相关注解这里需要用到的注解有两个分别是 TableName 和 TableId。 TableName(“表名”) 实体类添加如果不添加会按照默认规则进行表明的映射比如 UserTable-user_tableTableId(type IdType.AUTO) 用来标注实体类主键 使用mybatis plus自带的方法实现测试。 Testpublic void testInsert2() {User user new User();user.setUsername(picacho2);user.setPassword(123456);user.setTelephone(123456678);userMapper.insert(user);ListUser list userMapper.selectList(null);System.out.println(数据库字段查询结果显示);list.forEach(System.out::println);}测试结果 4.统一返回结果封装 在前后端分离的项目中一般需要统一封装响应的结果。 首先就需要定义响应码对应的枚举类。创建common包在该包下创建状态码枚举类ResultCodeEnum.java。 import lombok.Getter;/*** 结果类枚举*/ Getter public enum ResultCodeEnum {SUCCESS(true,200,成功),UNKNOWN_ERROR(false,201,未知错误),PARAM_ERROR(false,202,参数错误),NULL_POINT(false, 203, 空指针异常),INDEX_OUT_OF_BOUNDS(false, 204, 下标越界异常),;// 响应是否成功private Boolean success;// 响应状态码private Integer code;// 响应信息private String message;ResultCodeEnum(boolean success, Integer code, String message) {this.success success;this.code code;this.message message;} }接着需要创建统一结果返回类RestResult.java。 import lombok.Data;/*** 统一结果返回** param T*/ Data public class RestResultT {private Boolean success true;private Integer code;private String message;private T data;// 通用返回成功public static RestResult success() {RestResult r new RestResult();r.setSuccess(ResultCodeEnum.SUCCESS.getSuccess());r.setCode(ResultCodeEnum.SUCCESS.getCode());r.setMessage(ResultCodeEnum.SUCCESS.getMessage());return r;}// 通用返回失败未知错误public static RestResult fail() {RestResult r new RestResult();r.setSuccess(ResultCodeEnum.UNKNOWN_ERROR.getSuccess());r.setCode(ResultCodeEnum.UNKNOWN_ERROR.getCode());r.setMessage(ResultCodeEnum.UNKNOWN_ERROR.getMessage());return r;} }4.1 测试效果 添加控制器测试通用统一返回结果的效果。创建controller包在该包下创建控制器UserController.java。 import com.picacho.common.RestResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController;RestController RequestMapping(/user) public class UserController {/*** 成功响应测试*/GetMapping(value/testSuccess)ResponseBodypublic RestResult testSuccess(){return RestResult.success();}/*** 失败响应测试*/GetMapping(value/testFail)ResponseBodypublic RestResult testFail(){return RestResult.fail();} }启动项目测试其效果 这里返回通用的情况但是有时候会有一种情况我们需要给前端返回自定义消息的响应结果。因此需要在RestResult.java添加自定义的返回方法。 // 自定义返回数据public RestResult data(T param) {this.setData(param);return this;}// 自定义状态信息public RestResult message(String message) {this.setMessage(message);return this;}// 自定义状态码public RestResult code(Integer code) {this.setCode(code);return this;}// 设置结果形参为结果枚举public static RestResult setResult(ResultCodeEnum result) {RestResult r new RestResult();r.setSuccess(result.getSuccess());r.setCode(result.getCode());r.setMessage(result.getMessage());return r;}5.统一异常处理 对控制层进行切面拦截当发生异常时就会执行异常处理类在Spring Boot项目中创建统一异常处理类。 创建advice包在该包下创建GlobalExceptionHandlerAdvice.java类。 import com.picacho.common.RestResult; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody;Slf4j ControllerAdvice public class GlobalExceptionHandlerAdvice {/**-------- 通用异常处理方法 --------**/ExceptionHandler(Exception.class)ResponseBodypublic RestResult error(Exception e) {e.printStackTrace();log.error(全局异常捕获 e);return RestResult.fail(); // 通用异常结果} }在全局异常处理中主要使用以下三个注解。 ControllerAdvice 这是一个增强的 Controller。使用这个 Controller 可以实现三个方面的功能1、全局异常处理 2、全局数据绑定 3、全局数据预处理ExceptionHandler 该注解用来指明异常的处理类型ResponseBody 该注解为 Spring Boot 响应体注解用在这里的目的就是当出现异常时直接将错误返回给前台 这里除了可以处理Exception异常也可以处理其他异常或者自定义异常。 /*** 处理空指针异常* param e* return*/ExceptionHandler(NullPointerException.class)ResponseBodypublic RestResult error(NullPointerException e) {e.printStackTrace();log.error(全局异常捕获 e);return RestResult.setResult(ResultCodeEnum.NULL_POINT);}/*** 越界异常* param e* return*/ExceptionHandler(IndexOutOfBoundsException.class)ResponseBodypublic RestResult error(IndexOutOfBoundsException e) {e.printStackTrace();log.error(全局异常捕获 e);return RestResult.setResult(ResultCodeEnum.INDEX_OUT_OF_BOUNDS);}在UserController.java中添加测试方法测试异常处理效果 /*** 空指针异常响应测试*/GetMapping(value/testNullException)ResponseBodypublic RestResult testNullException(){String s null;int index s.length();return RestResult.success();}项目demo源码下载地址源码下载
http://www.sczhlp.com/news/238087/

相关文章:

  • LangGraph MCP - LangSmith(二)
  • 2025 年 CW6280 普通车床,CW6180 普通车床,CW61100 普通车床,CW61125 普通车床厂家最新推荐,技术实力与市场口碑深度解析
  • 2025 年 CA6250 普通车床,CW6163 普通车床,CW6263 普通车床厂家最新推荐,技术实力与市场口碑深度解析
  • 2025 年 10 月 C6132 普通车床,C6136 普通车床,CA6240 普通车床厂家最新推荐,技术实力与市场口碑深度解析
  • 共产主义没能解决”霸凌“的状况
  • 萍乡做网站的山东省住房和城乡建设厅官网证书查询
  • 开源视频网站网站模板 缓存商标
  • 囊谦县公司网站建设网站建设策划优点
  • 电子商务网站建设与管理期末考试试卷a东莞知名企业
  • 茶叶怎么做网站销售科技霸主从新能源车开始
  • 网站后台登入密码忘记了凡客诚品图片
  • 做网站建设比较好的公司用什么软件写网站
  • 网站下载免费的视频软件网站运行环境建设方案
  • 网站建设的前期工作基础青岛市建筑工程管理服务中心
  • 建设网站平台的建议国际外贸网站推广
  • 利用网络媒体营销来做电商网站论文给wordpress创建ftp
  • 南充建设公司网站南京江北新区楼盘
  • 三五互联网站公司网站大顶图怎么做
  • 志愿者网站时长码怎么做通河县机场建设网站
  • 做网站上的在线支付怎么做群晖NAS建WordPress
  • 自己做的商业网站在那里发布google浏览器官网
  • 做网站用哪个编程语言网络营销一个月能挣多少钱
  • 英文网站推广服务wordpress自定义百度分享
  • 张家港网站设计有吗再高权重网站加自己的链接会容易被收录吗
  • 嘉定网站制作给个能用的网址谢谢
  • 服务器站点的网站地图怎么做自己的网站怎么做团购
  • 好的响应式网站天津做网站开发的
  • 个人网站的基本风格是wordpress主题升级失败
  • 深圳龙华企业网站设计南宁网站建设教学
  • 长沙网站建设网站推广微信营销网站优化包括整站优化吗