ztree使用系列三(ztree与springmvc+spring+mybatis整合实现增删改查)

本文主要是介绍ztree使用系列三(ztree与springmvc+spring+mybatis整合实现增删改查),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       在springmvc+spring+mybatis里整合ztree实现增删改查,上一篇已经写了demo,下面就只贴出各层实现功能的代码:

Jsp页面实现功能的js代码如下:

<script>//用于捕获分类编辑按钮的 click 事件,并且根据返回值确定是否允许进入名称编辑状态function beforeEditName(treeId, treeNode) {var zTree = $.fn.zTree.getZTreeObj("treeDemo");zTree.selectNode(treeNode);return true;}//移除分类前执行function beforeRemove(treeId, treeNode) {var zTree = $.fn.zTree.getZTreeObj("treeDemo");zTree.selectNode(treeNode);var confirmFlag = confirm("确认删除分类[ " + treeNode.name + " ]吗?" )var confirmVal = false;if(confirmFlag){var data = {id:treeNode.id};$.ajax({async: false,type: "post",data:data,url: "<%=request.getContextPath() %>/library/deleteLibrary/ ",success: function(json){if(json == "success" ){confirmVal = true;} else{alert('亲,删除失败!');}},error: function(){alert('亲,删除失败!');}});}return confirmVal;}//执行删除操作后提示function onRemove(e, treeId, treeNode) {alert('亲,删除成功!');}//用于捕获分类编辑名称结束(Input 失去焦点 或 按下 Enter 键)之后,更新分类名称数据之前的事件回调函数function beforeRename(treeId, treeNode, newName) {if (newName.length == 0 || newName.indexOf("请输入名称")>=0) {alert('亲,请输入分类名称!');var zTree = $.fn.zTree.getZTreeObj("treeDemo");setTimeout( function(){zTree.editName(treeNode)}, 10);return false;}if(newName.length > 15){alert('亲,分类名称过长!');var zTree = $.fn.zTree.getZTreeObj("treeDemo");setTimeout( function(){zTree.editName(treeNode)}, 10);return false;}native_name = treeNode.name;return true;}//执行编辑操作function onRename(e, treeId, treeNode) {if(native_name == treeNode.name){return;}var data = {id:treeNode.id,level_id:treeNode.level,pid:treeNode.pId,name:treeNode.name};$.ajax({async: false,type: "post",data:data,url: "<%=request.getContextPath() %>/library/updateLibraryName/ ",success : function(json){if(json == "success" ){alert('操作成功!');} else{alert('亲,操作失败,请稍后再试!');}},error : function()    {alert('亲,网络有点不给力呀!');}});}//添加子分类function addHoverDom(treeId, treeNode) {var sObj = $("#" + treeNode.tId + "_span");if (treeNode.editNameFlag || $("#addBtn_" +treeNode.tId).length>0 || treeNode.level == 3) return;var addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='添加分类' οnfοcus='this.blur();'></span>";sObj.after(addStr);var btn = $("#addBtn_" +treeNode.tId);if (btn) btn.bind("click" , function(){var zTree = $.fn.zTree.getZTreeObj("treeDemo");var treeNodes;$.ajax({async: false,type: "post",url: "<%=request.getContextPath() %>/library/saveLibrary/ ",success : function(libraryId){if(libraryId != "" ){treeNodes = zTree.addNodes(treeNode, {id:(libraryId), pId:treeNode.id, name:"请输入名称" });}if (treeNodes) {zTree.editName(treeNodes[0]);}},error : function(){alert('亲,网络有点不给力呀!');}});return false;});}//父级分类去除删除功能function setRemoveBtn(treeId, treeNode) {return !treeNode.isParent;}//鼠标移开按钮消失function removeHoverDom(treeId, treeNode) {$( "#addBtn_"+treeNode.tId).unbind().remove();};//添加按钮点击事件function addClick(){$( "#addParent").bind("click" , {isParent:true}, add);}//移除分类function remove(e) {var zTree = $.fn.zTree.getZTreeObj("treeDemo"),nodes = zTree.getSelectedNodes(),treeNode = nodes[0];if (nodes.length == 0) {alert( "亲,请先选择一个分类!" );return;}var callbackFlag = $("#callbackTrigger" ).attr("checked");zTree.removeNode(treeNode, callbackFlag);};//展开全部分类function expandAllFlag(){zTree_Menu.expandAll( true);}//合并全部分类function combineAllFlag(){zTree_Menu.expandAll( false);}//加载ztreefunction onloadZTree(){var ztreeNodes;$.ajax( {async : true, //是否异步cache : false, //是否使用缓存type : 'post', //请求方式,postdataType : "json", //数据传输格式url : "<%=request.getContextPath() %>/library/findAllLibrary/ ", //请求链接error : function() {alert('亲,网络有点不给力呀!');},success : function(data) {ztreeNodes = eval( "["+data+"]" ); //将string类型转换成json对象$.fn.zTree.init($( "#treeDemo"), setting, ztreeNodes);zTree_Menu = $.fn.zTree.getZTreeObj("treeDemo" );$( "#selectAll").bind("click" , selectAll);expandAllFlag();addClick();}});}//初始化操作$(document).ready( function(){onloadZTree();});
</script>

备注:后台传过来的json数据一定执行这个操作:eval( "["+data+"]" ) 将string转换为对象

Controller层代码如下:

import java.util.List;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
@RequestMapping(value="library/")
public class LibraryController {@Autowiredpublic LibraryService libraryService;/*** 跳转到分类页面* @return*/@RequestMapping(value="toListLibrary/")public String toListLibrary(){return "library/listLibrary";}/*** 查询所有分类信息* @return*/@RequestMapping(value="findAllLibrary/")@ResponseBodypublic List<Object> findAllLibrary(HttpServletRequest request, HttpServletResponse response){return libraryService.findAllLibrary();}/*** 保存分类* @return*/@RequestMapping(value="saveLibrary/")@ResponseBodypublic String saveLibrary(HttpServletRequest request, HttpServletResponse response){String libraryId = UUIDUtil.randomUUID();return libraryId;}/*** 更新分类名称* @return*/@RequestMapping(value="updateLibraryName/")@ResponseBodypublic String updateLibraryName(HttpServletRequest request, HttpServletResponse response, Library library) {String createname=(String) request.getSession().getAttribute(Constants.CURRENT_USER_NAME);library.setCreate_user(createname);library.setUpdate_user(createname);return libraryService.addOrUpdateLibrary(library);}/*** 删除分类* @return*/@RequestMapping(value="deleteLibrary/")@ResponseBodypublic String deleteLibrary(HttpServletRequest request, HttpServletResponse response,@RequestParam(value = "id") String id) {return libraryService.deleteLibrary(id);}
}

service层代码如下:

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class LibraryService {protected final static Log log = LogFactory.getLog(LibraryService.class);@Autowiredprivate LibraryMapper libraryMapper;/*** 查询所有分类信息* @return*/public List<Object> findAllLibrary(){List<Object> listZTree = new ArrayList<Object>();List<Library> listLibrary  = libraryMapper.findAllLibrary();String str = "";for (int i = 0; i < listLibrary.size(); i++) {Library  library = listLibrary.get(i);//分类信息str = "{id:'" +library.getId() + "', pId:'"+library.getPid()+"', name:\""+library.getName()+"\" }";//封装ztree需要格式的字符串log.info(str);listZTree.add(str);}return listZTree;}/*** 保存或更新分类信息* @param library* @return*/public String addOrUpdateLibrary(Library library){int numFlag = 0;//根据id查询分类信息if (StringUtils.isBlank(library.getId())) {return "error";}int num = libraryMapper.findLibraryById(library.getId());if (num >0) {//更新信息library.setUpdate_time(new Date());library.setCreate_user(null);library.setPid(null);numFlag = libraryMapper.updateByPrimaryKeySelective(library);}else{//插入信息if(library.getPid().equals("null")){library.setPid("0");}int orderId = libraryMapper.findLastLibrary(library);orderId++;library.setCreate_time(new Date());library.setUpdate_time(new Date());library.setOrder_id(orderId);numFlag = libraryMapper.insert(library);}return  "success";}/*** 删除分类* @param id* @return*/public String deleteLibrary(String id){int num = libraryMapper.deleteByPrimaryKey(id);return  "success";}}
备注:执行完数据操作需要判断返回值,这里我直接返回success活error了。

Mapper层代码如下

import java.util.List;
import java.util.Map;public interface LibraryMapper extends BaseMapper<Library,String>{/*** 查询所有分类信息* @return*/public List<Library> findAllLibrary();/*** 根据id查询条数* @param id* @return*/public int findLibraryById(String id);/*** 查询最大排序号* @return*/public int findLastLibrary(Library library);}
备注:BaseMapper里有几个公用的增删改查的方法,Library是数据库表对应的实体,都很简单,避免代码过多这里就省略了

<?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= "LibraryMapper" >< resultMap id= "BaseResultMap" type= "Library" ><id column ="id" property="id" jdbcType= "VARCHAR" /><result column ="pid" property="pid" jdbcType= "VARCHAR" /><result column ="name" property="name" jdbcType= "VARCHAR" /><result column ="create_time" property="create_time" jdbcType= "TIMESTAMP" /><result column ="update_time" property="update_time" jdbcType= "TIMESTAMP" /><result column ="is_delete" property="is_delete" jdbcType= "INTEGER" /><result column ="update_user" property="update_user" jdbcType= "VARCHAR" /><result column ="create_user" property="create_user" jdbcType= "VARCHAR" /><result column ="level_id" property="level_id" jdbcType= "INTEGER" /><result column ="order_id" property="order_id" jdbcType= "INTEGER" /></ resultMap>< sql id= "Base_Column_List" >id, pid , name, create_time, update_time, is_delete, update_user, create_user, level_id,order_id</ sql><!-- 根据id查询分类信息是否存在 -->< select id= "findLibraryById" parameterType ="java.lang.String" resultType= "java.lang.Integer" >select count(*) from onair_vms_librarywhere is_delete=1 and id = #{id,jdbcType=VARCHAR}</ select><!-- 根据 pid查询最大排序号 -->< select id= "findLastLibrary" resultType ="java.lang.Integer" parameterType="Library" >SELECT MAX(order_id) as order_id  FROM onair_vms_librarywhere pid = #{pid,jdbcType=VARCHAR}</ select><!-- 查询所有分类信息 -->< select id= "findAllLibrary" resultMap ="BaseResultMap">select<include refid ="Base_Column_List"/>from onair_vms_librarywhere is_delete = 1 order by order_id</ select>< select id= "selectByPrimaryKey" resultMap ="BaseResultMap" parameterType="java.lang.String" >select<include refid ="Base_Column_List" />from onair_vms_librarywhere id = #{id,jdbcType=VARCHAR}</ select>< delete id= "deleteByPrimaryKey" parameterType="java.lang.String" >update  onair_vms_library set is_delete = 0where id = #{id,jdbcType=VARCHAR}</ delete>< insert id= "insert" parameterType="Library" >insert into onair_vms_library (id, pid, name,create_time, update_time, is_delete,update_user, create_user, level_id,order_id)values (#{id,jdbcType=VARCHAR}, #{pid,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR},#{create_time,jdbcType=TIMESTAMP}, #{update_time,jdbcType=TIMESTAMP}, #{is_delete,jdbcType=INTEGER},#{update_user,jdbcType=VARCHAR}, #{create_user,jdbcType=VARCHAR}, #{level_id,jdbcType=INTEGER},#{order_id,jdbcType=INTEGER})</ insert>< update id= "updateByPrimaryKey" parameterType="Library" >update onair_vms_libraryset pid = #{pid,jdbcType=VARCHAR},name = #{name,jdbcType=VARCHAR},create_time = #{create_time,jdbcType=TIMESTAMP},update_time = #{update_time,jdbcType=TIMESTAMP},is_delete = #{is_delete,jdbcType=INTEGER},update_user = #{update_user,jdbcType=VARCHAR},create_user = #{create_user,jdbcType=VARCHAR},level_id = #{level_id,jdbcType=INTEGER},order_id = #{order_id,jdbcType=INTEGER}where id = #{id,jdbcType=VARCHAR}</ update>
</mapper>
备注:mapper对应的xml

与jsp对应的VO层代码如下:

public class LibraryVo {/*  id      */private String id;/*  目标id  */private String targetId;/*  pid     */private String pId;/*  目标pid      */private String targetPId;/*  "inner":成为子节点,"prev":成为同级前一个节点,"next":成为同级后一个节点  */private String moveType;public String getId() {return id;}public void setId(String id) {this. id = id;}public String getTargetId() {return targetId;}public void setTargetId(String targetId) {this. targetId = targetId;}public String getpId() {return pId;}public void setpId(String pId) {this. pId = pId;}public String getTargetPId() {return targetPId;}public void setTargetPId(String targetPId) {this. targetPId = targetPId;}public String getMoveType() {return moveType;}public void setMoveType(String moveType) {this. moveType = moveType;}}


上面的代码实现了基本的增删改查,有哪些地方有问题欢迎指正,也欢迎交流,每一次的进步都离不开大家的帮助。

这篇关于ztree使用系列三(ztree与springmvc+spring+mybatis整合实现增删改查)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Java 实用工具类Spring 的 AnnotationUtils详解

《Java实用工具类Spring的AnnotationUtils详解》Spring框架提供了一个强大的注解工具类org.springframework.core.annotation.Annot... 目录前言一、AnnotationUtils 的常用方法二、常见应用场景三、与 JDK 原生注解 API 的

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推