SpringMVC(17):使用springmvc+spring+jdbc 优化订单管理系统的示例(新增用户的功能实现)
2018-01-28 23:32
1166 查看
2018/1/21
的数据传递详解》;
图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、浏览器调试与数据库验证;
解释:1、绑定在属性的注解是 JSR303 验证框架提供的;详细可参考博文:《SpringMVC(20):数据校验功能
-- 使用JSR303实现服务器端的数据校验》;
2、这里具体使用了:@NotNull、@Length()、@NotNull、@DateTimeFormat;
实现类UserServiceImpl.java:
实现类UserDaoImpl.java:
解释:
1、采用了jdbc的操作,因此需要自行写sql语句;
2、 SELECT ROW_COUNT() 查询受前一个操作影响到的记录行数,正确插入数据返回“1”;
解释:
1、@ModelAttribute 注解的使用,相当于声明了一个放进model的attribute(实则为一个Map,key为“user”);
2、一个方法是处理:请求跳转到useradd;第二个方法是处理:请求保存添加好的new user信息;
3、@Valid User user,这里入参为前台jsp的JSR验证注解,后面必须跟着 BindingResult bindingResult,若是出错则会在前台显示信息(具体信息备注在User.java实体类了);
解释:
1、记住要导入JSTL,在文件开头加入:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>,下载并导入jar包:jstl-1.2.jar;
图3
图4
图5
图6
【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.for 4000 mat(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(14):使用springmvc+spring+jdbc 优化订单管理系统的示例(多条件查询用户列表功能实现)
- SpringMVC(18):使用springmvc+spring+jdbc 优化订单管理系统的示例(供应商新增的功能实现)
- SpringMVC(24):使用springmvc+spring+jdbc 优化订单管理系统的示例(多文件上传功能的实现)
- SpringMVC(21):使用springmvc+spring+jdbc 优化订单管理系统的示例(ID查看供应商信息明细-REST的功能实现)
- SpringMVC(22):使用springmvc+spring+jdbc 优化订单管理系统的示例(ID修改供应商明细的功能实现)
- SpringMVC(16):使用springmvc+spring+jdbc 优化订单管理系统的示例(多条件查询供应商列表功能实现)
- SpringMVC(13):使用springmvc优化订单管理系统的示例(登陆和注销的简单实现)
- SpringMVC(15):使用springmvc优化订单管理系统的示例(Bug解决 -- 用户查询显示的内存对象赋值)
- Spring(17):新增功能:在超市订单系统中实现订单表的查询(采用MapperScannerConfigurer)
- SpringMVC(8):使用JDBC+springmvc 完成useDao的查询和添加用户(小实验)
- SpringMVC学习系列(12) 完结篇 之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现
- SpringMVC学习系列之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现
- “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第四篇(用户管理功能的实现)
- SpringMVC(12)完结篇 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)
- maven+springMVC+jdbc实现用户注册功能
- SpringMVC学习系列(12) 完结篇 之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现
- SpringMVC学习系列(12) 完结篇 之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现
- Spring+Spring MVC+JDBCTemplate实现简单的用户管理功能
- springmvc05-Spring+Springmvc+Hibernate实现简单的用户管理系统