【javaWeb+tomcat+MySQL】综合案例-完整步骤

目录

一、前提

二、创建一个普通的java项目

三、添加Web Application

四、添加tomcat

五、测试tomcat是否连接成功

 六、在src目录下创建四个package

七、在WEB-INF下创建文件夹lib,导入两个jar包

 八、把druid.properties粘贴在src目录下

八、实体类、方法类、测试类、连接类(代码部分)

九、测试是否成功连接MySQL数据库 

十、数据库Student表的相关设置

十一、在web目录下,创建html、css、js文件

十二、Web→WEB-INF→index.jsp后缀改为.html

十三、验证JavaWeb项目下,能否对数据库表进行增删改查

十四、总结



一、前提

1、我用的软件版本:

我的idea版本为:IntelliJ IDEA 2021.1.2 x64

我的apache-tomcat版本为:apache-tomcat-9.0.68

我的apache-tomcat存放路径为:D:\programfiles\apache-tomcat-9.0.68

2、准备工作:

在本案例之前,我已经安装好了apache-tomcat,并在idea中打开本地html文件,验证是连接成功的。(关于安装apache-tomcat,并在idea中运行,打开本地html文件的案例,在上一篇有具体说明,在这里不赘述)

二、创建一个普通的java项目

File→New Project→命名为myWeb→点击下一步→完成

三、添加Web Application

1、在项目上,鼠标右键Add Framework Suppot

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第1张图片

 2、勾选Web Application(4.0),勾选Creat web.xml,点击OK

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第2张图片

 3、添加完成后,在项目路径下自动生成web文件夹

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第3张图片

四、添加tomcat

1、点击右上方Add Configuration→点击+号→选择Tomcalt Server下的local

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第4张图片

2、点击右下角Fix

 【javaWeb+tomcat+MySQL】综合案例-完整步骤_第5张图片

 3、点击Deployment,把下方的Application context命名的后面的单词删掉,保留和项目名一致,我的项目名为myWeb;

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第6张图片

五、测试tomcat是否连接成功

在项目目录下,找到index.jsp,在body标签内添加内容hello,点击右上角绿色三角运行

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第7张图片

 服务器启动成功,网页自动弹出,效果如下:

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第8张图片

 六、在src目录下创建四个package

在src目录下创建四个package,命名如下:(com后面的qingruan为公司名);

之所以要建四个package,是为了分工,不用所有代码凑在一起。

1、com.qingruan.dao:存放方法类StudentDao.java

2、com.qingruan.entity:存放实体类Student.java

3、com.qingruan.test:存放测试类TestDb.java

4、com.qingruan.util:存放连接数据库的类DbUtils.java

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第9张图片

七、在WEB-INF下创建文件夹lib,导入两个jar包

1、把以下两个包粘贴到lib;(可上网搜)

 2、鼠标右键Add as Library,点击确定,把两个包添加到路径下;

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第10张图片

 八、把druid.properties粘贴在src目录下

文件druid.properties存放的是数据库的名称、账号和密码。

关于java和MySQL版本和工具,以及相关设置的详细介绍在上一篇,这里不再赘述。

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第11张图片

八、实体类、方法类、测试类、连接类(代码部分)

1、方法类StudentDao.java:

package com.qingruan.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.qingruan.entity.Student;
import com.qingruan.util.DbUtils;

// dao  负责与数据库交互的,目前实现的技术是jdbc
public class StudentDao {
    private static PreparedStatement ps = null;
    private static Connection cn = null;
    private static ResultSet rs =null;

    /**
     * 添加学生
     * @param stu  需要传入的参数是学生对象
     * @return  返回受影响的行数
     */
    public int saveStu(Student stu) { // 传入一个学生对象
        // 1.获得连接
        try {
            cn = DbUtils.getConnection();
            // 2.获得预处理对象
            String sql = "insert into student values(null,?,?,?,?,?,?)";
            ps = cn.prepareStatement(sql);
            // 3.赋予实际的参数
            ps.setString(1, stu.getStu_number());
            ps.setString(2, stu.getStu_name());
            ps.setInt(3, stu.getStu_age());
            ps.setString(4, stu.getStu_sex());
            ps.setInt(5, stu.getStu_score());
            ps.setString(6, stu.getStu_hiredate());
            // 4.得到结果集
            return ps.executeUpdate();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally{
            DbUtils.close(null, ps, cn);// 5.释放资源
        }
        return 0;
    }

    /**
     * 修改学生信息
     * @param stu  需要修改的学生信息
     * @return  返回受影响的行数
     */
    public int updateStu(Student stu){
        try {
            cn = DbUtils.getConnection();
            String sql="update  student set stu_number=?,stu_name=?,stu_age=?,stu_sex=?,stu_score=?,stu_hiredate=? where stu_id=?";
            ps=cn.prepareStatement(sql);
            ps.setString(1, stu.getStu_number());
            ps.setString(2, stu.getStu_name());
            ps.setInt(3, stu.getStu_age());
            ps.setString(4, stu.getStu_sex());
            ps.setInt(5, stu.getStu_score());
            ps.setString(6, stu.getStu_hiredate());
            ps.setInt(7, stu.getStu_id());
            return ps.executeUpdate();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally{
            DbUtils.close(null, ps, cn);
        }
        return 0;
    }

    /**
     * 依据学生id删除学生信息
     * @param stuId  需要删除的学生id
     * @return  返回受影响的行数
     */
    public int delStu(int stuId){
        try {
            cn = DbUtils.getConnection();
            String sql="delete from student where stu_id=?";
            ps=cn.prepareStatement(sql);
            ps.setInt(1, stuId);
            return ps.executeUpdate();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            DbUtils.close(null, ps, cn);
        }
        return 0;
    }

    /**
     * 依据学生id查询学生详细信息
     * @param stuId   需要传入的学生编号
     * @return  返回学生都西昂
     */
    public Student  queryByStuId(int stuId){
        Student stu =null;
        try {
            cn = DbUtils.getConnection();
            String sql="select * from student where stu_id=?";
            ps=cn.prepareStatement(sql);
            ps.setInt(1, stuId);
            rs = ps.executeQuery();
            if(rs.next()){
                return stu =new Student(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getInt(4), rs.getString(5), rs.getInt(6), rs.getString("stu_hiredate"));
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            DbUtils.close(rs, ps, cn);
        }
        return stu;
    }

    /**
     * 查询学生列表
     * @return  返回学生集合
     */
    public List  queryFindAll(){
        List list =new ArrayList();
        try {
            cn = DbUtils.getConnection();
            String sql="select * from student";
            ps=cn.prepareStatement(sql);
            rs = ps.executeQuery();
            while(rs.next()){
                list.add(new Student(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getInt(4), rs.getString(5), rs.getInt(6), rs.getString("stu_hiredate")));//放到集合中
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            DbUtils.close(rs, ps, cn);
        }
        return list;
    }

}

2、测试类TestDb.java

package com.qingruan.test;

import java.util.List;

import org.junit.Test;

import com.qingruan.dao.StudentDao;
import com.qingruan.entity.Student;
import com.qingruan.util.DbUtils;

public class TestStuDao {

    StudentDao dao =new StudentDao();

    //保存学生信息
    @Test
    public void save(){
        int result = dao.saveStu(new Student("1013", "Lulu", 22, "女", 95, "2020-9-1"));
        System.out.println(result>0?"添加成功":"添加失败");
    }

    //修改
    @Test
    public void update(){
        Student stu = dao.queryByStuId(4);
        stu.setStu_name("Mimi");
        int result = dao.updateStu(stu);
        System.out.println(result>0?"修改成功":"修改失败");
    }

    //删除
    @Test
    public void delete(){
        int result = dao.delStu(1);
        System.out.println(result>0?"删除成功":"删除失败");
    }

    //单个查询
    @Test
    public void findById(){
        Student stu = dao.queryByStuId(3);
        System.out.println(stu);
    }

    //查询所有
    @Test
    public void findAll(){
        List list = dao.queryFindAll();
        for(Student  stu : list){
            System.out.println(stu);
        }
    }


}

如果@Test是红色异常的,要选中,右键Download Library fom Maven Repository,即可;

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第12张图片

3、连接数据库的类DbUtils.java

package com.qingruan.util;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSourceFactory;

// 针对数据库的连接作用
public class DbUtils {

    //定义私有成员
    private static  DataSource ds;

    //1.静态代码块 加载配置文件,初始化连接池对象
    static{     // 特点:用于给类进行初始化,只加载一次,随着类的加载而加载
        try {
            Properties pro =new Properties();
            //加载属性文件
            pro.load(DbUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
            //获得连接池对象
            ds = DruidDataSourceFactory.createDataSource(pro);
        }catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }



    //2.定义一个方法:获取连接对象
    public static Connection getConnection(){
        try {
            return  ds.getConnection();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    //3.定义一个方法:用于释放资源
    public static void close(ResultSet rs,PreparedStatement ps,Connection cn){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(ps!=null){
            try {
                ps.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(cn!=null){
            try {
                cn.close();  //  此时的关闭,是归还给连接池对象
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    /**
     * 获得连接池的方法
     * @return
     */
    public static  DataSource getDataSource(){
        return ds;
    }

}

4、实体类Student.java

package com.qingruan.entity;

// 学生类 与 数据库中的student学生表是与之对应的
// 将数据库的学生表 看作是 java中的一个学生类   数据库中学生表的字段可以看作是 java中学生类的属性
public class Student {

    private Integer stu_id;  //学生编号(给程序使用)

    private String stu_number;  //学号

    private String stu_name; // 姓名

    private Integer stu_age; // 年龄

    private String stu_sex; // 性别

    private Integer stu_score;//成绩

    private String stu_hiredate; // 入学时间

    public Student() {
        // TODO Auto-generated constructor stub
    }



    public Student(String stu_number, String stu_name, Integer stu_age, String stu_sex, Integer stu_score,
                   String stu_hiredate) {
        this.stu_number = stu_number;
        this.stu_name = stu_name;
        this.stu_age = stu_age;
        this.stu_sex = stu_sex;
        this.stu_score = stu_score;
        this.stu_hiredate = stu_hiredate;
    }


    public Student(Integer stu_id, String stu_number, String stu_name, Integer stu_age, String stu_sex,
                   Integer stu_score, String stu_hiredate) {
        this.stu_id = stu_id;
        this.stu_number = stu_number;
        this.stu_name = stu_name;
        this.stu_age = stu_age;
        this.stu_sex = stu_sex;
        this.stu_score = stu_score;
        this.stu_hiredate = stu_hiredate;
    }



    @Override
    public String toString() {
        return "Student [stu_id=" + stu_id + ", stu_number=" + stu_number + ", stu_name=" + stu_name + ", stu_age="
                + stu_age + ", stu_sex=" + stu_sex + ", stu_score=" + stu_score + ", stu_hiredate=" + stu_hiredate
                + "]";
    }



    public Integer getStu_id() {
        return stu_id;
    }

    public void setStu_id(Integer stu_id) {
        this.stu_id = stu_id;
    }

    public String getStu_number() {
        return stu_number;
    }

    public void setStu_number(String stu_number) {
        this.stu_number = stu_number;
    }

    public String getStu_name() {
        return stu_name;
    }

    public void setStu_name(String stu_name) {
        this.stu_name = stu_name;
    }

    public Integer getStu_age() {
        return stu_age;
    }

    public void setStu_age(Integer stu_age) {
        this.stu_age = stu_age;
    }

    public String getStu_sex() {
        return stu_sex;
    }

    public void setStu_sex(String stu_sex) {
        this.stu_sex = stu_sex;
    }

    public Integer getStu_score() {
        return stu_score;
    }

    public void setStu_score(Integer stu_score) {
        this.stu_score = stu_score;
    }

    public String getStu_hiredate() {
        return stu_hiredate;
    }

    public void setStu_hiredate(String stu_hiredate) {
        this.stu_hiredate = stu_hiredate;
    }







}

九、测试是否成功连接MySQL数据库 

前提:

我的MySQL账号为:root;密码为:1234;

我建的数据库命名为:mydata1

测试java是否成功连接数据库:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class TestConnectMysql {
    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydata1?characterEncoding=utf-8","root","1234");
            System.out.println(cn);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

    }
}

连接成功,控制台输出效果如下:

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第13张图片

十、数据库Student表的相关设置

包含以下属性

stu_id 学生id,不进行指定,由系统自增

stu_number 学号

stu_name 学生姓名

stu_age 学生年龄

stu_sex 学生性别

stu_score 学生成绩

stu_hiredate 日期类型-学生入学年份

在数据库mydata1下,新建表student,我的设置如下:

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第14张图片

我插入了几条数据,如下:

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第15张图片

十一、在web目录下,创建html、css、js文件夹

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第16张图片
 

十二、Web→WEB-INF→index.jsp后缀改为.html

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第17张图片

 内容为:

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第18张图片

右上角要选择为Tomcat,再点击绿色三角形,运行;

 【javaWeb+tomcat+MySQL】综合案例-完整步骤_第19张图片

运行效果:

javaWeb项目下的.html文件,用tomcat在本地服务器上运行;

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第20张图片

 运行以后,要手动关闭,点击idea界面右上角红色正方形;

十三、验证JavaWeb项目下,能否对数据库表进行增删改查

目前还没有把增删改查的页面放在.html网页上,暂时在控制台输出,能正常输出,就代表代码是没有问题的,到后期再把对MySQL表增删改查的功能界面化,显示在网页上。

总之,我们做了这么多,就是为了让tomcat【服务器】+mysql【数据库】+java【增删改查方法】连起来。

运行第七步的TestStuDao.java代码,查看运行结果(因为该测试类包含了增删改查几个方法,所以要一个一个分开运行。选中方法名,右键运行;或者点击方法名左边的绿色三角,运行代码)

1、增加学生信息,效果如下:

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第21张图片

2、查询所有学生的信息,效果如下:

 【javaWeb+tomcat+MySQL】综合案例-完整步骤_第22张图片

3、根据id查询,一个学生的信息,效果如下:

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第23张图片

4、删除学生信息,效果如下:

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第24张图片

 5、修改学生信息,效果如下:

【javaWeb+tomcat+MySQL】综合案例-完整步骤_第25张图片

 

十四、总结

在本期案例中,我们在idea创建了JavaWeb项目,还完成了apache-tomcat的相关配置,并且验证了用tomcat服务器打开本项目下的.html文件;然后,我们在MySQL新建了一个student表,并能在java方法中,顺利进行增删改查的操作。

因为不熟悉在idea创建JavaWeb项目,所以操作起来会比较手生,多尝试就好了。

还有就是在连接数据库时,idea要额外导入一些jar包,还有要注意粘贴在哪个路径下,不要弄错,这个真的非常讲究。

还是那句话:我们做了这么多,就是为了让tomcat【服务器】+mysql【数据库】+java【增删改查方法】连起来。

关于下一篇,我们会在idea创建一个JavaWeb项目,功能为用户可以在tomcat服务器上打开网页,在网页页面上,点击按钮或输入修改后的学生的信息,完成对数据库表的增删改查操作。

你可能感兴趣的:(intellij-idea,java,ide)