博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用IntelliJ IDEA开发SpringMVC网站(四)用户管理
阅读量:6589 次
发布时间:2019-06-24

本文共 8553 字,大约阅读时间需要 28 分钟。

hot3.png

转载请注明出处: 。

注:在阅读本文前,请先阅读:

访问GitHub下载最新源码:

文章已针对IDEA 15做了一定的更新,部分更新较为重要,请重新阅读文章并下载最新源码。

七、用户管理

    既然我们要做一个博客管理系统,当然要首先实现我们的用户管理。在上一文中,我们已经配置好了数据库。接下来,就要实现网站的一些业务逻辑。

1、JPA操作定义

    在实现用户管理操作之前,需要讲解一下JPA的开发工作。

    首先,在com.gaussic.repository包内新建一个UserRepository接口:

180204_kbzG_2287879.png

    让该接口继承 JpaRepository:

package com.gaussic.repository;import com.gaussic.model.UserEntity;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.stereotype.Repository;/** * Created by dzkan on 2016/3/8. */@Repositorypublic interface UserRepository extends JpaRepository
 {}

    在JpaRepository中,定义了几个简化的操作数据库的方法:

    (1) findAll():查找表中所有记录;

    (2)findOne(Integer id):按id来查找某一条记录;

    (3)findByXXX(Object xxx):在这里XXX是一个字段名,根据该字段的值开查找所有记录;

    (4)save()和delete():添加一条记录以及删除一条记录。

    除此之外,我们还可以在该repository中自定义新的方法,这将在稍后实际开发中提及。

2、后台管理

    为了尽可能的在省去篇幅的情况下,在此省去管理员操作的开发。默认在访问 /admin 时,进入后台管理。

(1)查看所有用户

    将MainController补充为如下形式:

package com.gaussic.controller;import com.gaussic.model.UserEntity;import com.gaussic.repository.UserRepository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.ModelMap;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import java.util.List;/** * Created by dzkan on 2016/3/8. */@Controllerpublic class MainController {    // 自动装配数据库接口,不需要再写原始的Connection来操作数据库    @Autowired    UserRepository userRepository;    @RequestMapping(value = "/", method = RequestMethod.GET)    public String index() {        return "index";    }    @RequestMapping(value = "/admin/users", method = RequestMethod.GET)    public String getUsers(ModelMap modelMap) {        // 查询user表中所有记录        List
 userList = userRepository.findAll();        // 将所有记录传递给要返回的jsp页面,放在userList当中        modelMap.addAttribute("userList", userList);        // 返回pages目录下的admin/users.jsp页面        return "admin/users";    }}

    讲解:

    1. 自动装配:相当于数据库操作的极简化,只要定义了就可以直接进行数据库操作,不用再去管开启连接、关闭连接等问题

    2. 找到所有记录:使用JpaRepository的默认方法findAll()。

    3. modelMap:用于将controller方法里面的参数传递给所需的jsp页面,以进行相关显示。

    现在,需要在pages下新建目录admin,并新建users.jsp页面,以进行用户的管理:

<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    
    
    
 
SpringMVC 用户管理    
 
    
    
    
    

SpringMVC 博客系统-用户管理

    

    

所有用户 
添加

    
 
        
            
User表为空,请
添加                
 
        
                            ID                昵称                姓名                密码                操作                        
                                    ${user.id}                    ${user.nickname}                    ${user.firstName} ${user.lastName}                    ${user.password}                                            
详情                        
修改                        
删除                                                            

    讲解:

  1. <c>标签:在jsp中使用了jstl语法,可以方便地进行一些判断<c:if>与遍历操作<c:forEach>;

  2. 页面使用了Bootstrap,部分功能将在之后实现。

    运行Tomcat,在浏览器中输入 ,进入用户管理界面,显示如下:

214510_mwTz_2287879.png

    由于目前数据库中没有数据,因而显示为空,现在需要向数据库中添加用户。

(2)添加用户

    在MainController中增加两个方法:

// get请求,访问添加用户 页面@RequestMapping(value = "/admin/users/add", method = RequestMethod.GET)public String addUser() {    // 转到 admin/addUser.jsp页面    return "admin/addUser";}// post请求,处理添加用户请求,并重定向到用户管理页面@RequestMapping(value = "/admin/users/addP", method = RequestMethod.POST)public String addUserPost(@ModelAttribute("user") UserEntity userEntity) {    // 注意此处,post请求传递过来的是一个UserEntity对象,里面包含了该用户的信息    // 通过@ModelAttribute()注解可以获取传递过来的'user',并创建这个对象    // 数据库中添加一个用户,该步暂时不会刷新缓存    //userRepository.save(userEntity);    // 数据库中添加一个用户,并立即刷新缓存    userRepository.saveAndFlush(userEntity);    // 重定向到用户管理页面,方法为 redirect:url    return "redirect:/admin/users";}

    讲解:

  1. /admin/users/add请求:get请求转到添加用户页面

  2. /admin/users/addP请求:post请求收集数据并存库

  3. @ModelAttribute注解:收集post过来的数据(在此,相当于post过来了一整个userEntity,不用一个一个地取)

  4. save()和saveAndFlush():save()方法处理完毕后,数据依然在缓冲区未写入数据库,使用saveAndFlush()可以立即刷新缓冲区,写入数据库

  5. redirect:/admin/users:这里使用重定向,可以让该方法重定向访问一个请求,ruturn之后,将跳转到 :/admin/users 所访问的页面。

现在,在pages的admin目录下新建一个addUser.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    
    
    
    
 
SpringMVC 添加用户    
 
    
    
    
    

SpringMVC 添加用户

    

    
        
            
Nickname:            
                
            
First Name:            
                
            
Last Name:            
                
            
Password:            
                
            
提交            

    讲解:

  1. <form:form>标签:使用Spring的form标签,可以方便的收集整块数据,commondName=“user”说明form内的内容都保存在这个user实例中,然后将整个user实例传递给controller处理。在所有的input标签中,name一定要与UserEntity中的成员相同,不然无法找到

  2. 在提交之后,后台将会处理 /admin/users/addP 请求。

    现在,重新启动服务器,访问  页面,如下图所示:

195528_9UIR_2287879.png

    输入数据,点击提交,数据库中将会写入新的用户,重新跳转到用户管理页面:

215040_cXYf_2287879.png

(3)查看用户详情

    在MainController中加入查看详情操作:

// 查看用户详情// @PathVariable可以收集url中的变量,需匹配的变量用{}括起来// 例如:访问 localhost:8080/admin/users/show/1 ,将匹配 id = 1@RequestMapping(value = "/admin/users/show/{id}", method = RequestMethod.GET)public String showUser(@PathVariable("id") Integer userId, ModelMap modelMap) {    // 找到userId所表示的用户    UserEntity userEntity = userRepository.findOne(userId);    // 传递给请求页面    modelMap.addAttribute("user", userEntity);    return "admin/userDetail";}

    在pages目录下新建 userDetail.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
    
    
 
SpringMVC 用户详情    
 
    
    
    
    

SpringMVC 用户详情

    

    
                    ID            ${user.id}                            Nickname            ${user.nickname}                            First Name            ${user.firstName}                            Last Name            ${user.lastName}                            Password            ${user.password}            

    讲解:如何访问一个实例内的数据?

        使用${}语法,在{}内可以使用类似Java的方法方便地访问数据。

    重启服务器,进入  ,点击ID = 1的用户的 详情 按钮,可以查看用户详情:

212922_5RVg_2287879.png

    从url可以看出,访问的是ID=1的用户的详细情况,这样的URL采用了REST风格设计,看起来更加简便。

(4)修改用户信息

    现在我们要对用户信息做一定的修改,那该如何做呢。假设我们要能够修改全部的数据(除了id),JpaRepository未定义update方法,需要我们自己定义。

    打开UserRepository,添加updateUser()接口方法:

package com.gaussic.repository;import com.gaussic.model.UserEntity;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.Modifying;import org.springframework.data.jpa.repository.Query;import org.springframework.data.repository.query.Param;import org.springframework.stereotype.Repository;import org.springframework.transaction.annotation.Transactional;/** * Created by dzkan on 2016/3/8. */@Repositorypublic interface UserRepository extends JpaRepository
 {    @Modifying      // 说明该方法是修改操作    @Transactional  // 说明该方法是事务性操作    // 定义查询    // @Param注解用于提取参数    @Query("update UserEntity us set us.nickname=:qNickname, us.firstName=:qFirstName, us.lastName=:qLastName, us.password=:qPassword where us.id=:qId")    public void updateUser(@Param("qNickname") String nickname, @Param("qFirstName") String firstName,                           @Param("qLastName") String qLastName, @Param("qPassword") String password, @Param("qId") Integer id);}

    在MainController中定义update操作方法:

// 更新用户信息 页面@RequestMapping(value = "/admin/users/update/{id}", method = RequestMethod.GET)public String updateUser(@PathVariable("id") Integer userId, ModelMap modelMap) {    // 找到userId所表示的用户    UserEntity userEntity = userRepository.findOne(userId);    // 传递给请求页面    modelMap.addAttribute("user", userEntity);    return "admin/updateUser";}// 更新用户信息 操作@RequestMapping(value = "/admin/users/updateP", method = RequestMethod.POST)public String updateUserPost(@ModelAttribute("userP") UserEntity user) {    // 更新用户信息    userRepository.updateUser(user.getNickname(), user.getFirstName(),            user.getLastName(), user.getPassword(), user.getId());    userRepository.flush(); // 刷新缓冲区    return "redirect:/admin/users";}

    然后,在pages目录下,新建updateUser.jsp文件:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %><%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
    
    
 
SpringMVC Demo 更新用户    
 
    
    
    
    

SpringMVC 更新用户信息

    

    
        
            
Nickname:            
                
            
First Name:            
                
            
Last Name:            
                
            
Password:            
                
 
        
            
提交            

    重启服务器,进入  ,点击第一个用户的 修改 按钮,做如下修改:

220453_hfbu_2287879.png

    提交后,重新跳转回用户管理页面,可发现修改完成:

220536_2u40_2287879.png

(5)删除用户

    现在,新添加一个用户:

220806_9jtd_2287879.png

    现在我们需要删掉新加入的用户,打开MainController,加入以下方法:

// 删除用户@RequestMapping(value = "/admin/users/delete/{id}", method = RequestMethod.GET)public String deleteUser(@PathVariable("id") Integer userId) {    // 删除id为userId的用户    userRepository.delete(userId);    // 立即刷新    userRepository.flush();    return "redirect:/admin/users";}

    重启服务器,进入  ,点击ID=2的用户的删除按钮,在controller中处理完之后,将跳转回用户管理界面:

221353_qHtM_2287879.png

 

    这样,增删该查基本完成了。

    其实,更到这里,基本就可以开始开发工作了,还有一些其他的功能,都需要通过平时的积累以及多查资料来完成。例如JSON数据的处理,异步请求的处理,以及相关外键等操作。

    要知道的是,读者所阅读的三十分钟,需要写这篇文章的人数个小时的努力,整理确实不易。读文章要有举一反三地态度,才能真正的把东西学精学全。

    转载请注明出处: 。

转载于:https://my.oschina.net/gaussik/blog/513614

你可能感兴趣的文章
android学习记录(三)百度地图错误---只有一个电话显示帧,没有地图内容。
查看>>
BZOJ2794 : [Poi2012]Cloakroom
查看>>
【Eclipse】安装subclipse的Eclipse插件
查看>>
Git查看、删除、重命名远程分支和tag【转】
查看>>
浅谈IM软件业务知识——非对称加密,RSA算法,数字签名,公钥,私钥
查看>>
Oracle中REGEXP_SUBSTR及其它支持正则表达式的内置函数小结
查看>>
正确计算linux系统内存使用率
查看>>
关于MapReduce单词统计的例子:
查看>>
【php】利用php的构造函数与析构函数编写Mysql数据库查询类 (转)
查看>>
导出DLLRegisterServer接口遇到的问题
查看>>
压缩算法
查看>>
ios和android的发展前景比较
查看>>
[转载]SpringMVC的Model参数绑定方式
查看>>
Linux socket多进程服务器框架三
查看>>
Debug.print的用法
查看>>
常用名词
查看>>
第一百三十四节,JavaScript,封装库--遮罩锁屏
查看>>
【转】cookie如何共享到各个浏览器
查看>>
自制基于HMM的python中文分词器
查看>>
如何在Root的手机上开启ViewServer,使得HierachyViewer能够连接
查看>>