用户信息列表展示案例

〇、写在前面

本文是【黑马程序员】用户信息列表展示案例的实践。
本文实践所需资料(jar包、页面、配置文件)下载地址为:案例资料(提取码:java)。
(前排提醒:不要用MySQL 8.x!我踩坑踩了好久!MySQL 5.x就很好!)

一、需求

用户信息的增删改查操作。

二、设计

技术选型:Servlet + JSP + MySQL + JDBCTempleat + Duird + BeanUtilS + Tomcat

数据库设计:

CREATE DATABASE demo2;
USE demo2;
CREATE TABLE user(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    gender VARCHAR(5),
    age INT,
    address VARCHAR(32),
    qq VARCHAR(20),
    email VARCHAR(50)
);

使用SQLyog图形管理MySQL。用户信息列表展示案例_第1张图片

三、开发

(一)数据库环境

CREATE DATABASE demo2;
USE demo2;
CREATE TABLE user(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    gender VARCHAR(5),
    age INT,
    address VARCHAR(32),
    qq VARCHAR(20),
    email VARCHAR(50)
);

(二)项目环境

  1. 在IDEA中创建JavaEE项目。用户信息列表展示案例_第2张图片
  2. 在IDEA集成配置Tomcat服务器。用户信息列表展示案例_第3张图片用户信息列表展示案例_第4张图片
  3. 导入jar包。
    新建src/main/webapp/WEB-INF/lib文件夹,将下载资料中的jar包复制到lib文件夹中。
    全选中后,右键 -> Add as Library用户信息列表展示案例_第5张图片
  4. 添加案例页面。
    将下载资料中页面文件夹中的所有文件、文件夹复制粘贴到本项目的src/main/webapp文件夹中。
    项目目录如下:用户信息列表展示案例_第6张图片
  5. 修改配置文件。
    将下载资料中的配置文件中的druid.properties复制粘贴到src/main/resources文件夹中。修改配置文件内容(数据库名、MySQL用户名、MySQL密码):

    driverClassName=com.mysql.jdbc.Driver
    url=jdbc:mysql:///demo2
    username=root
    password=你的数据库密码
    # 初始化连接数量
    initialSize=5
    # 最大连接数
    maxActive=10
    # 最大等待时间
    maxWait=3000
  6. 创建包。src/main/java/com/.../demo2中domain、web、service、dao、util包。用户信息列表展示案例_第7张图片
  7. 测试。
    启动Tomcat服务器,访问http://localhost:8080/虚拟路径/index.html。(虚拟路径为第二步中Tomcat配置的虚拟路径。本文的虚拟路径为demo2。)
    如能正常交互则项目环境搭建成功。

(三)编码

domain/User.java

根据数据库设计编写User实体类。使用IDEA快捷键Alt + Insert快速生成构造器、Get/Set方法、toString方法。

package com.shadowck.demo2.domain;

public class User {
    private int id;
    private String name;
    private String gender;
    private int age;
    private String address;
    private String qq;
    private String email;

    public User() {
    }

    public User(int id, String name, String gender, int age, String address, String qq, String email) {
        this.id = id;
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.address = address;
        this.qq = qq;
        this.email = email;
    }

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

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getQq() {
        return qq;
    }

    public void setQq(String qq) {
        this.qq = qq;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                ", qq='" + qq + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

util/JDBCUtils.java

将下载资料中配置文件文件夹中JDBCUtils.java的内容复制粘贴即可。

package com.shadowck.demo2.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import javax.xml.crypto.Data;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * JDBC工具类 使用Durid连接池
 */
public class JDBCUtils {

    private static DataSource ds ;

    static {

        try {
            //1.加载配置文件
            Properties pro = new Properties();
            //使用ClassLoader加载配置文件,获取字节输入流
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);

            //2.初始化连接池对象
            ds = DruidDataSourceFactory.createDataSource(pro);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接池对象
     */
    public static DataSource getDataSource(){
        return ds;
    }


    /**
     * 获取连接Connection对象
     */
    public static Connection getConnection() throws SQLException {
        return  ds.getConnection();
    }
}

dao/UserDAO.java

编写用户操作的DAO。

package com.shadowck.demo2.dao;

import com.shadowck.demo2.domain.User;

import java.util.List;

public interface UserDAO {
    
    public List findAll();
    
}

dao/impl/UserDAOImpl.java

package com.shadowck.demo2.dao.impl;

import com.shadowck.demo2.dao.UserDAO;
import com.shadowck.demo2.domain.User;
import com.shadowck.demo2.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;

public class UserDAOImpl implements UserDAO {

    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    @Override
    public List findAll() {

        //1. 定义sql
        String sql = "SELECT * FROM user";
        List users = template.query(sql, new BeanPropertyRowMapper(User.class));

        return users;
    }
}

service/UserService.java

编写用户管理的业务接口。

package com.shadowck.demo2.service;

import com.shadowck.demo2.domain.User;

import java.util.List;

public interface UserService {

    public List findAll();
}

service/impl/UserServiceImpl.java

package com.shadowck.demo2.service.Impl;

import com.shadowck.demo2.dao.UserDAO;
import com.shadowck.demo2.dao.impl.UserDAOImpl;
import com.shadowck.demo2.domain.User;
import com.shadowck.demo2.service.UserService;

import java.util.List;

public class UserServiceImpl implements UserService {

    private UserDAO dao = new UserDAOImpl();
    
    @Override
    public List findAll() {
        //调用DAO
        return dao.findAll();
    }
}

index.jsp

index.html的内容复制后进行改动。注意使用EL表达式动态获取虚拟目录:${pageContext.request.contextPath}

<%@ page contentType="text/html;charset=UTF-8" language="java" %>



    
    
    
    首页

    
    
    
    
    
    
    




web/servlet/UserListServlet.java

package com.shadowck.demo2.web.servlet;

import com.shadowck.demo2.domain.User;
import com.shadowck.demo2.service.Impl.UserServiceImpl;

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;
import java.util.List;

@WebServlet("/userListServlet")
public class UserListServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //1. 调用userService完成查询。
        UserServiceImpl service = new UserServiceImpl();
        List users = service.findAll();

        //2. 将List存入request域
        req.setAttribute("user", users);

        //3. 转发到list.jsp
        req.getRequestDispatcher("/list.jsp").forward(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
}

list.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>





    
    
    
    
    
    
    
    用户信息管理系统

    
    
    
    
    
    
    


用户信息列表

编号 姓名 性别 年龄 籍贯 QQ 邮箱 操作
${s.count} ${user.name} ${user.gender} ${user.age} ${user.address} ${user.qq} ${user.email} 修改 删除
添加联系人

你可能感兴趣的:(java学习)