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='添加分类' onfocus='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);
     }

      //加载ztree
     function onloadZTree(){
            var ztreeNodes;
           $.ajax( {
                async : true, //是否异步
                cache : false, //是否使用缓存
                type : 'post', //请求方式,post
                dataType : "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 {

     @Autowired
     public LibraryService libraryService;

     /**
     * 跳转到分类页面
     * @return
     */
     @RequestMapping(value="toListLibrary/")
     public String toListLibrary(){
          return "library/listLibrary";
     }

     /**
     * 查询所有分类信息
     * @return
     */
     @RequestMapping(value="findAllLibrary/")
     @ResponseBody
     public List<Object> findAllLibrary(HttpServletRequest request, HttpServletResponse response){
          return libraryService.findAllLibrary();
     }

     /**
     * 保存分类
     * @return
     */
     @RequestMapping(value="saveLibrary/")
     @ResponseBody
     public String saveLibrary(HttpServletRequest request, HttpServletResponse response){
          String libraryId = UUIDUtil.randomUUID();
          return libraryId;
     }

     /**
     * 更新分类名称
     * @return
     */
     @RequestMapping(value="updateLibraryName/")
     @ResponseBody
     public 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/")
     @ResponseBody
     public 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);

     @Autowired
     private 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_library
     where 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_library
     where pid = #{pid,jdbcType=VARCHAR}
  </ select>
  <!-- 查询所有分类信息 -->
  < select id= "findAllLibrary" resultMap ="BaseResultMap">
     select
     <include refid ="Base_Column_List"/>
     from onair_vms_library
     where 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_library
    where id = #{id,jdbcType=VARCHAR}
  </ select>
  < delete id= "deleteByPrimaryKey" parameterType="java.lang.String" >
    update  onair_vms_library set is_delete = 0
    where 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_library
    set 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整合实现增删改查),布布扣,bubuko.com

时间: 2024-12-26 21:03:46

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

SpringMVC+Mybatis整合的增删改查

本文基于 SPRING注解.本文使用Oracle数据库. 项目文件下载地址:http://download.csdn.net/detail/u010634066/8188965 项目总图:        现在lib中导入所有所需jar包:这里就不叙述了 一:在SRC下创建一个Bean包:在bean下面添加实体类,实体类对应于数据表,其属性与数据表相同或多于数据表. /** * */ package com.szz.bean; import com.szz.base.bean.BaseObject

SpringMVC+Spring+Mybatis整合,使用druid连接池,声明式事务,maven配置

一直对springmvc和mybatis挺怀念的,最近想自己再搭建下框架,然后写点什么. 暂时没有整合缓存,druid也没有做ip地址的过滤.Spring的AOP简单配置了下,也还没具体弄,不知道能不能用,log也不知道能不能用,`(*∩_∩*)′哈哈,有点不负责任...... 直接上代码: 使用的eclipse和eclipse自带的maven,参考了网上的资料,有些代码是拷贝的,不过都自己测试过了.嗯,可以跑起来... 先上项目结构: 新建maven项目,选择web,然后配置pom: <pro

SSM(springmvc+spring+mybatis)整合过程

问题?SSM(springmvc+spring+mybatis)整合过程 一.SSM框架比较S2SH框架的优缺点比较 站在个人使用这两个框架的观点儿上来说的话,我觉得这个不能定死的说,常用的S2SH,SpringMVC等,还可以考虑jFinal. 首先说S2SH,这个是用的比较多的,特别是在中小型项目中,针对大型项目就不行了,是Struts和hibernate过于庞大,过于重量级,项目大了之后配置文件多的也是麻烦事,配置文件多了之后一方面不好操作,另外比较蛋疼的是没法断点调试,特别是对底层数据库

JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(三):两个Viewmodel搞定增删改查

前言:之前博主分享过knockoutJS和BootstrapTable的一些基础用法,都是写基础应用,根本谈不上封装,仅仅是避免了html控件的取值和赋值,远远没有将MVVM的精妙展现出来.最近项目打算正式将ko用起来,于是乎对ko和bootstraptable做了一些封装,在此分享出来供园友们参考.封装思路参考博客园大神萧秦,如果园友们有更好的方法,欢迎讨论. KnockoutJS系列文章: JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一) JS组件

ASP.NET CORE系列【二】使用Entity Framework Core进行增删改查

原文:ASP.NET CORE系列[二]使用Entity Framework Core进行增删改查 介绍 EntityFrameworkCore EF core 是一个轻量级的,可扩展的EF的跨平台版本.对于EF而言 EF core 包含许多提升和新特性,同时 EF core 是一个全新的代码库,并不如 EF6 那么成熟和稳定.EF core 保持了和EF相似的开发体验,大多数顶级API都被保留了下来,所以,如果你用过EF6,那么上手EF core你会觉得非常轻松和熟悉,EF core 构建在一

springmvc+spring+mybatis 整合

1.其实我也是菜鸟一枚,以前ssm不会,所以花了一段时间,学习了mybatis spring又进行了整合,后来又学习springmvc算是都看了看,今天就把整个搭建好的框架整理一下,和大家分享,如果错误希望指正…… 2.整个项目的目录结构: 3.有了整体结构之后我们一步一步整合来实现,整合步骤: (1).配置前端控制器,web.xml配置 (2).创建处理映射器 springmvc-server.xml 配置 (3).创建控制层 (4).业务逻辑层 (5).dao层 (6).sqlmapper

EasyUI + Spring MVC + hibernate实现增删改查导入导出

(这是一个故事……) 前言 作为一个JAVA开发工程师,我觉得最基本是需要懂前端.后台以及数据库. 练习的内容很基础,包括:基本增删改查.模糊查询.分页查询.树菜单.上传下载.tab页 主管发我一个已经搭建好的框架平台,在平台上进行编码,不限制技术. 虽然说不限制技术,但还是得根据已经搭建的框架平台进行编码. 所以首先第一步,分析框架平台结构组成. 入手:看目录.看配置.看jar包.看js库.看数据库... 不难发现项目是基于:Spring + Hibernate + Spring MVC +

SpringMVC框架下数据的增删改查,数据类型转换,数据格式化,数据校验,错误输入的消息回显

在eclipse中javaEE环境下: 这儿并没有连接数据库,而是将数据存放在map集合中: 将各种架包导入lib下... web.xml文件配置为 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/

SpringMVC,MyBatis商品的增删改查

一.需求 商品的增删改查 二.工程结构 三.代码 1.Mapper层 (1) ItemsMapperCustom.java 1 package com.tony.ssm.mapper; 2 3 import java.util.List; 4 5 import com.tony.ssm.po.ItemsCustom; 6 import com.tony.ssm.po.ItemsQueryVo; 7 8 public interface ItemsMapperCustom { 9 //商品查询列表