纳税服务系统【用户模块之简单增删改查】

2023-11-06 21:50

本文主要是介绍纳税服务系统【用户模块之简单增删改查】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

为了更好地掌握SSH的用法,使用一个纳税服务系统来练手…..搭建SSH框架环境在上一篇已经详细地说明了。http://blog.csdn.net/hon_3y/article/details/72630031

用户模块需求

拥有增删改查和导入导出到EXCEL的功能

这里写图片描述

添加用户:有了这个界面,我们就知道实体表的属性有什么了。

a


添加配置文件

每个模块都应该有自己的配置文件,这样的话就方便我们管理模块之间的功能,不用把所有的配置都写在总文件中。

因此,我们在user模块创建了一个user包,下面又创建了config包来管理配置文件

这里写图片描述

JavaBean与映射文件

JavaBean

根据上面需求要添加用户的属性,直接写就行了。


public class User implements Serializable {private String id;private String dept;private String account;private String name;private String password;private String headImg;private boolean gender;private String state;private String mobile;private String email;private Date birthday;private String memo;public static String USER_STATE_VALID = "1";//有效,public static String USER_STATE_INVALID = "0";//无效public User() {}public User(String id, String dept, String account, String name, String password, String headImg, boolean gender, String state, String mobile, String email, Date birthday, String memo) {this.id = id;this.dept = dept;this.account = account;this.name = name;this.password = password;this.headImg = headImg;this.gender = gender;this.state = state;this.mobile = mobile;this.email = email;this.birthday = birthday;this.memo = memo;}//各种setter和getter
}

User.hbm.xml

映射文件也非常简单,因为没有关联关系字段,直接写属性就行了。


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="zhongfucheng.user.entity.User" table="user"><id name="id" type="java.lang.String"><column name="id" length="32" /><generator class="uuid.hex" /></id><property name="name" type="java.lang.String"><column name="name" length="20" not-null="true" /></property><property name="dept" type="java.lang.String"><column name="dept" length="20" not-null="true" /></property>     <property name="account" type="java.lang.String"><column name="account" length="50" not-null="true" /></property><property name="password" type="java.lang.String"><column name="password" length="50" not-null="true" /></property><property name="headImg" type="java.lang.String"><column name="headImg" length="100" /></property><property name="gender" type="java.lang.Boolean"><column name="gender" /></property><property name="email" type="java.lang.String"><column name="email" length="50" /></property><property name="mobile" type="java.lang.String"><column name="mobile" length="20" /></property><property name="birthday" type="java.util.Date"><column name="birthday" length="10" /></property><property name="state" type="java.lang.String"><column name="state" length="1" /></property><property name="memo" type="java.lang.String"><column name="memo" length="200" /></property></class></hibernate-mapping>

写完映射文件,记得要在Spring的总配置文件中读取映射文件…值得注意的是,用户模块专门用一个user包来管理下面的代码,这样好管理!

这里写图片描述


编写Dao

UserDao接口


/*** UserDao接口,继承着UserDao* */
public interface UserDao extends BaseDao<User> {}

UserDaoImpl实现类

把UserDaoImple对象添加到IOC容器中管理

注意:因为我们在BaseDao中使用的是HibernateDaoSupport这个API,因此我们在UserDao中是需要在XML配置,注入SessionFactory的。

在总配置文件中是有专门注入SessionFactory的bean配置的

<!-- 所有业务dao的parent --><bean id="baseDao" abstract="true"><property name="sessionFactory" ref="sessionFactory"></property></bean>


/*** 继承着BaseDaoImpl实现类,就有了CRUD的方法* 又实现了UserDao接口,那么UserDao接口就可以对User模块有相对应的补充** */public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao {}
    <bean id="userDaoImpl" class="zhongfucheng.user.dao.impl.UserDaoImpl" parent="baseDao"></bean><context:component-scan base-package="zhongfucheng.user"/>
  • 把user模块的spring配置文件添加到总配置文件中
<!--这是user模块的配置文件--><import resource="classpath:zhongfucheng/user/config/user-bean.xml"/>

编写Service

Service接口

/*** Created by ozc on 2017/5/23.*/public interface UserService {//新增public void save(User user);//更新public void update(User user);//根据id删除Opublic void delete(Serializable id);//根据id查找public User findObjectById(Serializable id);//查找列表public List<User> findObjects();}

UserServiceImpl


package zhongfucheng.user.service.impl;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import zhongfucheng.user.dao.UserDao;
import zhongfucheng.user.entity.User;
import zhongfucheng.user.service.UserService;import java.io.Serializable;
import java.util.List;/*** Created by ozc on 2017/5/23.*/@Service
public class UserServiceImpl implements UserService {@Qualifier("userDaoImpl")@Autowiredprivate UserDao userDaoImpl;@Overridepublic void save(User user) {userDaoImpl.save(user);}@Overridepublic void update(User user) {userDaoImpl.update(user);}@Overridepublic void delete(Serializable id) {userDaoImpl.delete(id);}@Overridepublic User findObjectById(Serializable id) {return userDaoImpl.findObjectById(id);}@Overridepublic List<User> findObjects() {return userDaoImpl.findObjects();}
}

UserAction

UserAction应该根据增删改查应该有这么几个方法:


/*** 1.提供新增页面* 2.确定新增用户方法* 3.提供修改页面* 4.确定修改用户方法* 5.删除用户* 6.批量删除用户* 7.提供列表展示页面** */
package zhongfucheng.user.action;import com.opensymphony.xwork2.ActionSupport;/*** Created by ozc on 2017/5/23.*//*** 1.提供新增页面* 2.确定新增用户方法* 3.提供修改页面* 4.确定修改用户方法* 5.删除用户* 6.批量删除用户* 7.提供列表展示页面*** */
public class UserAction extends ActionSupport {public String listUI() {return null;}public String addUI() {return null;}public String editUI() {return null;}public String edit() {return null;}public String delete() {return null;}public String add() {return null;}public String deleteSelect() {return null;}}

在Struts配置文件中配置

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="user-action" extends="struts-default" namespace="/user"><action name="user_*" class="zhongfucheng.user.action.UserAction" method="{1}"></action></package></struts>
  • 添加user模块的Struts配置文件到总配置文件中
<!--User模块--><include file="zhongfucheng/user/config/user-struts.xml"/>

完成美工设计页面显示

对美工给的页面进行调整

导入到项目中:

这里写图片描述

我们发现在JSP页面中,以下的代码是经常会出现的,因此我们把它封装一下:

这里写图片描述

创建一个公共文件,封装经常用到的jsp页面:

这里写图片描述

要使用的地方,直接导入就行了:


<head><%@include file="/common/header.jsp"%><title>用户管理</title></head>

接下来只要对各个功能进行填充逻辑代码,就可以了。

添加用户UI

public String addUI() {return "addUI";}

效果如图所示:我们的头像和角色先不做,把其他的先做了再看看。

这里写图片描述

确定添加用户

写上我们请求的路径:

这里写图片描述

    /*************注入Service************************/@Qualifier("userServiceImpl")@Autowiredprivate UserService userServiceImpl;/************数据自动封装,给出setter和getter*************************/private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}/************得到Service返回的数据*************************/private List<User> userList;public String add() {userServiceImpl.save(user);//跳转到列表显示页面return "list";}
  • 配置跳转到列表显示页面的result【Action重定向的方式,防止刷新再次请求】
            <!--返回列表展示页面,重定向到列表展示--><result name="list" type="redirectAction"><param name="actionName">user_listUI</param></result>
  • 效果:下面的列表展示还没有做呢,但是添加用户的效果已经做出来了。

这里写图片描述


列表展示

    /************得到Service返回的数据*************************///这里一定要给setter和getter方法,这样JSP才能够得到属性。不然就得不到了!!!我在这里弄了很久!!!!private List<User> userList;public List<User> getUserList() {return userList;}public void setUserList(List<User> userList) {this.userList = userList;}public String listUI() {userList = userServiceImpl.findObjects();return "listUI";}

JSP通过iterator得到数据,直接写就行了。因为Action中该属性有getter方法

<s:iterator value="userList"><tr bgcolor="f8f8f8"><td align="center"><input type="checkbox" name="selectedRow" value="<s:property value="id"/> "/></td><td align="center"><s:property value="name"/></td><td align="center"><s:property value="account"/></td><td align="center"><s:property value="dept"/></td><td align="center"><s:property value="gender?'男':'女'"/></td><td align="center"><s:property value="email"/></td><td align="center"><a href="javascript:doEdit(<s:property value="id"/>)">编辑</a><a href="javascript:doDelete(<s:property value="id"/>)">删除</a></td></tr></s:iterator>

这里写图片描述


修改功能

这里写图片描述

    public String editUI() {//外边已经传了id过来了,我们要找到id对应的Userif (user.getId() != null && user != null) {//直接获取出来,后面JSP会根据User有getter就能读取对应的信息!user = userServiceImpl.findObjectById(this.user.getId());}return "editUI";}
  • JSP修改用户的界面是不用显示id的,但是我们在修改用户的时候,是根据id来修改的。因此我们加入一个隐藏域
<s:hidden name="user.id"/>
  • 指定处理的路径:

action="${basePath}user/user_edit.action"
  • 修改的方法:
    public String edit() {//Struts2会自动把JSP带过来的数据封装到User对象上if (user.getId() != null && user != null) {userServiceImpl.update(user);}//跳转回列表展示return "list";}
  • 效果:

这里写图片描述


删除功能

delete方法就非常简单了:

function doDelete(id) {document.forms[0].action = "${basePath}user/user_delete.action?user.id="+id;document.forms[0].submit();}
public String delete() {if (user.getId() != null && user != null) {userServiceImpl.delete(user.getId());}return "list";}

这里写图片描述


批量删除

这里写图片描述

响应点击事件:

        function doDeleteAll() {document.forms[0].action = "${basePath}user/user_deleteSelect.action";document.forms[0].submit();}
  • Action使用一个String[]接收复选框来过来的数据
private String[] selectedRow;public String[] getSelectedRow() {return selectedRow;}public void setSelectedRow(String[] selectedRow) {this.selectedRow = selectedRow;}public String deleteSelect() {for (String s : selectedRow) {userServiceImpl.delete(s);}return "list";}
  • 效果:

这里写图片描述


这篇关于纳税服务系统【用户模块之简单增删改查】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/359242

相关文章

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具