【毕业设计】基于springboot的大学生招聘网 - 招聘系统 就业系统

谁践踏了优雅 2024-03-30 11:39 93阅读 0赞

文章目录

  • 1 前言
  • 2 毕设课题目的
  • 3 开发环境与技术栈
  • 4 系统设计
    • 4.1 系统模块设计
    • 4.2 数据库设计
  • 5 系统代码实现
    • 5.1 maven配置
    • 5.2 项目配置
    • 5.3 拦截器配置
    • 5.4 常用工具类
    • 5.5 业务层代码
    • 5.6 控制层代码
  • 6 项目效果展示
  • 7 最后

1 前言

Hi,同学们好呀,学长今天带大家复盘一个学长帮往届同学做的一个毕业作品

基于springboot的大学生招聘网 - 招聘系统 就业系统

2 毕设课题目的

本系统开发的意义一方面在于突破传统人才招聘的模式,给招聘者和求职者提供一个便利、高效、准确的网络招聘平台,使得双方可以在把成本降到最低的前提下,在更快的时间获得更加准确的信息,从而满足企业的用人需求,实现求职者的自我价值。另一方面在于完善网络招聘服务工作,建立服务体系,通过对用户需求的研究,开发出更符合实际应用的软件。

3 开发环境与技术栈

  • 操作系统:Windows10
  • 数据库版本:Oracle10g XE
  • JDK版本:JDK1.8
  • 服务器版本:apache-tomcat-8.0.24-windows-x64
  • 后端 :Java、Springboot、redis、MyBatis
  • 前端 :HTML+CSS实现页面布局,部分功能使用Jquery和Ajax减轻服务器端的压力。

4 系统设计

4.1 系统模块设计

在这里插入图片描述

功能模块包含:

  • (1)个人用户注册,登录,修改密码
  • (2)个人信息管理:查看,修改个人信息。
  • (3)求职信息管理:修改自己的求职信息;发布自己的求职信息。
  • (4)简历管理:查看,修改简历信息.

4.2 数据库设计

公司表

在这里插入图片描述

公司管理员表
在这里插入图片描述
公司收到简历表

在这里插入图片描述
用户表
在这里插入图片描述
获奖表

在这里插入图片描述
职位表

在这里插入图片描述

项目经验表

在这里插入图片描述

简历表
在这里插入图片描述

5 系统代码实现

5.1 maven配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.2.5.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.aistar</groupId>
  12. <artifactId>zhaopin</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <packaging>war</packaging>
  15. <name>zhaopin</name>
  16. <description>Demo project for Spring Boot</description>
  17. <properties>
  18. <java.version>1.8</java.version>
  19. </properties>
  20. <dependencies>
  21. <dependency>
  22. <groupId>org.springframework.boot</groupId>
  23. <artifactId>spring-boot-starter-web</artifactId>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.mybatis.spring.boot</groupId>
  27. <artifactId>mybatis-spring-boot-starter</artifactId>
  28. <version>2.1.2</version>
  29. </dependency>
  30. <dependency>
  31. <groupId>mysql</groupId>
  32. <artifactId>mysql-connector-java</artifactId>
  33. <scope>runtime</scope>
  34. </dependency>
  35. <dependency>
  36. <groupId>org.springframework.boot</groupId>
  37. <artifactId>spring-boot-starter-tomcat</artifactId>
  38. <scope>provided</scope>
  39. </dependency>
  40. <dependency>
  41. <groupId>org.springframework.boot</groupId>
  42. <artifactId>spring-boot-starter-test</artifactId>
  43. <scope>test</scope>
  44. <exclusions>
  45. <exclusion>
  46. <groupId>org.junit.vintage</groupId>
  47. <artifactId>junit-vintage-engine</artifactId>
  48. </exclusion>
  49. </exclusions>
  50. </dependency>
  51. <!-- 使用jsp引擎,springboot内置tomcat没有此依赖 -->
  52. <!--tomcat-embed-jasper-->
  53. <dependency>
  54. <groupId>org.apache.tomcat.embed</groupId>
  55. <artifactId>tomcat-embed-jasper</artifactId>
  56. <version>9.0.31</version>
  57. </dependency>
  58. <!--分页插件-->
  59. <dependency>
  60. <groupId>com.github.pagehelper</groupId>
  61. <artifactId>pagehelper-spring-boot-starter</artifactId>
  62. <version>1.2.12</version>
  63. </dependency>
  64. <!-- ======================el====================== -->
  65. <dependency>
  66. <groupId>javax.el</groupId>
  67. <artifactId>javax.el-api</artifactId>
  68. <version>3.0.0</version>
  69. </dependency>
  70. <!-- ======================standard====================== -->
  71. <dependency>
  72. <groupId>org.apache.taglibs</groupId>
  73. <artifactId>taglibs-standard-impl</artifactId>
  74. <version>1.2.5</version>
  75. </dependency>
  76. <!-- ======================jstl====================== -->
  77. <dependency>
  78. <groupId>javax.servlet.jsp.jstl</groupId>
  79. <artifactId>jstl</artifactId>
  80. <version>1.2</version>
  81. </dependency>
  82. <!-- ======================jstl-impl====================== -->
  83. <dependency>
  84. <groupId>org.glassfish.web</groupId>
  85. <artifactId>jstl-impl</artifactId>
  86. <version>1.2</version>
  87. </dependency>
  88. <!-- ==================自动管理 数据库连接池====druid====================== -->
  89. <dependency>
  90. <groupId>com.alibaba</groupId>
  91. <artifactId>druid-spring-boot-starter</artifactId>
  92. <version>1.1.10</version>
  93. </dependency>
  94. <!--<!–=========================日志记录=========================–>-->
  95. <!--<dependency>-->
  96. <!--<groupId>org.springframework.boot</groupId>-->
  97. <!--<artifactId>spring-boot-starter-aop</artifactId>-->
  98. <!--</dependency>-->
  99. <!--热部署的依赖-->
  100. <dependency>
  101. <groupId>org.springframework.boot</groupId>
  102. <artifactId>spring-boot-devtools</artifactId>
  103. <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
  104. </dependency>
  105. <!--Swagger-UI API文档生产工具-->
  106. <dependency>
  107. <groupId>io.springfox</groupId>
  108. <artifactId>springfox-swagger-ui</artifactId>
  109. <version>2.9.2</version>
  110. </dependency>
  111. <dependency>
  112. <groupId>io.springfox</groupId>
  113. <artifactId>springfox-swagger2</artifactId>
  114. <version>2.9.2</version>
  115. </dependency>
  116. </dependencies>
  117. <build>
  118. <plugins>
  119. <plugin>
  120. <groupId>org.springframework.boot</groupId>
  121. <artifactId>spring-boot-maven-plugin</artifactId>
  122. </plugin>
  123. <!--热部署-->
  124. <plugin>
  125. <groupId>org.springframework.boot</groupId>
  126. <artifactId>spring-boot-maven-plugin</artifactId>
  127. </plugin>
  128. </plugins>
  129. </build>
  130. </project>

5.2 项目配置

  1. server:
  2. servlet:
  3. context-path: /
  4. port: 8081
  5. logging:
  6. level:
  7. root: info
  8. spring:
  9. jackson:
  10. date-format: yyyy-MM-dd
  11. time-zone: GMT+8
  12. serialization:
  13. #格式化输出
  14. indent_output: true
  15. #忽略无法转换的对象
  16. fail_on_empty_beans: false
  17. #设置空如何序列化
  18. defaultPropertyInclusion: NON_EMPTY
  19. deserialization:
  20. #允许对象忽略json中不存在的属性
  21. fail_on_unknown_properties: false
  22. parser:
  23. #允许出现特殊字符和转义符
  24. allow_unquoted_control_chars: true
  25. #允许出现单引号
  26. allow_single_quotes: true
  27. mvc:
  28. view:
  29. prefix: /WEB-INF/jsp/
  30. suffix: .jsp
  31. # 配置开启springboot解析PUT和DELETE请求
  32. hiddenmethod:
  33. filter:
  34. enabled: true
  35. # datasource:
  36. # driver-class-name: com.mysql.cj.jdbc.Driver
  37. # url: jdbc:mysql://localhost:3306/zhaopin?serverTimezone=UTC&useUnicode=true&characterencoding=utf8
  38. # username: root
  39. # password: root
  40. datasource:
  41. druid:
  42. driver-class-name: com.mysql.cj.jdbc.Driver
  43. url: jdbc:mysql://localhost:3306/zhaopin?serverTimezone=UTC&useUnicode=true&characterencoding=utf8
  44. username: root
  45. password: 123456
  46. #数据库连接池的参数配置
  47. # 初始化连接数量
  48. initial-size: 5
  49. # 最大连接池数量
  50. max-active: 30
  51. # 最小连接池数量
  52. min-idle: 5
  53. # 获取连接时最大等待时间,单位毫秒
  54. max-wait: 60000
  55. # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
  56. time-between-eviction-runs-millis: 60000
  57. # 连接保持空闲而不被驱逐的最小时间
  58. min-evictable-idle-time-millis: 300000
  59. # 用来检测连接是否有效的sql,要求是一个查询语句
  60. validation-query: SELECT 1 FROM DUAL
  61. # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
  62. test-while-idle: true
  63. # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
  64. test-on-borrow: false
  65. # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
  66. test-on-return: false
  67. # 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
  68. pool-prepared-statements: true
  69. # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。
  70. max-pool-prepared-statement-per-connection-size: 50
  71. # 配置监控统计拦截的filters,去掉后监控界面sql无法统计
  72. filters: stat,wall,log4j2
  73. # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
  74. connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
  75. # 合并多个DruidDataSource的监控数据
  76. useGlobalDataSourceStat: true
  77. stat-view-servlet:
  78. login-username: admin #监控页面登录的用户名
  79. login-password: admin #监控页面登录的密码
  80. mybatis:
  81. type-aliases-package: com.aistar.pojo
  82. mapper-locations: classpath:com/aistar/mapper/*Mapper.xml
  83. # 分页配置
  84. pagehelper:
  85. helper-dialect: mysql
  86. reasonable: true
  87. support-methods-arguments: true
  88. params: count=countSql

5.3 拦截器配置

  1. @Configuration
  2. public class ConfigRegistCanter implements WebMvcConfigurer {
  3. //注册拦截器
  4. //addPathPatterns 用来设置拦截路径
  5. //excludePathPatterns 用来设置白名单,也就是不需要触发这个拦截器的路径。
  6. //addPathPatterns("/**") 表示拦截所有的请求
  7. //.excludePathPatterns("/login","/regist")表示出了登录与注册之外,都会拦截(因为登录注册不需要登录页可以访问)
  8. @Override
  9. public void addInterceptors(InterceptorRegistry registry) {
  10. registry.addInterceptor(new MyInterceptor()).addPathPatterns("/company/**","/custmoer/center","/record/**","/resume/**","/job/**")
  11. .excludePathPatterns("/job/getByPageForIndex");
  12. /* .excludePathPatterns("/login")
  13. .excludePathPatterns("/regist");*/
  14. }
  15. //这个方法是用来配置静态资源的,比如html,js,css等
  16. @Override
  17. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  18. }
  19. }

5.4 常用工具类

  1. public static ServerResponse addSuccess() {
  2. return new ServerResponse(1, MessageUtil.ADD_SUCCESS);
  3. }
  4. public static ServerResponse addFailed() {
  5. return new ServerResponse(0, MessageUtil.ADD_FAIL);
  6. }
  7. // ===========================================删除=====================================================
  8. public static ServerResponse deleteSuccess() {
  9. return new ServerResponse(1, MessageUtil.DELETE_SUCCESS);
  10. }
  11. public static ServerResponse deleteFailed() {
  12. return new ServerResponse(0, MessageUtil.DELETE_FAIL);
  13. }
  14. // ===========================================修改=====================================================
  15. public static ServerResponse modifySuccess() {
  16. return new ServerResponse(1, MessageUtil.UPDATE_SUCCESS);
  17. }
  18. public static ServerResponse modifyFailed() {
  19. return new ServerResponse(0, MessageUtil.UPDATE_FAIL);
  20. }
  21. // ===========================================查找=====================================================
  22. public static ServerResponse getSuccess(Object data) {
  23. ServerResponse serverResponse = new ServerResponse(1, MessageUtil.GET_SUCCESS);
  24. serverResponse.setData(data);
  25. return serverResponse;
  26. }
  27. public static ServerResponse getFailed() {
  28. return new ServerResponse(0, MessageUtil.GET_FAIL);
  29. }
  30. public static ServerResponse getFailed(String data) {
  31. ServerResponse serverResponse = new ServerResponse(0, MessageUtil.GET_FAIL);
  32. serverResponse.setData(data);
  33. return serverResponse;
  34. }
  35. // ===========================================constructor=====================================================
  36. private ServerResponse(Integer status, String message) {
  37. this.status = status;
  38. this.message = message;
  39. this.data = null;
  40. }

5.5 业务层代码

  1. /**
  2. * @param username 手机号/邮箱
  3. * @param password 密码
  4. * @param userType 0手机号;1邮箱
  5. * @return 结果集
  6. */
  7. @Override
  8. public ServerResponse getByUsernameAndPwd(String username, String password, Integer userType) {
  9. CustomerExample example = new CustomerExample();
  10. CustomerExample.Criteria criteria = example.createCriteria();
  11. criteria.andStatusEqualTo(0);
  12. if (userType == 0)
  13. criteria.andCustTelnoEqualTo(Long.valueOf(username));
  14. else
  15. criteria.andCustEmailEqualTo(username);
  16. criteria.andCustPasswordEqualTo(password);
  17. List<Customer> customerList = customerMapper.selectByExample(example);
  18. if (customerList != null) {
  19. if (customerList.size() == 1)
  20. return ServerResponse.getSuccess(customerList.get(0));
  21. else if (customerList.size() > 1)
  22. return ServerResponse.getFailed("用户异常,请联系管理员");
  23. }
  24. return ServerResponse.getFailed("用户名/密码错误,请重试");
  25. }
  26. @Override
  27. public ServerResponse add(Customer customer) {
  28. customer.setCustRegistTime(new Date());
  29. customer.setStatus(0);
  30. int rows = customerMapper.insert(customer);
  31. if (rows > 0)
  32. return ServerResponse.addSuccess();
  33. return ServerResponse.addFailed();
  34. }
  35. @Override
  36. public ServerResponse getByTelno(Long custTelno) {
  37. CustomerExample example = new CustomerExample();
  38. example.createCriteria().andCustTelnoEqualTo(custTelno).andStatusEqualTo(0);
  39. List<Customer> customerList = customerMapper.selectByExample(example);
  40. if (customerList != null && customerList.size() > 0) {
  41. //找到用户了
  42. return ServerResponse.getSuccess(customerList.get(0)); // 1,"查询数据成功",customer
  43. } else // 用户不存在
  44. return ServerResponse.getFailed("用户不存在"); // 0,"查询数据失败","用户不存在"
  45. }

5.6 控制层代码

  1. @Controller
  2. @RequestMapping("/customer")
  3. public class CustomerController {
  4. private CustomerService customerService;
  5. private ResumeService resumeService;
  6. private ResumeJobCompanyRDRVOService resumeJobCompanyRDRVOService;
  7. @Autowired
  8. public CustomerController(ResumeJobCompanyRDRVOService resumeJobCompanyRDRVOService, CustomerService customerService, ResumeService resumeService) {
  9. this.resumeJobCompanyRDRVOService = resumeJobCompanyRDRVOService;
  10. this.customerService = customerService;
  11. this.resumeService = resumeService;
  12. }
  13. // 个人中心跳转
  14. @GetMapping("/center/{type}")
  15. public String center(@PathVariable("type") Integer type, HttpServletRequest request) {
  16. Customer customer = (Customer) request.getSession().getAttribute("loginCustomer");
  17. ServerResponse serverResponse;
  18. if (customer != null) {
  19. if (type == 1) {
  20. serverResponse = resumeService.getByCustomerId(customer.getCustId());
  21. request.setAttribute("resumeList", serverResponse.getData());
  22. } else if (type == 2) {
  23. serverResponse = resumeJobCompanyRDRVOService.getByCustomerId(customer.getCustId());//封装了用户简历,工作 公司的对象
  24. request.setAttribute("rdrList", serverResponse.getData());
  25. }
  26. request.setAttribute("type", type);//这里的type需要判断
  27. return "customer/personalCenter";
  28. } else
  29. return "redirect:/"; // 未登录
  30. }
  31. // 登录ajax
  32. @GetMapping("/login")
  33. @ResponseBody
  34. public ServerResponse login(String username, String password, Integer type, Integer userType, HttpServletRequest request) {
  35. ServerResponse serverResponse = null;
  36. if (1 == type) {
  37. // 手机号、邮箱 & 密码
  38. // userType = 0手机号;1邮箱
  39. serverResponse = customerService.getByUsernameAndPwd(username, password, userType);
  40. if (serverResponse.getStatus() == 1) {
  41. // 登录成功 用户存在
  42. Customer customer = (Customer) serverResponse.getData();
  43. request.getSession().setAttribute("loginCustomer", customer);
  44. }
  45. } else {
  46. // 手机号 & 验证码
  47. System.out.println("手机号,验证码登录");
  48. }
  49. return serverResponse;
  50. }
  51. // 退出登录跳转
  52. @RequestMapping("/logout")
  53. public String register(HttpServletRequest request) {
  54. request.getSession().removeAttribute("loginCustomer");
  55. return "redirect:/";
  56. }
  57. // 注册ajax
  58. @PostMapping("/add")
  59. @ResponseBody
  60. public ServerResponse register(Customer customer) {
  61. customer.setCustName(customer.getCustTelno().toString());
  62. return customerService.add(customer);
  63. }
  64. // 获取验证码ajax
  65. @GetMapping("/getCode")
  66. @ResponseBody
  67. public ServerResponse getCheckedCode(Long custTelno) {
  68. // 数据库中查看手机号是否已经注册
  69. ServerResponse serverResponse = customerService.getByTelno(custTelno);
  70. ServerResponse result;
  71. if (serverResponse.getStatus() != 1) {
  72. // 失败 - 用户不存在,可以创建
  73. // 获取验证码 - 调用短信接口
  74. // String code = GetMessageCode.getCode(telnoStr);
  75. String code = "666666";
  76. result = ServerResponse.getSuccess(code);
  77. } else {
  78. // 成功 - 用户已经存在
  79. result = ServerResponse.getFailed("用户已存在,请前往登录页面");
  80. }
  81. return result;
  82. }
  83. }

6 项目效果展示

登录

在这里插入图片描述

主页
在这里插入图片描述

职位详情
在这里插入图片描述

公司简介
在这里插入图片描述

投递记录
在这里插入图片描述

编辑简历

在这里插入图片描述

简历列表
在这里插入图片描述

申请职位

在这里插入图片描述
在这里插入图片描述

7 最后

发表评论

表情:
评论列表 (有 0 条评论,93人围观)

还没有评论,来说两句吧...

相关阅读