`
KimHo
  • 浏览: 73715 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

Spring3MVC+MyBatis+ExtJs3整合开发系列之三:人员管理模块

阅读更多
    hi,boys and girls,i come back again!

    承接上篇:Spring3MVC+MyBatis+ExtJs3整合开发系列之二:菜单模块,这次带来了Spring3MVC+MyBatis+ExtJs3整合开发系列之第三篇:人员管理模块。
   
    这次改动比较大,下面是模块结构图,总算把之前搭建的package都填满了:



界面预览

人员管理模块主界面:


新增/修改人员信息界面:


修改密码界面:


代码预览

persistence层
public interface UserMapper {
	Long getId();
	User login(Map<String,Object> param);
	User getUser(Map<String,Object> param);
	List<User> getUserList();
	void insertUser(User user);
	void insertUserRole(Map<String,Object> param);
	void updateUser(User user);
	void updateUserRole(Map<String,Object> param);
	void deleteUser(Map<String,Object> param);
	void deleteUserRole(Map<String,Object> param);
	void changeUserPassword(Map<String,Object> param);
}

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.kimho.user.persistence.UserMapper">

  <cache />
  
  <select id="getId" resultType="long">
  	SELECT max(id)+1 FROM t_user
  </select>
  
  <select id="login" parameterType="map" resultType="User">
    SELECT
    	id,
    	name,
   		password,
    	create_date
    FROM t_user
    WHERE name = #{name} AND password = #{password}
  </select>

  <select id="getUser" parameterType="map" resultType="User">
    SELECT
    	id,
    	name,
   		password,
    	create_date
    FROM t_user
    <where>
    	<if test="id != null">
    		id = #{id}
    	</if>
    	<if test="name != null">
    		AND name = #{name}
    	</if>
    	<if test="password != null">
    		AND password = #{password}
    	</if>
    </where>
  </select>
  
  <select id="getUserList" resultMap="userResult">
    SELECT
    	u.id as user_id,
    	u.name as user_name,
   		u.password,
    	u.create_date,
    	r.id as role_id,
    	r.name as role_name,
    	r.description
    FROM t_user u
    LEFT JOIN t_user_role ur ON(u.id=ur.user_id)
    LEFT JOIN t_role r ON(r.id=ur.role_id)
  </select>
  
  <resultMap id="userResult"  type="User"> 
		<id property="id"  column="user_id" />
		<result property="name" column="user_name"/>
		<result property="createDate" column="create_date"/>
		<collection property="roles"  ofType="Role"> 
			<id property="id"  column="role_id"/> 
			<result property="name"  column="role_name"/>
		</collection> 
  </resultMap>
  
  <insert id="insertUser" parameterType="User" >
  	INSERT INTO t_user (id,name, password, create_date)
    VALUES (#{id},#{name}, #{password}, #{createDate,jdbcType=TIMESTAMP})
  </insert>
  
  <insert id="insertUserRole" parameterType="map">
  	INSERT INTO t_user_role (user_id,role_id)
    VALUES (#{user_id}, #{role_id})
  </insert>
  
  <update id="updateUser"  parameterType="User"> 
	UPDATE t_user
	<set> 
		<if test="name != null">name=#{name},</if> 
		<if test="password != null">password=#{password}</if>
	</set>
	WHERE id=#{id} 
  </update>
  
  <update id="updateUserRole"  parameterType="map"> 
	UPDATE t_user_role SET
	role_id=#{role_id}
	WHERE user_id=#{user_id}
  </update>
  
  <delete id="deleteUser"  parameterType="map">
  	DELETE FROM t_user WHERE id=#{id}
  </delete>
  
  <delete id="deleteUserRole"  parameterType="map">
  	DELETE FROM t_user_role WHERE user_id=#{user_id}
  </delete>
  
  <update id="changeUserPassword"  parameterType="map"> 
	UPDATE t_user SET password=#{newPassword} WHERE id=#{id}
  </update>
  
</mapper>

    这里特别说明下xml配置中的"<cache />"缓存配置项,如果开启了缓存(这里就开启了),需要注意数据的刷新问题;我之前的菜单模块,就开启了缓存机制,导致角色变更后,菜单权限没相应变化,这就是缓存导致的。

service层
@Service
public class UserService {
	@Autowired
	private UserMapper userMapper;
	/**
	 * 获取主键id
	 * @return
	 */
	public Long getId() {
		return userMapper.getId();
	}
	/**
	 * 登录验证
	 * @param param
	 * @return
	 */
	public User login(Map<String,Object> param) {
		return userMapper.login(param);
	}
	/**
	 * 获取某个用户
	 * @param param
	 * @return
	 */
	public User getUser(Map<String,Object> param) {
		return userMapper.getUser(param);
	}
	/**
	 * 获取用户列表
	 * @return
	 */
	public List<User> getUserList() {
		return userMapper.getUserList();
	}
	/**
	 * 新增用户
	 * @param user
	 * @param param
	 */
	@Transactional
	public void insertUser(User user,Map<String,Object> param) {
		//新增用户
		userMapper.insertUser(user);
		String roleList = (String)param.get("roleList");
		if(!"".equals(roleList)) {
			//新增用户角色关联
			insertUserRole(param);
		}
	}
	/**
	 * 编辑用户
	 * @param user
	 * @param param
	 */
	@Transactional
	public void updateUser(User user,Map<String,Object> param) {
		//编辑用户
		userMapper.updateUser(user);
		//删除原有的用户角色关联
		userMapper.deleteUserRole(param);
		//新增用户角色关联
		insertUserRole(param);
	}
	/**
	 * 删除用户
	 * @param param
	 */
	@Transactional
	public void deleteUser(Map<String,Object> param) {
		String ids = (String)param.get("ids");
		String[] idsArray = ids.split(",");
		for(int i=0;i<idsArray.length;i++) {
			param.put("id", idsArray[i]);
			param.put("user_id", idsArray[i]);
			userMapper.deleteUser(param);
			userMapper.deleteUserRole(param);
		}
	}
	/**
	 * 用户角色关联
	 * @param param
	 */
	private void insertUserRole(Map<String,Object> param) {
		String roleList = (String)param.get("roleList");
		String[] roleArray = roleList.split(",");
		for(int i=0;i<roleArray.length;i++) {
			param.put("role_id", roleArray[i]);
			userMapper.insertUserRole(param);
		}
	}
	/**
	 * 修改密码
	 * @param param
	 */
	public void changeUserPassword(Map<String,Object> param) {
		userMapper.changeUserPassword(param);
	}
}


controller层
@Controller
@RequestMapping("/user")
public class UserController {
	@Autowired
	private UserService userService;
	@Autowired
	private MenuService menuService;
	/**
	 * 登录验证
	 * @param request
	 * @param response
	 * @param user
	 * @return
	 */
	@RequestMapping(value="/login",method=RequestMethod.POST)
	public @ResponseBody Map<String,String> loginCheck(HttpServletRequest request,   
            HttpServletResponse response){
		//spring会利用jackson自动将返回值封装成JSON对象
		Map<String,String> responseMap = new HashMap<String,String>();
		String captcha = request.getParameter("captcha");
		String name = request.getParameter("name");
		String password = request.getParameter("password");
		String vcode = (String)request.getSession().getAttribute("vcode");
		if(vcode==null || !captcha.equals(vcode)) {
			responseMap.put("success", "false");
			responseMap.put("info", "验证码错误!");
			return responseMap;
		}
		try {
			Map<String,Object> param = new HashMap<String,Object>();
			param.put("name", name);
			param.put("password", password);
			User user = userService.login(param);
			if(user!=null) {
				responseMap.put("success", "true");
				responseMap.put("info", "登录成功!");
				request.getSession().setAttribute("user", user); 
				request.getSession().setAttribute("loginUserName", user.getName()); 
				return responseMap;
			}else {
				responseMap.put("success", "false");
				responseMap.put("info", "用户名或密码错误!");
				return responseMap;
			}
		}catch(Exception e) {
			e.printStackTrace();
			responseMap.put("info", e.getClass()+":"+e.getMessage());
			return responseMap;
		}
	}
	
	/**
	 * 获取所有菜单
	 * @param request
	 * @param response
	 * @return
	 */
	@RequestMapping(value="/menus",method=RequestMethod.POST)
	public @ResponseBody Map<String,Object> getMenus(HttpServletRequest request,   
            HttpServletResponse response){
		Map<String,Object> responseMap = new HashMap<String,Object>();
		User user = (User)request.getSession().getAttribute("user");
		List<Menu> list = menuService.getMenuListByUserId(user.getId());
		responseMap.put("success", "true");
		responseMap.put("data", list);
		return responseMap;
	}
	
	/**
	 * 获取用户列表
	 * @param request
	 * @param response
	 * @return
	 */
	@RequestMapping(value="/users",method=RequestMethod.POST)
	public @ResponseBody Map<String,Object> getUsers(HttpServletRequest request,   
            HttpServletResponse response){
		Map<String,Object> responseMap = new HashMap<String,Object>();
		List<User> userList = userService.getUserList();
		responseMap.put("totalCount", userList.size());
		responseMap.put("rows", userList);
		return responseMap;
	}
	
	/**
	 * 保存用户信息(新增用户or编辑用户)
	 * @param request
	 * @param response
	 * @param user
	 * @return
	 */
	@RequestMapping(value="/save",method=RequestMethod.POST)
	public @ResponseBody Map<String,Object> saveOrUpdate(HttpServletRequest request,   
            HttpServletResponse response){
		Map<String,Object> responseMap = new HashMap<String,Object>();
		String id = request.getParameter("id");
		String name = request.getParameter("name");
		String password = request.getParameter("password");
		String roleList = request.getParameter("roleList");
		try {
			//编辑用户信息
			if(!"".equals(id)) {
				Map<String,Object> param = new HashMap<String,Object>();
				param.put("id", id);
				User user = userService.getUser(param);
				user.setName(name);
				//表示修改了密码
				if(!"".equals(password)) {
					user.setPassword(password);
				}
				param.put("user_id", id);
				param.put("roleList", roleList);
				userService.updateUser(user, param);
				responseMap.put("success", "true");
				responseMap.put("info", "编辑成功!");
			}
			//新增用户信息
			else {
				User user = new User();
				Long newId = userService.getId();
				user.setId(newId);
				user.setCreateDate(new Date());
				user.setName(name);
				user.setPassword(password);
				Map<String,Object> param = new HashMap<String,Object>();
				param.put("user_id", newId);
				param.put("roleList", roleList);
				userService.insertUser(user, param);
				responseMap.put("method", "Create");
				responseMap.put("success", "true");
				responseMap.put("info", "新增成功!");
			}
			return responseMap;
		}catch(Exception e) {
			e.printStackTrace();
			responseMap.put("info", e.getClass()+":"+e.getMessage());
			return responseMap;
		}
	}
	/**
	 * 删除用户
	 * @param request
	 * @param response
	 * @return
	 */
	@RequestMapping(value="/remove",method=RequestMethod.POST)
	public @ResponseBody Map<String,Object> remove(HttpServletRequest request,   
            HttpServletResponse response){
		Map<String,Object> responseMap = new HashMap<String,Object>();
		String ids = request.getParameter("ids");
		Map<String,Object> param = new HashMap<String,Object>();
		param.put("ids", ids);
		try {
			userService.deleteUser(param);
			responseMap.put("success", "true");
			responseMap.put("info", "删除成功!");
			return responseMap;
		}catch(Exception e) {
			e.printStackTrace();
			responseMap.put("info", e.getClass()+":"+e.getMessage());
			return responseMap;
		}
	}
	/**
	 * 修改密码
	 * @param request
	 * @param response
	 * @return
	 */
	@RequestMapping(value="/changePassword",method=RequestMethod.POST)
	public @ResponseBody Map<String,Object> changePassword(HttpServletRequest request,   
            HttpServletResponse response){
		Map<String,Object> responseMap = new HashMap<String,Object>();
		String oldPassword = request.getParameter("oldPassword");
		String newPassword = request.getParameter("newPassword");
		User user =(User)request.getSession().getAttribute("user");
		try {
			//验证通过,允许修改密码
			if(oldPassword.equals(user.getPassword())) {
				Map<String,Object> param = new HashMap<String,Object>();
				param.put("id", user.getId());
				param.put("newPassword", newPassword);
				userService.changeUserPassword(param);
				user.setPassword(newPassword);
				//更新session中的user密码信息
				request.getSession().setAttribute("user", user);
				responseMap.put("success", "true");
				responseMap.put("info", "修改密码成功!");
			}else {
				responseMap.put("success", "false");
				responseMap.put("info", "原密码错误!");
			}
			return responseMap;
		}catch(Exception e) {
			e.printStackTrace();
			responseMap.put("info", e.getClass()+":"+e.getMessage());
			return responseMap;
		}
	}
}

   好了,一个完整的人员管理模块就完成了,测试下模块功能吧。
   ……

   到了这里,是不是发现少了点什么?
   没错,还缺少角色菜单管理,那么继续下篇预告吧:Spring3MVC+MyBatis+ExtJs3整合开发系列之四:角色管理模块。

源码地址:http://code.google.com/p/kika/
  • 大小: 42.8 KB
  • 大小: 22.6 KB
  • 大小: 25.7 KB
  • 大小: 15.5 KB
  • 大小: 46.1 KB
分享到:
评论
6 楼 limin754976937 2016-05-05  
Servlet.service() for servlet [appServlet] in context with path [/MyExtjs2]
threw exception [Request processing failed; nested exception is java.lang.NullPo
interException] with root cause
弹出 系统请求错误的 框
5 楼 zccmp 2012-01-13  
你好,现在正在学习springmvc这方面的知识,觉得你的这个例子特别的好,想学习一下,不知道该在哪里下载该实例源码?另外,想问一下:你说该实例源码及数据库文件都包在Spring3MvcMyBatisExtjs3.rar这个压缩包,但是,我不知道这个压缩包在哪里下载?你能否告诉我呢?或者把这发给我呢?我的邮箱为:zccmp@126.com
麻烦你了,非常感谢!谢谢!!!!
4 楼 KimHo 2011-09-23  
macrotea 写道
  <select id="getId" resultType="long"> 
    SELECT max(id)+1 FROM t_user 
  </select> 

不应该这么干,应该 select last_insert_id()

多谢你的建议
3 楼 macrotea 2011-09-23  
  <select id="getId" resultType="long"> 
    SELECT max(id)+1 FROM t_user 
  </select> 

不应该这么干,应该 select last_insert_id()
2 楼 KimHo 2011-08-11  
mjjs04 写道
最近也和楼主不差不多在搭建一个SpringMVC+iBATIS+Shiro的基础框架,刚折腾完Shiro的权限管理这一块,发现shiro资料特别少。楼主有考虑要使用什么安全框架吗?

Ralasafe可以考虑下,一款国内的开源权限框架
1 楼 mjjs04 2011-08-11  
最近也和楼主不差不多在搭建一个SpringMVC+iBATIS+Shiro的基础框架,刚折腾完Shiro的权限管理这一块,发现shiro资料特别少。楼主有考虑要使用什么安全框架吗?

相关推荐

    Spring3MVC+MyBatis+ExtJs3整合开发系列之四:角色管理模块

    在本篇博文中,我们将深入探讨“Spring3MVC+MyBatis+ExtJs3整合开发系列之四:角色管理模块”。这个主题涉及到三个关键的技术栈:Spring MVC作为后端MVC框架,MyBatis作为持久层解决方案,以及Ext Js 3作为前端UI库...

    spring+mvc+mybatis+extjs整合

    【标题】"spring+mvc+mybatis+extjs整合"是一个经典的Java Web开发框架组合,广泛应用于企业级应用。这个项目结合了Spring MVC作为控制层,MyBatis作为数据访问层,以及ExtJS作为前端展示层,构建了一个完整的三层...

    Spring3MVC + MyBatis + ExtJs3整合开发系列

    Spring3MVC、MyBatis和ExtJs3的整合开发旨在创建一个高效的、灵活的Web应用程序。整合的关键在于如何协调这些框架的工作,使得Spring3MVC处理HTTP请求和控制流程,MyBatis负责数据访问和SQL执行,而ExtJs3则作为前端...

    Spring MVC+Mybatis整合实现用户登录以及增删改查功能

    在本项目中,我们主要探讨的是如何将Spring MVC与Mybatis框架进行整合,以实现一个完整的用户管理系统,包括用户登录和基本的CRUD(创建、读取、更新、删除)操作。Spring MVC作为Spring框架的一部分,是用于构建Web...

    activiti+spring mvc+maven+extjs mvc+mybatis一个简单的请假工作流

    标题中的“activiti+spring mvc+maven+extjs mvc+mybatis”是一个集成的IT解决方案,用于构建一个简单的请假工作流程应用。这个项目利用了多种技术来创建一个前端和后端无缝协作的系统。 1. **Activiti**:Activiti...

    SpringMvc+MyBatis+ehcache+ExtJs分页

    Spring MVC、MyBatis、Ehcache和ExtJS这四个技术组件都是开发者们在构建此类应用时常常使用的工具。让我们详细了解一下这些技术以及它们如何协同工作。 首先,Spring MVC是Spring框架的一个模块,专门用于构建Web...

    spring mvc3 mybatis3 extjs 3.4权限管理系统

    本人初步采用spring mvc3 mybatis3 extjs 3.4开发进销存软件,有很好的参考价值,其中数据库采用oracle,分页采用调用oracle的存储过程,有很好的学习价值,若是想开发简单的CRM和进销存系统是极品参考的系统。...

    freemarke+springmvc+mybatis+spring shiro,extjs

    【标题】"freemarke+springmvc+mybatis+spring shiro,extjs" 描述了一种基于Java技术栈的Web应用开发架构,其中包括了多个核心组件,这些组件共同构建了一个功能强大的企业级应用程序。 1. **FreeMarker**:...

    Spring、Spring mvc、Mybatis、ExtJs实战开发技术

    整理了一下Spring、Spring mvc、Mybatis、ExtJs实战开发技术的内容,作为进阶提示

    JavaWeb+mybatis+Extjs+spring mvc信息管理系统

    JavaWeb+Extjs+springMvc+mybatis做的信息管理系统,主要是用Extjs实现前台,其中包括了树形结构和基本的表单和列表等,springMVC框架,数据库操作层使用的是mybatis,其中的数据库表结构可以根据其中的mapper.xml...

    java spring mvc mybatis(ssm) 整合ExtJS

    eclipse 开发的作品,整合spring mvc mybatis ExtJS6,实现漂亮的管理后台; 主要技术说明:完善了CURD的功能;健全的权限管理;缓存工厂的使用,默认使用EHCACHE;后台模板切换;程序启动自动加载平台参数;完善了...

    SpringMVC+Mybatis+ExtJs5.0

    【SpringMVC+Mybatis+ExtJs5.0】是一个典型的Java Web开发框架组合,用于构建高效、可扩展的企业级后台管理系统。这个框架的核心在于SpringMVC作为控制器,Mybatis作为数据访问层,以及ExtJs5.0作为前端UI框架。 1....

    spring3+ibaits3+struts2.18+Extjs3整合增删查改

    "Spring3+iBatis3+Struts2.18+ExtJS3整合增删查改"是一个典型的Java Web开发组合,用于实现高效的数据管理和用户界面交互。下面我们将深入探讨这个组合中的每个组件及其在整体架构中的作用。 **Spring3**: Spring...

    Extjs+Mysql+SpringMVC+MyBatis通用后台管理系统

    《基于Extjs+Mysql+SpringMVC+MyBatis的通用后台管理系统详解》 在当前信息化社会中,后台管理系统是企业管理与运营的核心工具之一。本文将深入探讨一个使用Extjs作为前端框架,Mysql作为数据库,SpringMVC作为控制...

    spring mvc mybatis extjs 3.4 权限管理

    ### Spring MVC MyBatis ExtJS 3.4 权限管理系统关键知识点解析 #### 一、项目背景与架构概述 本系统采用Spring MVC框架作为控制层,MyBatis作为持久层框架,ExtJS 3.4作为前端界面展示工具,实现了权限管理功能,...

    SpringMVC+Mybatis整合ExtJs5.0

    这里我们将深入探讨如何将这些技术进行整合,以创建一个基于SpringMVC注解和MyBatis的数据层的后台管理框架,并结合ExtJS5.0构建用户管理界面。 首先,SpringMVC是Spring框架的一部分,它提供了一个模型-视图-控制...

    springmvc+mybatis+Extjs权限

    本项目采用的是SpringMVC、MyBatis以及ExtJS这三大核心技术,构建了一个集成了权限管理的高效系统。以下将详细阐述这三个技术及其在权限管理中的应用。 **SpringMVC** SpringMVC是Spring框架的一部分,专门用于构建...

    Extjs+SpringMVC+MyBaits财务管控系统

    《基于Extjs、SpringMVC和MyBatis的财务管控系统构建详解》 在现代企业信息化建设中,财务管控系统的构建至关重要,它能够帮助企业高效管理财务数据,提高运营效率,确保财务安全。本文将深入探讨如何利用Extjs、...

    extjs+springmvc+dubbo+mybatis+oracle

    标题 "extjs+springmvc+dubbo+mybatis+oracle" 描述了一个综合性的企业级Web应用架构,结合了前端、后端服务以及数据库技术。这个架构由以下几部分组成: 1. **ExtJS**:这是一个JavaScript库,用于构建富客户端...

    Extjs5.0从入门到实战开发信息管理系统(Extjs基础、Extjs5新特性、Spring、Spring mvc)

    Extjs5.0从入门到实战开发信息管理系统(Extjs基础、Extjs5新特性、Spring、Spring mvc、Mybatis),完整版,提供课件和代码下载! 本教程从Extjs5的开发环境搭建开始,讲解了Extjs5的项目结构(包括核心文件的作用...

Global site tag (gtag.js) - Google Analytics