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详细分析总结,从入门到实战,哪里不会点哪里!
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
<!--<%--
Created by IntelliJ IDEA.
User: cfl
Date: 2021/05/03
Time: 8:24
To change this template use File | Settings | File Templates.
--%>
<%@ 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项目:仓库管理系统设计和实现(java+ssm+springboot+layui)