SpringMVC(17):使用springmvc+spring+jdbc 优化订单管理系统的示例(新增用户的功能实现)

Mybatis+Spring+SpringMVC 框架项目源码 超市订单管理系统 +数据库脚本 该项目由本人编写,针对初学SSM框架者,包括前端jsp页面以及数据库脚本等,触及订单,用户等业务,是一个完整的ssm整合项目 立即下载

2018/1/21

【0】功能要求

用户新增功能:(1)登陆成功后(login.jsp),sys.jsp 系统页面会有用户新增按钮,点击跳转到补全用户信息( useradd.jsp),若是添加成功则会保存至数据库,并跳转用户列表显示(userlist.jsp),否则继续返回用户添加页面( useradd.jsp);(2)增加了:JSR303验证功能,对输入的数据进行校验;(3)使用了JSTL标签;(4)难点在:前台到后台到数据库的Date和Datetime类型数据的传递,参考《SpringMVC(19):Date、DateTime、String之于springmvc 的数据传递详解》;


【1】jar包/文件架构(比较乱,后续继续改进)

jar包:


图1

(说明:hibernate-validator-5.0.1.Final.jar 之所以去除,是因为该版本的jar包不支持validation-api-1.0.0.GA.jar,所以重新导入了

hibernate-validator-4.3.2.Final.jar)


文件结构:


图2

(说明:用户新增功能涉及的所有文件)


     新功能实现的思路是:1、新建实体类user.java,业务类UserService.java、Dao层数据连接类UserDao.java,写Controller的逻辑方法;2、新建用到的页面(useradd2.jsp、userlist.jsp等);3、浏览器调试与数据库验证;


【2】新建实体类user.java

package com.User.entities;

import java.util.Date;

import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;

import com.sun.istack.internal.NotNull;

public class User {
	private Integer id;
	@NotNull
	private String userCode;
	@NotNull
	private String userName;
	@Length(min=6,max=10,message="userPassword长度为6-10")
	@NotNull
	private String userPassword;
	private Integer gender;
	private String birthdayString;
	@DateTimeFormat(pattern="yyyy-MM-dd")
	private Date birthday;
	private String phone;
	private String address ;
	private Integer userRole;
	private Integer createdBy;
	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
	private Date creationDate;
	private String creationDateString;
	private Integer modifyBy;
	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
	private Date modifyDate;
	private String modifyDateString;
	public String getCreationDateString() {
		return creationDateString;
	}
	public void setCreationDateString(String creationDateString) {
		this.creationDateString = creationDateString;
	}
	public String getModifyDateString() {
		return modifyDateString;
	}
	public void setModifyDateString(String modifyDateString) {
		this.modifyDateString = modifyDateString;
	}
	private String roleName;
//省略setter和getter方法、toString()方法,以及无参与带参构造函数
}

解释:1、绑定在属性的注解是 JSR303 验证框架提供的;详细可参考博文:《 SpringMVC(20):数据校验功能 -- 使用JSR303实现服务器端的数据校验》;

2、这里具体使用了:@NotNull、@Length()、@NotNull、@DateTimeFormat;


【3】业务类UserService.java接口:

public interface UserService {
	public User login(String userCode,String userPassword) throws SQLException;
	public List<User>  getUserList(String queryUserName,int _queryUserRole,
						int currentPageNo,int pageSize) throws SQLException, ParseException;
	public int getUserCount(String queryUserName,int _queryUserRole) throws SQLException;
	public boolean add(User user) throws SQLException;
}

实现类UserServiceImpl.java :

@Service("userService")
public class UserServiceImpl implements UserService {
	@Autowired
	private UserDao userDao ;
	//这里省略了 login 、getUserList、getUserCount的具体方法;

	@Override
	public boolean add(User user) throws SQLException {
		System.out.println("UserServiceImpl-add");
		boolean result = false;
		if(userDao.add(user) != 0){
			result = true;
		}
		return result;
	}
}	

【4】Dao层数据连接类UserDao.java接口:

public interface UserDao {
	public User loginMatch(String userName, String userPassword) throws SQLException;
	
	public List<User> getUserList(String queryUserName, int _queryUserRole, int currentPageNo, int pageSize) throws SQLException, ParseException;

	public int getUserCount(String queryUserName,int _queryUserRole) throws SQLException;

	public int add(User user) throws SQLException;
}

实现类UserDaoImpl.java:

package com.User.Dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
4
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;

import com.User.Controller.UserController;
import com.User.entities.User;

@Component("userDao")
public class UserDaoImpl implements UserDao {
	private Connection conn = null;
	private Statement stmt = null;
	private ResultSet rs = null;
	private String sql;
       //这里省略了loginMatch、getUserList、getUserCount的实现方法

	@Override
	public int add(User user) throws SQLException {
		System.out.println("UserDaoImpl-add");
		Logger log = Logger.getLogger(UserController.class.getName());
		SimpleDateFormat birthdayFormat = new SimpleDateFormat("yyyy-MM-dd");
		SimpleDateFormat createDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String birthday = birthdayFormat.format(user.getBirthday());
		String createDate = createDateFormat.format(new Date());
		int count = 0;
		//第一种方法
//		sql = "select * from smbms_user"
//				+ " where u.userName like CONCAT('%',#{"+queryUserName+"},'%')" 
//				+ " and u.userRole="+_queryUserRole+";";
		
		//第二种方法 +",'"		
		sql = "insert into smbms_user "
				+ "(userCode,userName,userPassword,gender,birthday,phone,address,userRole,createBy,createDate) "
				+ "values"
				+ "('"+user.getUserCode()+"','"
				+ user.getUserName()+"','"
				+ user.getUserPassword()+"',"
				+ user.getGender() + ",'"
				+ birthday + "','"
				+ user.getPhone()+"','"
				+ user.getAddress()+"',"
				+ user.getUserRole()+","
				+ user.getCreatedBy() +",'"
				+ createDate+"'"  
				+");";
		String sql2 = " SELECT ROW_COUNT();";
		
		String driver = "com.mysql.jdbc.Driver";
		String url = "jdbc:mysql://localhost:3306/test";
		String username = "root";
		String password = "";
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url,username,password);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		stmt = conn.createStatement();
		System.out.println("add - sql1: "+sql);
		stmt.execute(sql);
		System.out.println("add_result_row - sql: "+sql2);
		rs = stmt.executeQuery(sql2);
		rs.next();
		count = rs.getInt(1);
		System.out.println("count: "+count);
		if(stmt!=null){
			stmt.close();
		}
		if(rs!=null){
			rs.close();
		}
		return count;
	}

	
}


解释:

1、采用了jdbc的操作,因此需要自行写sql语句;

2、 SELECT ROW_COUNT() 查询受前一个操作影响到的记录行数,正确插入数据返回“1”;


【5】控制器UserController.java,新增代码如下:

	
	@RequestMapping(value="/useradd",method=RequestMethod.GET)
	public String addUser(@ModelAttribute("user") User user,HttpSession session){
//		log.info("use: "+user);
//		model.addAttribute("user",user);
		System.out.println("1 session.getAttribute(user)+++"+session.getAttribute("user")+user.toString());
		return "useradd2";
	}
	
	@RequestMapping(value="/useraddsave",method=RequestMethod.POST)
	public String addUserSave(@Valid User user,BindingResult bindingResult,HttpSession session) throws SQLException, ParseException{
		if(bindingResult.hasErrors() ){
			System.out.println("add user validated has error ");
			return "useradd2";
		}
		user.setCreatedBy(((User)session.getAttribute("currentUser")).getId());
//		System.out.println("2 session.getAttribute(user)+++"+session.getAttribute("user")+user.toString());
//		System.out.println("3 session.getAttribute(user)+++"+session.getAttribute("user")+user.toString());
//		System.out.println("4 session.getAttribute(user)+++"+session.getAttribute("user")+user.toString());
//		System.out.println("5 session.getAttribute(user)+++"+session.getAttribute("user")+user.toString());
		if(userService.add(user)){
			System.out.println("add new user successfully");
			return "redirect:/user/userlist.html";
		}
		return "useradd2";
	}

解释:

1、@ModelAttribute 注解的使用,相当于声明了一个放进model的attribute(实则为一个Map,key为“user”);

2、一个方法是处理:请求跳转到useradd;第二个方法是处理:请求保存添加好的new user信息;

3、@Valid User user,这里入参为前台jsp的JSR验证注解,后面必须跟着 BindingResult bindingResult,若是出错则会在前台显示信息(具体信息备注在User.java实体类了);


【6】前端页面useradd2.jsp(使用了JSTL标签):

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fm" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" +>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h4>这是用户添加页面,请在下方输入新的用户信息:</h4>
	<fm:form method="post" modelAttribute="user" action="${pageContext.request.contextPath}/user/useraddsave" >
		<fm:errors path="userCode"></fm:errors>
		用户编码 :<fm:input path="userCode" /><br/>
		<fm:errors path="userName"></fm:errors>
		用户名称 :<fm:input path="userName"/><br/>
		<fm:errors path="userPassword"></fm:errors>
		用户密码 :<fm:password path="userPassword"/><br>
		用户地址 :<fm:input path="address" /><br>
		用户电话 : <fm:input path="phone"/><br>
		<fm:errors path="birthday"></fm:errors>
		用户生日 :<fm:input path="birthday" /><br>
		
		用户性别: <fm:radiobutton path="gender" value="1"/>女
			   <fm:radiobutton path="gender" value="2"/>男<br>		
		用户角色 :<br>
				  <fm:radiobutton path="userRole" value="101" />OrdinaryUser 
				  <fm:radiobutton path="userRole" value="110"/>Administrator<br>
				  <fm:radiobutton path="userRole" value="111"/>Manager 
				  <fm:radiobutton path="userRole" value="100"/>tour<br>
		<input type="submit" name="保存"/>
		<input type="reset" value="重置"/>
	</fm:form>
</body>
</html>

解释:

1、记住要导入JSTL,在文件开头加入:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>,下载并导入jar包:jstl-1.2.jar;


【7】输出结果:


图3



图4



图5



图6


springmvc写的超市订单管理系统 springmvc写的超市订单管理系统,连接mysql,使用tomcat 立即下载

相关推荐

springmvc实现的简单用户管理系统

springmvc实现的简单用户管理系统,包括直接生成页面和返回json两种方式,配置明了,简单易懂,适合初学者

SpringMVC(14):使用springmvc+spring+jdbc 优化订单管理系统的示例(多条件查询用户列表功能实现)

SpringMVC(14):使用springmvc+spring+jdbc 优化订单管理系统的示例(多条件查询用户列表功能实现)

Diligence is the mother of success. 963

《订货管理系统》java开源基于Springboot-MySql

演示地址: http://120.48.118.193:8080/index 演示账号: 平台运营:admin/admin123 供应商:gys/gys123 采购人员:caigou/caigou123 垂直行业集采/批发贸易平台,自营与招商入驻相结合,以线上交易与信息整合为核心,实现行业内多角色资源平台化运营。 订单管理系统的主要功能是通过统一订单提供用户整合的一站式供应链服务,订单管理以及订单跟踪管理能够使用户的物流服务得到全程的满足。订单管理系统是物流管理链条中的不可或缺的部分,通过对订单的管理和分配,使仓储管理和运输管理有机的结合,稳定有效地实现物流管理中各个环节充分发挥作用,使仓储、运输、订单成为一个有机整体,满足物流系统信息化的需求。

【Spring MVC】(三)搭建Spring MVC+Spring+JDBC框架以及在此框架上进行项目开发

文章目录Spring MVC+Spring+JDBC框架搭建 Spring MVC+Spring+JDBC框架搭建

云祁QI 2092

[原创]Linux 802.11n CSI tool Monitor模式

Linux 802.11n CSI tool Monitor模式 使用AP模式的缺陷在于ping 命令速度比较慢,且不能精确控制发送的参数,比如接收的包数量是不可控的。Monitor模式可以调制发送速率、发包数量、发送天线个数、HT模式、short/long guard interval等等,因此调通Monitor模式是必须的。期间参考了博主沃一德的CSI Tool安装使用讲解,对他的工作表示感...

u014645508的博客 1万+

Golang中使用Qt库(therecipe/qt)+QtDesigner + Goland (一) 环境搭建

搭建的目的只是刚好看到有这么一个模块, 还有给使用Go的人需要用到调试界面的时候用一下,真正开发界面并不建议用,没必要, 还有缺点就是在windows平台下编译偏慢, 还有其他一些UI纯Go开发的UI -

听我一言的博客 1万+

基于JAVA+SpringMVC+Mybatis+MYSQL的超市订单管理系统

项目功能: 系统包括管理员登录,订单管理,供应商管理,用户管理,角色管理,密码修改,退出登录等功能 页面效果:

程序猿编程 351

Unity通过Vosk实现离线语音识别方法

以下是一个使用 Unity 和 Vosk(一个开源的离线语音识别库)的简单示例。将Vosk的DLL文件(如libvosk.dll、vosk.dll等)放入Assets/Plugins文件夹中。通过以上步骤,你可以在Unity中实现一个简单的离线语音识别功能。音频格式:确保录音的音频格式与Vosk模型要求的格式一致(通常是16kHz、16bit单声道)。首先,你需要下载Vosk的语音识别模型。在Assets文件夹中创建一个Plugins文件夹,用于存放Vosk的DLL文件。打开Unity并创建一个新的项目。

qq_39515892的博客 2070

SpringMVC(19):使用springmvc+spring+jdbc 优化订单管理系统的示例(根据ID修改用户信息的功能实现)

SpringMVC(19):使用springmvc+spring+jdbc 优化订单管理系统的示例(ID查看并修改用户信息的功能实现)

Diligence is the mother of success. 1434

macOS Jdk1.8安装(目前主流版本的jdk)

添加环境环境变量,类似于windows的高级设置中path配置的环境变量。查看 JAVA_HOME 目录。查看 JDK 版本信息。一直下一步安装就好了。在终端的根目录下运行。

m0_50207524的博客 9353

深入理解「二进制掩码」:从原理到实践

二进制掩码本质上是一个二进制数,用于通过位操作(如与、或、非、异或等)选择性地操作目标数据的某些位。掩码的每一位(bit)可以看作一个“开关”,决定是否对目标数据的对应位进行操作。二进制掩码是位操作的灵魂,掌握它不仅能提升代码效率,还能解锁许多高级编程技巧。从基础的位提取到复杂的子集枚举,掩码的应用无处不在。希望本文的讲解和代码示例能帮助你快速上手,并在实际项目中灵活运用。如果你有更多关于掩码的疑问或应用场景,欢迎在评论区留言交流!

m0_73494933的博客 2432

SSM电商直播订单管理系统1gfsp

通过这些功能的有机结合,实现订单的快速生成、处理、跟踪及售后服务,为电商企业提供全面的订单管理解决方案。它消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索,使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects)映射成数据库中的记录。通过本研究,预期将开发出一套适用于电商直播场景的订单管理系统,能够显著提升订单处理效率,优化用户购物体验,为电商企业提供有力的技术支持,推动电商直播行业的健康发展。,处理前端请求并提供业务逻辑。

ck3019的博客 944

NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver. 最全解决方案!详细!

真的折磨了我整整一天,从网上的资料到GPT都翻遍了,终于是解决了!以下方案希望能帮助到你们。

weixin_44124632的博客 1万+

使用SSM框架重构狂神Javaweb项目超市订单管理系统

使用SSM框架重构狂神Javaweb项目超市订单管理系统 【下载地址】使用SSM框架重构狂神Javaweb项目超市订单管理系统 本项目是对狂神JavaWeb超市订单管理系统的重构实践,采用SSM框架(Spring + SpringMVC + MyBatis)优化原有结构,提升可维护性和扩展性。通过框架迁移、业务分层、数据...

gitblog_06730的博客 682

Pintos project 1 实验报告(代码分享)

任务一 Alarm Clock 用到的相干目录有: pintos/src/devices time.h && time.c pintos/src/threads thread.h && thread.c 预期pass希望:暂无,安装pintos之后,第一次对threads进行make check操作,可以发现以alarm--开头的前六个文件,以及mlfqs-fair-2和mlfqs-fair-20文件,一开始就测试成功pass。但是为了避免对后期的修改有影响,这里还是要

m0_53112875的博客 6860

解锁RK1126与SC132GS摄像头适配密码:技术与代码全解析

本文详细介绍了瑞芯微RK1126芯片与SC132GS摄像头的适配方法。首先分析了RK1126的四核Cortex-A7处理器、Mali-T860 GPU等硬件特性,以及SC132GS的130万像素、全局快门等技术参数。重点阐述了基于MIPI CSI接口的硬件连接原理和基于V4L2框架的软件驱动设计,并提供了完整的初始化、数据采集和图像处理代码实现。针对常见连接和图像质量问题给出了解决方案,展现了该组合在智能安防、工业检测等领域的应用潜力,为开发者提供了实用的技术参考。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1501

SpringMVC(24):使用springmvc+spring+jdbc 优化订单管理系统的示例(多文件上传功能的实现)

SpringMVC(23):使用springmvc+spring+jdbc 优化订单管理系统的示例(多文件上传功能的实现)

Diligence is the mother of success. 418

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SpringMVC(18):使用springmvc+spring+jdbc 优化订单管理系统的示例(供应商新增的功能实现)

SpringMVC(18):使用springmvc+spring+jdbc 优化订单管理系统的示例(供应商新增的功能实现)

Diligence is the mother of success. 809

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SpringMVC(22):使用springmvc+spring+jdbc 优化订单管理系统的示例(ID修改供应商明细的功能实现)

SpringMVC(22):使用springmvc+spring+jdbc 优化订单管理系统的示例(ID修改供应商明细的功能实现)

Diligence is the mother of success. 847

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SpringMVC(23):使用springmvc+spring+jdbc 优化订单管理系统的示例(单文件上传功能的实现)

SpringMVC(23):使用springmvc+spring+jdbc 优化订单管理系统的示例(单文件上传功能的实现)

Diligence is the mother of success. 469

使用SSM框架重构狂神Javaweb项目超市订单管理系统:提升JavaWeb开发的现代实践

使用SSM框架重构狂神Javaweb项目超市订单管理系统:提升JavaWeb开发的现代实践 【下载地址】使用SSM框架重构狂神Javaweb项目超市订单管理系统 本项目是对狂神JavaWeb超市订单管理系统的重构实践,采用SSM框架(Spring + SpringMVC + MyBatis)优化原有结构,提升可维护性和扩...

gitblog_06777的博客 583

SSM框架实战:30分钟搞定超市订单管理系统部署(含数据库配置避坑指南)

本文详细介绍了如何使用SSM框架在30分钟内高效部署超市订单管理系统,特别针对JavaWeb开发者提供了数据库配置避坑指南和实战技巧。从环境准备、项目初始化到SSM框架核心配置,再到常见问题排查与性能优化,全面覆盖部署过程中的关键步骤,帮助开发者快速完成系统部署并提升运营效率。

weixin_30555125的博客 481

SpringMVC(16):使用springmvc+spring+jdbc 优化订单管理系统的示例(多条件查询供应商列表功能实现)

SpringMVC(16):使用springmvc+spring+jdbc 优化订单管理系统的示例(多条件查询供应商列表功能实现)

Diligence is the mother of success. 953

SpringMVC(20):使用springmvc+spring+jdbc 优化订单管理系统的示例(通过REST风格实现查看户信息明细的功能实现)

SpringMVC(20):使用springmvc+spring+jdbc 优化订单管理系统的示例(通过REST风格实现查看户信息明细的功能实现)

Diligence is the mother of success. 515

SpringMVC(21):使用springmvc+spring+jdbc 优化订单管理系统的示例(ID查看供应商信息明细-REST的功能实现)

SpringMVC(21):使用springmvc+spring+jdbc 优化订单管理系统的示例(ID查看供应商信息明细-REST的功能实现)

Diligence is the mother of success. 606

从零搭建JavaWeb超市订单管理系统:SSM框架与MySQL实战指南

本文是一份详细的JavaWeb实战指南,手把手教你从零开始搭建一个超市订单管理系统。文章深入解析了为何选择经典的SSM框架组合进行开发,并提供了从数据库设计、项目骨架搭建,到用户登录、订单管理等核心功能的具体实现步骤。同时,涵盖了前端交互与生产环境部署的完整流程,是掌握Java企业级应用开发的绝佳实践项目。

bert9linguist的博客 197
上一篇: SpringMVC(14):使用springmvc+spring+jdbc 优化订单管理系统的示例(多条件查询用户列表功能实现)
下一篇: SpringMVC(19):Date、DateTime、String之于springmvc 的数据传递详解
后台技术汇
博客等级 码龄11年 670粉丝 531原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值