演示网址:

http://lishaoyu.top/u.html?userid=27#

GitHub地址,欢迎fork&start!!

概述:

五一小长假,找个小项目复习复习JavaWeb、JavaEE基础

项目很简单,就是实现数据库的增删改查,分为五大模块,分别是

基本信息模块(User)

教育经历模块(Edu)

工作经历模块(Work)

技能模块(Skill)

特长模块(Specialty)

五个模块的基本原理一样,所以我主要围绕基本信息模块(User)讲解。

也可以往下翻,先看看项目效果图哟!


一、 项目结构

二、 操作流程

三、 数据库设计-基础信息表(user)

* id
* 姓名 name
* 年龄 age
* 地区 city
* 现住址 address
* 邮箱 email
* 电话 phone
* 微信 weixin
* qq qq
* 微博地址 Weibo
* 个人简介 info```sql
CREATE TABLE `user` (`id` bigint(20) NOT NULL COMMENT '用户唯一标示,用于关联教育经历、工作经历、特长以及技能列表',`name` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '姓名',`age` int(8) NULL COMMENT '年龄',`city` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '地区城市',`address` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '详细地址',`email` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '邮箱地址',`phone` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '电话或手机号码',`weixin` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '微信号码',`qq` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT 'qq号码',`weibo` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '微博地址',`description` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '个人简介',PRIMARY KEY (`id`)
) ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
COMMENT='用户基础信息表,包含了用户的基本信息'
ROW_FORMAT=DYNAMIC
AVG_ROW_LENGTH=0;```

四、 接口文档

1、  请求URL

http://域名/v1/user/insert

2、 请求方式

post

3、 参数类型:param

4、返回示例

{status:0,// 状态码,0表示正常,-1表示错误msg:"用户新增成功",// 返回的消息data:1// 本次新增的用户的编号,用于新增其他信息的userid参数
}

五、 项目效果图

1、 填写信息(有五个表,现在展示基本信息表)

2、 填写完表格生成个人专属简历地址(到时绑定公众号,关注即可观看个人简历)

3、 简历效果图

PS:额,,服务器备案还在进行中,所以现在只能在本地部署,

部署的前提准备是公众号+域名+云服务器+备案

(云服务器需要三个月以上才可以备案哟!)

别急!!!等我备案通过了,再更新部署云端服务器以及公众号的内容!!!!!

六、 基本信息模块核心代码

1、 controller

package com.lsy.controller;import com.lsy.bean.Result;
import com.lsy.bean.User;
import com.lsy.service.DBService;
import com.lsy.util.DBUtil;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @author lsy* @description:  控制器* @date: 2021/5/3 23:27* @param:  null* @return:* @version 1.0*/@WebServlet("/v1/user/insert")
public class UserInsertServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 1. 接收前端发送的数据String ageText = request.getParameter("age");int age = Integer.parseInt(ageText);String name = request.getParameter("name");String city = request.getParameter("city");String address = request.getParameter("address");String email = request.getParameter("email");String phone = request.getParameter("phone");String weixin = request.getParameter("weixin");String qq = request.getParameter("qq");String weibo = request.getParameter("weibo");String sex = request.getParameter("sex");String description = request.getParameter("description");// 2. 通过前端发送的数据,组装为userUser user = new User(name, age, city, address, email, phone, weixin, qq, weibo, sex, description);// 3. 操作Service,完成用户信息的存储int userId = DBService.inserUser(user);// 4. 将存储的结果,组装成为JSON格式数据Result result = null;if (userId == -1) {result = new Result(-1, "新增用户失败");} else {result = new Result(1, "新增用户成功");}String json = result.toJSON();// 5. 将JSON数据返回给前端response.getWriter().append(json);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}

2、 bean

package com.lsy.bean;import java.util.Objects;/*** @ClassName User* @Description 用户bean,打包数据* @date 2021/5/1 10:18* @Version 1.0*/
public class User {// 用户Idprivate int id;// 用户名称private String name;// 用户年龄private int age;// 用户城市private String city;// 用户地址private String address;// 用户邮箱private String email;// 用户电话private String phone;// 用户微信private String weixin;// 用户qqprivate String qq;// 用户微博private String weibo;// 用户性别private String sex;// 个人介绍private String description;// 全参构造方法public User(int id, String name, int age, String city, String address, String email, String phone, String weixin, String qq, String weibo, String sex, String description) {this.id = id;this.name = name;this.age = age;this.city = city;this.address = address;this.email = email;this.phone = phone;this.weixin = weixin;this.qq = qq;this.weibo = weibo;this.sex = sex;this.description = description;}// 无参构造方法public User() {}// 前端传来的参数,无IDpublic User(String name, int age, String city, String address, String email, String phone, String weixin, String qq, String weibo, String sex, String description) {this.name = name;this.age = age;this.city = city;this.address = address;this.email = email;this.phone = phone;this.weixin = weixin;this.qq = qq;this.weibo = weibo;this.sex = sex;this.description = description;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", city='" + city + '\'' +", address='" + address + '\'' +", email='" + email + '\'' +", phone='" + phone + '\'' +", weixin='" + weixin + '\'' +", qq='" + qq + '\'' +", weibo='" + weibo + '\'' +", sex='" + sex + '\'' +", description='" + description + '\'' +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;User user = (User) o;return id == user.id &&age == user.age &&Objects.equals(name, user.name) &&Objects.equals(city, user.city) &&Objects.equals(address, user.address) &&Objects.equals(email, user.email) &&Objects.equals(phone, user.phone) &&Objects.equals(weixin, user.weixin) &&Objects.equals(qq, user.qq) &&Objects.equals(weibo, user.weibo) &&Objects.equals(sex, user.sex) &&Objects.equals(description, user.description);}@Overridepublic int hashCode() {return Objects.hash(id, name, age, city, address, email, phone, weixin, qq, weibo, sex, description);}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getWeixin() {return weixin;}public void setWeixin(String weixin) {this.weixin = weixin;}public String getQq() {return qq;}public void setQq(String qq) {this.qq = qq;}public String getWeibo() {return weibo;}public void setWeibo(String weibo) {this.weibo = weibo;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}
}
package com.lsy.bean;import com.alibaba.fastjson.JSON;/*** @ClassName Result* @Description 将Java中的对象,转化为JSON格式字符串* @date 2021/5/3 21:28* @Param* @return*/
public class Result {// 状态private int status;// 消息文字private String msg;// 数据private Object data;// 组装为JSON数据public String toJSON() {return JSON.toJSONString(this);}public Result() {}public Result(int status) {this.status = status;}public Result(int status, String msg) {this.status = status;this.msg = msg;}public Result(int status, String msg, Object data) {this.status = status;this.msg = msg;this.data = data;}public int getStatus() {return status;}public void setStatus(int status) {this.status = status;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}
}

3、 service

package com.lsy.service;import com.lsy.bean.User;
import com.lsy.dao.BaseDao;
import com.lsy.dao.UserDao;/*** @ClassName DBService* @Description 代理dao,可以理解为菜市场和保姆的关系* @date 2021/5/1 12:42* @Param* @return*/
public class DBService {private static BaseDao<User> userDao = new UserDao();public static int inserUser(User user) {return userDao.insert(user);}public static User findByUserId(int userId) {return userDao.findByUserId(userId);}
}

4、 dao

package com.lsy.dao;/*** @ClassName BaseDao* @Description 用于定义数据操作对象的 存取标准* @date 2021/5/1 10:36* @Version 1.0* @Param <T> 操作的数据类型:用户的基本信息、学历信息、工作经验、特长、技能列表*/
public interface BaseDao<T> {/*** @author lsy* @description:  用于规范存储* @date: 2021/5/1 14:23* @param:  t  要存储的数据* @return:  存储的结果,大于0表示成功* @version 1.0*/int insert(T t);/*** @author lsy* @description:  用于规范获取* @date: 2021/5/1 14:24* @param:  userId  基于用户的编号,查询数据* @return:  基于用户的编号,查询到的数据:用户基本信息、学历信息等* @version 1.0*/T findByUserId(int userId);
}
package com.lsy.dao;import com.lsy.bean.User;
import com.lsy.util.DBUtil;import java.sql.*;/*** @ClassName UserDao* @Description 数据库操作* @date 2021/5/1 14:52* @Param* @return*/
public class UserDao implements BaseDao<User> {// 用于操作数据库存储的sqlprivate static final String SQL_INSERT = "insert into " +"kkb_user(name,age,city,address,email,phone,weixin,qq,weibo,sex,description) " +"values(?,?,?,?,?,?,?,?,?,?,?)";// 用于操作数据库获取用户基本信息的sqlprivate static final String SQL_FIND_BY_USERID = "select * from kkb_user where id=?";@Overridepublic int insert(User user) {// 1. 获取数据库的连接 : connConnection conn =  DBUtil.getConn();// 2. 通过连接 conn 创建执行sql语句的环境: statemet, 并预编译SQLPreparedStatement statement = null;ResultSet result = null;try {statement = conn.prepareStatement(SQL_INSERT, Statement.RETURN_GENERATED_KEYS);// 3. 向执行环境中,填充?所表示的参数statement.setString(1, user.getName());statement.setInt(2, user.getAge());statement.setString(3, user.getCity());statement.setString(4, user.getAddress());statement.setString(5, user.getEmail());statement.setString(6, user.getPhone());statement.setString(7, user.getWeixin());statement.setString(8, user.getQq());statement.setString(9, user.getWeibo());statement.setString(10, user.getSex());statement.setString(11, user.getDescription());// 4. 执行SQLstatement.executeLargeUpdate();// 5. 获取新增的用户的IDresult = statement.getGeneratedKeys();if (result.next()) {// 6. 将新增的用户的标识(id),作为此段代码的执行结果 返回return result.getInt(1);}} catch (SQLException throwables) {throwables.printStackTrace();}finally {// 7.把连接释放DBUtil.close(conn,statement,result);}return -1;}@Overridepublic User findByUserId(int userId) {// 1. 获取数据库的连接 : connConnection conn = DBUtil.getConn();// 2. 通过连接 conn 创建执行sql语句的环境: statemet, 并预编译SQLPreparedStatement statement = null;ResultSet result = null;try {statement = conn.prepareStatement(SQL_FIND_BY_USERID);// 3. 向执行环境中,填充?所表示的参数statement.setInt(1,userId);// 4. 执行SQL, 并获取执行的结果集result = statement.executeQuery();// 5. 取出结果集中的用户的各个信息,组装成一个userif (result.next()) {int age = result.getInt("age");String name = result.getString("name");String city = result.getString("city");String address = result.getString("address");String email = result.getString("email");String phone = result.getString("phone");String weixin = result.getString("weixin");String qq = result.getString("qq");String weibo = result.getString("weibo");String sex = result.getString("sex");String description = result.getString("description");User user = new User(userId, name, age, city, address, email, phone, weixin, qq, weibo, sex, description);// 6. 将组装完毕的user,作为此段代码的执行结果,返回给调用者return user;}} catch (SQLException throwables) {throwables.printStackTrace();}finally {// 7. 释放资源DBUtil.close(conn,statement,result);}return null;}
}

5、 util

package com.lsy.util;import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;/*** @author lsy* @description:  数据库连接工具* @date: 2021/5/1 14:36* @param:  null* @return:* @version 1.0*/
public class DBUtil {// 操作数据库的三要素private static String url = "";private static String user = "";private static String password = "";public DBUtil() {}/*** @author lsy* @description:  用于链接数据库,得到的结果是数据库的连接对象,连接对象具备了操作数据库的很多功能* @date: 2021/5/1 14:39* @param:* @return:  连接对象* @version 1.0*/public static Connection getConn() {try {Connection conn = DriverManager.getConnection(url, user, password);return conn;} catch (SQLException var1) {var1.printStackTrace();return null;}}/*** @author lsy* @description:  断开数据库资源的链接,用于释放资源* @date: 2021/5/1 14:41* @param:  conn  要释放的链接*          statement  要释放的执行环境*          resultSet  要释放的结果集* @version 1.0** 连接原则: 尽可能晚的连接数据库,尽可能早的释放资源*/public static void close(Connection conn, Statement statement, ResultSet resultSet) {if (conn != null) {try {conn.close();} catch (SQLException var6) {var6.printStackTrace();}}if (statement != null) {try {statement.close();} catch (SQLException var5) {var5.printStackTrace();}}if (resultSet != null) {try {resultSet.close();} catch (SQLException var4) {var4.printStackTrace();}}}// 加载配置文件,获取文件中的三要素static {Properties ppt = new Properties();InputStream is = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");try {ppt.load(is);url = ppt.getProperty("url");user = ppt.getProperty("user");password = ppt.getProperty("password");} catch (IOException var4) {var4.printStackTrace();}try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException var3) {var3.printStackTrace();}}
}

6、filter

package com.lsy.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;/*** @author lsy* @description: 过滤全部* @date: 2021/5/3 21:01* @param:  null* @return:* @version 1.0*/@WebFilter("/*")
public class CharSetFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {// 调整请求编码为UTF-8req.setCharacterEncoding("utf-8");// 调整响应编码为UTF-8resp.setCharacterEncoding("utf-8");// 放行chain.doFilter(req, resp);}public void init(FilterConfig config) throws ServletException {}}

7、 数据库配置文件db.properties

url=jdbc:mysql://localhost:3306/homepage?serverTimezone=GMT&characterEncoding=utf-8
user=用户名
password=用户密码

Java后端开发工程师简历加分项:个人在线简历的搭建相关推荐

  1. Java后端开发工程师是否该转大数据开发?

    背景 看到一些java开发工程师,对java后端薪酬太悲观了.认为换去大数据领域就会高工资.觉得java后端没有前途.我从事java后端开发,对大数据领域工作有些了解,但不深入.本文描述一下我对jav ...

  2. 三七互娱2019秋招Java后端开发工程师

    三七互娱2019秋招Java后端开发工程师 三.简答题 2.给定一个整数的数组,要求将数组中的所有为0的元素移动到数组的最后,其他的元素保持原来的顺序. 示例 数组{ 1, 5, 0, 0 ,2,19 ...

  3. Java后端开发工程师技术栈整理

    文章目录 Java后端开发工程师技术栈整理 常用工具 Java IDE 数据库客户端 数据库建模工具 SSH客户端 文本编辑器 Markdown编辑器 API调试工具 浏览器 压力测试工具 DevOp ...

  4. java后端开发工程师笔试_后端开发工程师面试参考

    为什么要写这篇文章 后端开发工程师的知识体系大而杂,从Java基础到算法.数据库.操作系统.网络.中间件.系统设计等都可以理解为后端的射程.下定决心开始准备面试时,可谓是千头万绪无从下手.我的开始源于 ...

  5. java后端开发工程师_后端工程师与 Java 工程师的区别?

    本人多年 java 狗一枚,最近在准备面试跳槽,在翻看了 boss 直聘上很多招聘信息后发现很多感兴趣的岗位都是标注后端工程师的,一般 jd 都是标注 c++/java/goland 会一个就可以了, ...

  6. ​浅谈 Java 后端开发工程师腾讯面试经历分享总结

    最近一段时间考虑到换工作,打算整理一下网络上曾经面试者分享的的面试经历并结合自己以往的面试经历和经验,帮助大家获取到互联网大厂的入职通知书,也就是入职 offer. 本文整理网络面试者和本人的面试经历 ...

  7. 面试Java后端开发工程师自我介绍

    面试官好,我叫李旭,是一名即将于2022年毕业于北方民族大学商学院工商管理专业的学生.由于我对java编程语言特别感兴趣,所以我报名了达内的Java培训班,专业的进行java编程方面的学习.我具有扎实 ...

  8. Java后端开发工程师

    北信源 1.LoadRunner工具的使用 2.多线程了解多少 3.线程池的创建方式(4种) 4.线程安全的集合有几种 5.ConcurrentHashMap是如何实现线程安全的 6.Synchron ...

  9. java后端开发所学的技术有哪些?

    学习目标: 了解java后端开发工程师所具备的最基础的技术 学习内容: 熟悉java语言.了解J2EE体系结构.熟悉相关软件开发工具 了解IO.多线程.集合.通信传输.数据库访问.JVM 了解serv ...

最新文章

  1. lstm数学推导_手推公式:LSTM单元梯度的详细的数学推导
  2. 3维线程格 gpu_论文导读 | GPU加速子图同构算法
  3. 为XPath自定义函数(因为XPath1.0的函数非常有限)[附源代码下载]
  4. python 计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值
  5. 具有Couchbase,Java EE和WildFly的CRUD Java应用程序
  6. python编程之如何判断某个元素在不在列表里面
  7. 《编译原理》学习笔记 ·003【第二章:文法和语言(形式语言理论)-2】
  8. linux下grep文件内容搜索工具及基本正则表达式详解
  9. 1、css引入的方式有哪些?_低氮燃烧技术都有哪些?
  10. 海思烧录工具HiTool的使用方法以及烧录uboot
  11. vim替换字符串命令详解
  12. PR2018入门教程01-基础教程
  13. android 实现果冻动画效果,手把手教你绘制Android粘性果冻动画组件
  14. Word查找红色文字 Word查找颜色字体 Word查找突出格式文本
  15. 51单片机c语言试题及答案,单片机C语言期末考试题..
  16. CUDA PTX ISA阅读笔记(一)
  17. python显示磁共振图像(MRI)(pydicom)
  18. Linux系统中用命令行清空垃圾箱Trash
  19. 2020 全球经济正进入衰退期
  20. Next.js如何引入百度分享(外部引用)类似的外部js,以及如何操作window

热门文章

  1. mysql load 导入csv或者unl 如果文件跟表的字段不一致的情况
  2. Android应用开发实战-保活组件
  3. 小程序毕业设计 基于微信会议室预约小程序毕业设计开题报告功能参考
  4. Tomcat服务器安装和替换阿里云免费ssl证书步骤(超详细)
  5. a或b search vim_vim入门,进阶与折腾
  6. 影视后期制作中AEnbsp;抠像技术浅…
  7. 感染 <SCRIPT Language=VBScript> DropFileName = “svchost.exe” Ramnit 蠕虫病毒 HTML清除工具
  8. 硬件知识:台式电脑主机各种接口介绍
  9. SLAM中双目三角化
  10. ASP.NET Core 解决控制台输出日志内容前面[40m等乱码字符