Java实现用户管系统理查询添加更新删除分页功能

Posted ahcfl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实现用户管系统理查询添加更新删除分页功能相关的知识,希望对你有一定的参考价值。

一、技术栈

语言:Java

Web:html + css + js +bootstrap

数据库:mysql8.2

服务器:Tomcat

开发环境:JDK–12、Servlet–3.0 、ntelliJ IDEA20、Navicat-11

所需知识:javase、servlet、http、request、response、cookie、session、jsp+el+jstl、filter、listener

详细总结链接:
【学Java不迷茫,真香警告】JavaSE+JavaEE详细分析总结,从入门到实战,哪里不会点哪里!

01-HTML+CSS+JS【常用总结+案例练习】

02-JavaWeb开发【Tomcat服务器&Servlet接口&HTTP协议&HttpServletRequest&BeanUtils工具包封装请求数据&HttpServletResponse】

03-JavaWeb开发【最详细的Cookie&Session分析】

04-JavaWeb开发【JSP&EL&JSTL&MVC&Bootstrap前端框架】

05-JavaWeb的三大组件:小程序Servlet+过滤器Filter+监听器Listener

也可以使用maven项目来完成哦。

开发过程中可能会出现的5中报错异常的解决方案:
关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4、Unknown system variable ‘query_cache_size

二、业务功能流程分析图

查询所有用户

在这里插入图片描述

新增用户

在这里插入图片描述

修改用户信息

在这里插入图片描述

逻辑删除用户

在这里插入图片描述

分页显示查询结果【这个好喝呀】

首先观察下百度分页

在这里插入图片描述

编写流程

在这里插入图片描述

三、案例实现效果图

首页

在这里插入图片描述

登陆

在这里插入图片描述

显示所有用户信息

在这里插入图片描述

新增用户

在这里插入图片描述

修改用户信息

在这里插入图片描述

删除用户

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

分页所有用户信息

在这里插入图片描述

四、案例实现代码

注意事项

可先看这些处理概念。后面开发时需要注意的细节。

JAVA反射机制-EL表达式获取对象属性的原理
EL表达式获取对象属性的原理是这样的:

在EL中,对一个Bean的某字段进行引用,只需 ${bean.field},当然,这个bean是已经被set到容器中的。

我们从容器中取出以bean为名字的Object,通过Java反射机制知道它的真实类型,然后通过field以javabean规范拼出方法名(首字母大写并加上get前缀),进行调用,一旦找到与之匹配的方法,El表达式就会认为这就是要访问的属性,并返回属性的值。所以,想要通过EL表达式获取对象属性的值,那么这个属性就必须有与之对应的get方法。

如果这个表达式是多级的,如${bean.field.field},其中第一个field本身就是一个bean对象,同样需要递归的进行解析。

所以这中间不关私有属性的事,调用的是私有属性的get/set方法。
如果你不写get/set方法,那EL表达式就拿不到值了。set方法是给你后台设置值用的。
这样取值的${bean.getFiled}.是死活都取不到的,改成了${user.field}就取到了。 

[友友遇到的报错] Bean类少了 一个参数的get方法 EL表达式解析不到值

1、数据库设计

admin

create table admin(
	id int primary key auto_increment,
	username varchar(50) not null unique,
	password varchar(50) not null unique
);

insert into user values(null,'admin','1234');

t_user

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `sex` varchar(50) NOT NULL,
  `age` int(11) NOT NULL,
  `address` varchar(50) NOT NULL,
  `qq` varchar(50) NOT NULL,
  `email` varchar(50) NOT NULL UNIQUE,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO `t_user` VALUES ('1', '霍建华', '男', '280', '广西', '766335435', 'zs@qq.com');
INSERT INTO `t_user` VALUES ('2', '李四', '男', '22', '广东', '243424242', 'ls@qq.com');
INSERT INTO `t_user` VALUES ('3', '王五', '女', '230', '广东', '474574574', 'ww@qq.com');
INSERT INTO `t_user` VALUES ('4', '赵六', '女', '28', '广东', '77777777', 'zl@qq.com');
INSERT INTO `t_user` VALUES ('5', '钱七', '女', '25', '湖南', '412132145', 'qq@qq.com');
INSERT INTO `t_user` VALUES ('7', '锁哥', '男', '18', '黑龙江', '361', '520@qq.com');
INSERT INTO `t_user` VALUES ('8', '关晓彤', '女', '22', '广东', '361', '361@qq.con');
INSERT INTO `t_user` VALUES ('9', '刘亦菲', '女', '28', '湖南', '362', '362@qq.com');
INSERT INTO `t_user` VALUES ('10', '柳岩', '女', '38', '广西', '363', '363@qq.com');
INSERT INTO `t_user` VALUES ('11', '鹿晗', '女', '300', '广西', '2250', '2250@qq.com');
INSERT INTO `t_user` VALUES ('12', '赵丽颖', '女', '28', '广西', '28', '28@qq.com');
INSERT INTO `t_user` VALUES ('13', '刘德华', '男', '53', '广东', '361', '53@qq.com');
INSERT INTO `t_user` VALUES ('14', '刘亦菲', '女', '28', '广东', '1122', '1122@qq.com');
INSERT INTO `t_user` VALUES ('15', '锁哥', '男', '18', '黑龙江', '111', '111@qq.com');

2、项目结构

1)src

在这里插入图片描述

2)web

在这里插入图片描述

3)工具包

在这里插入图片描述

4)配置文件

在这里插入图片描述

jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/user_managerment\\
  ?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false
jdbc.username=root
jdbc.password=1234
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--加载外部的配置文件-->
    <properties resource="jdbc.properties"/>
    <!--别名-->
    <typeAliases>
        <package name="com.test.sh.pojo"/>
    </typeAliases>
    <!--mybatis环境的配置
        一个核心配置文件,可以配置多个运行环境,default默认使用哪个运行环境
    -->
    <environments default="development">
        <!--通常我们只需要配置一个就可以了, id是环境的名字 -->
        <environment id="development">
            <!--事务管理器:由JDBC来管理-->
            <!--
                事务管理器type的取值:
                1. JDBC:由JDBC进行事务的管理
                2. MANAGED:事务由容器来管理,后期学习Spring框架的时候,所有的事务由容器管理
            -->
            <transactionManager type="JDBC"/>
            <!--数据源的配置:mybatis自带的连接池-->
            <!--
                数据源:
                1. POOLED:使用mybatis创建的连接池
                2. UNPOOLED:不使用连接池,每次自己创建连接
                3. JNDI:由服务器提供连接池的资源,我们通过JNDI指定的名字去访问服务器中资源。
            -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>

    </environments>
    <!--映射器-->
    <mappers>
        <!--加载其它的映射文件 注:注解开发是点号-->
        <!--<package name="com.test.sh.dao"></package>-->
        <!--
            加载其它的映射文件 xml形式
                包扫描方式加载mapper映射文件,说明:
                1. 要求mapper映射文件,与mapper接口要放在同一个目录
                2. 要求mapper映射文件的名称,与mapper接口的名称要一致
            -->
        <package name="com.test.sh.dao"/>
    </mappers>
</configuration>
log4j.properties
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=D:/IdeaProjects/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=debug, stdout,file

5)web页面
index.html
<!--<%&#45;&#45;
  Created by IntelliJ IDEA.
  User: cfl
  Date: 2021/05/03
  Time: 8:24
  To change this template use File | Settings | File Templates.
&#45;&#45;%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>-->
<html>
<head>
    <!-- 指定字符集 -->
    <meta charset="utf-8">
    <!--使用微软最新的浏览器Edge的内核来解析当前的HTML文件,最新的浏览器都支持 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!--
    响应式布局参数:
     viewport: 视口的参数
     width=device-width:默认的网页宽度是设备的宽度
     initial-scale=1: 初始的缩放比1:1
     -->
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->

    <!-- 1. 导入bootstrap的全局css样式  -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <title>用户管理系统</title>
</head>
<body>
<h3 font-siz:200px align="center" style="color: darkturquoise">用户后台管理系统</h3>
<br><br>

<div class="container">
    <!-- 默认是白色,navbar-inverse  表示黑色-->
    <nav class="navbar navbar-inverse">
        <!-- container-fluid 表示占容器nav的100%-->
        <div class="container-fluid">
            <!-- navbar-header表示指定商标和开关的样式,让它在手机上更好的显示-->
            <div class="navbar-header">
                <!--开关按钮-->
                <!--data-toggle="collapse" 表示点击按钮时可以折叠
                   data-target 点击开关按钮时,可以找到id是bs-example-navbar-collapse-1下拉菜单
                   而我们发现下面的下拉菜单的id正好是 bs-example-navbar-collapse-1
-->
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                        data-target="#bs-example-navbar-collapse-1">
                    <!--开关按钮中的白线-->
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <!--navbar-brand 表示商标 类似于苹果网站的苹果标志,无论设备窗口怎么变化,商标都会存在-->
                <a class="navbar-brand" href="#">Manager</a>
            </div>

            <!-- 下拉菜单,表单等 navbar-collapse 表示可以折叠的所有的项-->
            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                <ul class="nav navbar-nav">
                    <li class="active">
                        <span class="sr-only">(current)</span></a>
                        <a href="/register.jsp" class="dropdown-toggle" data-toggle="dropdown"
                           role="button" aria-haspopup="true" aria-expanded="false">注册
                            <!--向下箭头-->
                        </a>
                    </li>
                    <li class="dropdown">
                        <a href="/login.jsp" class="dropdown-toggle" data-toggle="dropdown"
                           role="button" aria-haspopup="true" aria-expanded="false">登陆
                            <!--向下箭头-->
                        </a>
                    </li>
                    <li class="dropdown">
                        <a href="/images.jsp" class="dropdown-toggle" data-toggle="dropdown"
                           role="button" aria-haspopup="true" aria-expanded="false">查询
                        </a>
                    </li>
                    <li class="dropdown">
                        <a href="/books.jsp" class="dropdown-toggle" data-toggle="dropdown"
                           role="button" aria-haspopup=以上是关于Java实现用户管系统理查询添加更新删除分页功能的主要内容,如果未能解决你的问题,请参考以下文章

软工大项目分工

Java后台管理系统:MyBatis分页功能实现

Java项目:仓库管理系统设计和实现(java+ssm+springboot+layui)

《结对-航空购票系统-设计文档》

java分页中怎么实现当本页面最后一条记录被删除,自动向上一个页面跳转

spring项目——用户管理系统