数据表表录入项目

Javaweb项目实战:

简单准备:

  1. 数据库建表语句:

    CREATE TABLE User(
      id int(10) NOT NULL AUTO_INCREMENT,
      name varchar(30),
      age int(6) ,
      gender char(6),
      birthday DATE,
      hobbies varchar(100),
      createtime DATE,
      updatetime DATE,
     PRIMARY KEY (id)
    ) ;
    
  2. 配置好Maven仓库环境

    Maven仓库下载地址(直接搜索maven)https://mvnrepository.com/

    下载完zip之后解压, 创建项目时进行配置

    这边选用的是 apache-maven-3.6.3

  3. 准备好tomcat

  4. 同样是在Maven仓库下载zip直接解压就可以

    这边选用的是 apache-tomcat-8.5.78

    项目开始

    创建Maven项目与子项目

    (这边只是一个**非常简单的入门项目**所以不怎么需要使用模板的配置信息)

    创建一个名为Servlet_Exam的多模块maven项目, 其中有三个子模块分别为

    (每次Maven项目创建时都需要一段时间加载)

    步骤一:项目创建于配置

    1. 父模块Servlet_Exam

      在这里插入图片描述

      在这里插入图片描述

      1. 父类模块创建完成后, 需要修改pom文件

      在这里插入图片描述

      1. 配置Maven

        File–>Setting–>搜索Maven

        在这里插入图片描述

        在这里插入图片描述

        此时控制台输出 : BUILD SUCCESS

        表示配置完毕

    2. 子模块: 基础模块Servlet_pojo

      点击父模块文件–>创建新文件

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

    子模块: 基础模块Servlet_dao与上面相同

    子模块: web模块Servlet_web

    创建时选择web模块,pom中的打包方式为war(模板默认)

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

步骤二:创建依赖关系

设置其依赖关系:

Servlet_web 依赖 Servlet_dao
Servlet_dao 依赖 Servlet_pojo

<!--Servlet_dao文件-->
<dependencies>
    <dependency>
        <groupId>com.huawei</groupId>
        <artifactId>Servlet_pojo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>
 <!--Servlet_dao文件-->
<dependencies>
    <dependency>
      <groupId>com.huawei</groupId>
      <artifactId>Servlet_dao</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
  </dependencies>

步骤三: 子模块功能实现说明

基础模块Servlet_pojo

在该模块内定义一个bean,名称为User;
其相应的属性: id(整型) name(字符串) age(整型) gender(字符) birthday(日期) hobbies(字符串数组)
User类的创建
(注意: 增加了一个getHobbie()方法, 为后面获取使用)

package com.huawei.bean;

import java.util.Arrays;
import java.util.Date;
//model 或 bean 模型类 一般和数据库表一一关联
public class User {
    private int id;//id
    private String name;//姓名
    private int age;//年龄
    private char gender;//性别
    private Date birthday;//生日
    private  String[] hobbies;//兴趣爱好

    public User() {}

    public User( String name, int age, char gender, Date birthday, String[] hobbies) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.birthday = birthday;
        this.hobbies = hobbies;
    }

    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 char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String[] getHobbies() {
        return hobbies;
    }
    public String getHobbie() {
        String s = Arrays.toString(this.hobbies);
        return s;
    }

    public void setHobbies(String[] hobbies) {
        this.hobbies = hobbies;
    }

    @Override
    public String toString() {
        return "com.hw.User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", ender=" + gender +
                ", birthday=" + birthday +
                ", hobbies=" + Arrays.toString(hobbies) +
                '}';
    }

}

基础模块Servlet_dao
  1. 数据库使用mysql数据库:(开始的sql语句,创建后就不需要再次创建了)

    CREATE TABLE User(
      id int(10) NOT NULL AUTO_INCREMENT,
      name varchar(30),
      age int(6) ,
      gender char(6),
      birthday DATE,
      hobbies varchar(100),
      createtime DATE,
      updatetime DATE,
      PRIMARY KEY (id)
    ) ;
    
    1. 创建一张User表, 表中的字段分别为:
      id 序号

      name 姓名
      age 年龄

      gender 性别

      birthday 生日

      hobbies 兴趣爱好

      createtime 创建时间(日期类型)

      updatetime 修改时间(日期类型)

    该模块主要用于定义数据库相关操作类与方法
    该模块分别创建两个类: a. DBUtil b. UserDao

a. DBUtil
在该类中封装jdbc连接mysql数据库方法(1. 数据库驱动获取方法 2.数据库关闭方法)

package com.huawei.util;
import java.sql.*;

public class DBUtil {
    public static String url="jdbc:mysql://localhost:3306/mytest";
    public static String driver = "com.mysql.jdbc.Driver";
    //获取驱动
    static {
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取数据源
     * @return
     */
    public static Connection getConnection(){
        try {
            return DriverManager.getConnection(url,"root","root");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 关闭数据方法
     * @param rs
     * @param st
     * @param conn
     */
    public static void close(ResultSet rs,Statement st,Connection conn){
        if (rs!=null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (st!=null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn!=null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }


    public static void main(String[] args) {
        //测试是否能获取到数据库数据源
        Connection conn  = getConnection();
        System.out.println(conn);
    }
}

//额外增加一个工具类用于录入数据库时的字符串数组与字符之间的转换
package com.huawei.util;

/**
 * 工具类
 */
public class Tools {
    public static String arraysToString(String[] strs){
        String str = "";
        for (String s: strs) {
          str+=s+",";
        }
        str = str.substring(0, str.length()-1);
        return str;
    }

}

b. UserDao
在该类中封装: 1) 一个插入User对象到数据表的方法

                 1. createtime与updatetime两个字段值为当前时间,
                    符串固定值
  1. 插入的数据字符串类型使用中文

  2. id为自动生成(对顺序无要求)

  3. 一个通过id来得到相应User对象的方法

    package com.huawei.dao;
    
    import com.huawei.bean.User;
    import com.huawei.util.DBUtil;
    import com.huawei.util.Tools;
    
    import java.sql.*;
    import java.util.Arrays;
    
    public class UserDao {
        /**
         * 插入方法(插入user对象数据表)
         * @param user 需要插入的对象
         * @return 返回是否成功
         */
        public static int insertUser(User user){
            int n=0;
            String sql = "insert into user(name,age,gender,birthday,hobbies,createtime) values(?,?,?,?,?,now())";
            Connection connection = DBUtil.getConnection();//获取连接
            try {
                PreparedStatement pst = connection.prepareStatement(sql);
                pst.setString(1,user.getName());
                pst.setInt(2,user.getAge());
                pst.setString(3,user.getGender()+"");
                //利用时间戳创建一个新的生气了的Date类
                pst.setDate(4, new Date(user.getBirthday().getTime()));
                //使用工具类将其转化为字符串
                pst.setString(5, Tools.arraysToString(user.getHobbies()));
                n=pst.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
            return n;
        }
    
        /**
         * 查询方法(通过id查询)
         * @param id 需要查询的id
         * @return 返回的对象
         */
        public static User findUserById(int id){
            User user=null;
            String sql = "select * from user where id=?";
            PreparedStatement pst=null;
            ResultSet rs=null;
            Connection conn = DBUtil.getConnection();
            try {
                 pst = conn.prepareStatement(sql);
                pst.setInt(1,id);
                rs = pst.executeQuery();
                while (rs.next()){
                    //获取并设置对象的属性值
                    user = new User();
                    user.setId(rs.getInt("id"));
                    user.setName(rs.getString("name"));
                    user.setAge(rs.getInt("age"));
                    user.setGender(rs.getString("gender").charAt(0));
                    user.setBirthday(rs.getDate("Birthday"));
                    user.setHobbies(new String[]{rs.getString("Hobbies")});
    
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                DBUtil.close(rs,pst,conn);
            }
            return  user;
    
        }
    }
    
    
web模块Servlet_web

这个模块我们使用了一个自己写的工具类

package com.huawei.servlet;

import com.huawei.bean.User;
import com.huawei.dao.UserDao;

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;

/**
 * 用于修改数据时使用
 * 修改数据后对数据库进行修改操作
 */
@WebServlet(value = "/update.do")
public class UpdateServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置编码格式 防止乱码
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=UTF-8");
        int id =0;
        String idStr = req.getParameter("id");
        if (idStr!=null && idStr!=""){
            id = Integer.parseInt(idStr);
        }
        UserDao userDao = new UserDao();
        User user =UserDao.findUserById(id);
        if (user!=null){
            req.setAttribute("User",user);
            req.getRequestDispatcher("/show.jsp").forward(req,resp);
        }else {
            resp.getWriter().println("该用户不存杂");
        }
    }
}

该模块用于前台展示信息

  1. 在index.jsp页面中定义一个form表单,该表单需要向后台传递用户信息
    要求: 1)使用post方式 2)action: “insert”

    index.jsp创建

    创建在web目录下: 包含一个表单

    注意: jsp页面需要配置这一行在第一行,不然会乱码

    <%@ page language="java" contentType="text/html; utf-8" pageEncoding="utf-8" %>
    
    <%@ page language="java" contentType="text/html; utf-8" pageEncoding="utf-8" %>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>用户注册</title>
    </head>
    <body>
    <h2>用户注册</h2>
    <form action="insert.do" method="post">
        用户名: <input name="name"><br>
        年龄: <input name="age"><br>
        性别: <input name="gender" type="radio" value="男">男
        <input name="gender" type="radio" value="女">女<br>
        生日: <input name="birthday" type="date"><br>
        爱好: <input name="hobbies" type="checkbox" value="看书">看书
        <input name="hobbies" type="checkbox" value="打篮球">打篮球
        <input name="hobbies" type="checkbox" value="打游戏">打游戏
        <input name="hobbies" type="checkbox" value="打酱油">打酱油<br>
        <input type="submit"><br>
    </form>
    </body>
    </html>
    
    
  2. 创建一个InsertServlet类,继承HttpServlet类
    在该类相关方法中实现从前台获取数据,传递给Dao层进行插入
    备注: a. 请求路径: http://localhost:8088/insert
    b. 需要处理中文问题
    c. 插入成功,向前台返回"数据已成功录入!"

    InsertServlet创建

    用于响应表单中的数据,将表单中的数据插入到数据库中

    使用的是工具包中的插入方法, 我们写的插入方式是插入成功就是返回1, 插入失败返回0

    package com.huawei.servlet;
    
    import com.huawei.bean.User;
    import com.huawei.dao.UserDao;
    import com.huawei.util.DateTools;
    import org.apache.catalina.realm.UserDatabaseRealm;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * 用于处理表单中提交过来的信息
     * 将信息转化为User对象 并传入数据库
     */
    @WebServlet(value = "/insert.do")
    public class InsertServlet extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //设置编码格式 防止乱码
            req.setCharacterEncoding("utf-8");
            resp.setCharacterEncoding("utf-8");
            resp.setContentType("text/html;charset=UTF-8");
            //获取表单中的信息
            String name = req.getParameter("name");
            String age = req.getParameter("age");
            String gender = req.getParameter("gender");
            String birthday = req.getParameter("birthday");
            //接收到的是一个数组
            String[] hobbies = req.getParameterValues("hobbies");
            //User对象赋值
            User user = new User();
            user.setName(name);
            //字符串转数字
            //前提是字符串不为空  也不为空串
            if (age!=null && age!=""){
                int nl = Integer.parseInt(age);
                user.setAge(nl);
            }else{
                user.setAge(18);
            }
            //性别是字符串转char 取第一个
            user.setGender(gender.charAt(0));
            user.setBirthday(DateTools.dataStrToDate(birthday));
            user.setHobbies(hobbies);
            //失败返回 0 未失败返回1
            if (UserDao.insertUser(user)>=1){
                resp.getWriter().println("数据已录入");
            }else{
                resp.getWriter().println("数据录入失败");
            }
        }
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req, resp);
        }
    }
    
    
  3. 创建一个home.jsp页面
    该页面定义一个form表单,用于输入用户id查询相应用户信息
    要求: 1)使用get方式
    2)action: “update”

    home.jsp创建

    主要的还是一个表单: 输入id后转交给servlet处理

    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>查询</title>
    </head>
    <body>
    <form action="update.do" method="get">
        请输入编号:<input name="id" ><br>
        <input type="submit"><br>
    </form>
    </body>
    </html>
    
    
  4. 创建一个UpdateServlet类,继承HttpServlet类
    该类用于返回用户信息
    要求: 1) 如果查询到了用户,就将信息返回至前台
    2) 如果查询不到用户,就向前台返回"该用户不存在"

    UpdateServlet类创建

    使用工具类中我们的查询id方法来进行查询

package com.huawei.servlet;

import com.huawei.bean.User;
import com.huawei.dao.UserDao;

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;

/**
 * 用于修改数据时使用
 * 修改数据后对数据库进行修改操作
 */
@WebServlet(value = "/update.do")
public class UpdateServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置编码格式 防止乱码
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=UTF-8");
        int id =0;
        String idStr = req.getParameter("id");
        if (idStr!=null && idStr!=""){
            id = Integer.parseInt(idStr);
        }
        UserDao userDao = new UserDao();
        User user =UserDao.findUserById(id);
        if (user!=null){
            req.setAttribute("User",user);
            req.getRequestDispatcher("/show.jsp").forward(req,resp);
        }else {
            resp.getWriter().println("该用户不存杂");
        }
    }
}

到这里我们的代码部分就写完啦~ _

步骤四: 创建远程仓库

在码云创建名为"Servlet_Exam"的仓库,仓库设置为公开仓库而非私有;
并使用remote方式将本地仓库与远程仓库进行连接;
在本地创建.gitignore文件并对其进行配置;
.gitignore配置要求:
将本地项目上传至远程仓库

首先我们登录到我们的码云官网

然后新建仓库

在这里插入图片描述

起一个好听的库名就可以点击创建了~(建议使用这里规定的仓库名)

在这里插入图片描述

然后选择这两个

在这里插入图片描述

我们选择Git

在这里插入图片描述

这个时候文件就会全部变为红色: 说明Git添加成功(所有的文案都纳入了git版本管理)

先创建过滤文件.gitignore文件

用于指定特定的文件上传和特定的文件不能上传

!*.java
!Servlet_web/pom.xml
!*.jsp
!*.html
/.idea/
/target/
*.iml

将项目和git远程仓库关联

下一步就是连接远程仓库(有多种方法可以连接,这边我们用命令行这种)

在这里插入图片描述

点击图片中这个位置(需要安装linux命令行插件Gow)

输入连接代码

git remote add origin 仓库的地址

然后使用命令查看连接状态

git remote -v

在这里插入图片描述

然后就可以直接push了

你上传好你的项目了嘛~ _

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值