ztree与springmvc+spring+mybatis整合实现增删改查

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

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

 
  1. <script>

  2. //用于捕获分类编辑按钮的 click 事件,并且根据返回值确定是否允许进入名称编辑状态

  3. function beforeEditName(treeId, treeNode) {

  4. var zTree = $.fn.zTree.getZTreeObj("treeDemo");

  5. zTree.selectNode(treeNode);

  6. return true;

  7. }

  8. //移除分类前执行

  9. function beforeRemove(treeId, treeNode) {

  10. var zTree = $.fn.zTree.getZTreeObj("treeDemo");

  11. zTree.selectNode(treeNode);

  12. var confirmFlag = confirm("确认删除分类[ " + treeNode.name + " ]吗?" )

  13. var confirmVal = false;

  14. if(confirmFlag){

  15. var data = {id:treeNode.id};

  16. $.ajax({

  17. async: false,

  18. type: "post",

  19. data:data,

  20. url: "<%=request.getContextPath() %>/library/deleteLibrary/ ",

  21. success: function(json){

  22. if(json == "success" ){

  23. confirmVal = true;

  24. } else{

  25. alert('亲,删除失败!');

  26. }

  27. },

  28. error: function(){

  29. alert('亲,删除失败!');

  30. }

  31. });

  32. }

  33. return confirmVal;

  34. }

  35. //执行删除操作后提示

  36. function onRemove(e, treeId, treeNode) {

  37. alert('亲,删除成功!');

  38. }

  39. //用于捕获分类编辑名称结束(Input 失去焦点 或 按下 Enter 键)之后,更新分类名称数据之前的事件回调函数

  40. function beforeRename(treeId, treeNode, newName) {

  41. if (newName.length == 0 || newName.indexOf("请输入名称")>=0) {

  42. alert('亲,请输入分类名称!');

  43. var zTree = $.fn.zTree.getZTreeObj("treeDemo");

  44. setTimeout( function(){zTree.editName(treeNode)}, 10);

  45. return false;

  46. }

  47. if(newName.length > 15){

  48. alert('亲,分类名称过长!');

  49. var zTree = $.fn.zTree.getZTreeObj("treeDemo");

  50. setTimeout( function(){zTree.editName(treeNode)}, 10);

  51. return false;

  52. }

  53. native_name = treeNode.name;

  54. return true;

  55. }

  56. //执行编辑操作

  57. function onRename(e, treeId, treeNode) {

  58. if(native_name == treeNode.name){

  59. return;

  60. }

  61. var data = {id:treeNode.id,level_id:treeNode.level,pid:treeNode.pId,name:treeNode.name};

  62. $.ajax({

  63. async: false,

  64. type: "post",

  65. data:data,

  66. url: "<%=request.getContextPath() %>/library/updateLibraryName/ ",

  67. success : function(json){

  68. if(json == "success" ){

  69. alert('操作成功!');

  70. } else{

  71. alert('亲,操作失败,请稍后再试!');

  72. }

  73. },

  74. error : function() {

  75. alert('亲,网络有点不给力呀!');

  76. }

  77. });

  78. }

  79.  
  80. //添加子分类

  81. function addHoverDom(treeId, treeNode) {

  82. var sObj = $("#" + treeNode.tId + "_span");

  83. if (treeNode.editNameFlag || $("#addBtn_" +treeNode.tId).length>0 || treeNode.level == 3) return;

  84. var addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='添加分类' onfocus='this.blur();'></span>";

  85. sObj.after(addStr);

  86. var btn = $("#addBtn_" +treeNode.tId);

  87. if (btn) btn.bind("click" , function(){

  88. var zTree = $.fn.zTree.getZTreeObj("treeDemo");

  89. var treeNodes;

  90. $.ajax({

  91. async: false,

  92. type: "post",

  93. url: "<%=request.getContextPath() %>/library/saveLibrary/ ",

  94. success : function(libraryId){

  95. if(libraryId != "" ){

  96. treeNodes = zTree.addNodes(treeNode, {id:(libraryId), pId:treeNode.id, name:"请输入名称" });

  97. }

  98. if (treeNodes) {

  99. zTree.editName(treeNodes[0]);

  100. }

  101. },

  102. error : function(){

  103. alert('亲,网络有点不给力呀!');

  104. }

  105. });

  106. return false;

  107. });

  108. }

  109. //父级分类去除删除功能

  110. function setRemoveBtn(treeId, treeNode) {

  111. return !treeNode.isParent;

  112. }

  113.  
  114. //鼠标移开按钮消失

  115. function removeHoverDom(treeId, treeNode) {

  116. $( "#addBtn_"+treeNode.tId).unbind().remove();

  117. };

  118.  
  119. //添加按钮点击事件

  120. function addClick(){

  121. $( "#addParent").bind("click" , {isParent:true}, add);

  122. }

  123.  
  124. //移除分类

  125. function remove(e) {

  126. var zTree = $.fn.zTree.getZTreeObj("treeDemo"),

  127. nodes = zTree.getSelectedNodes(),

  128. treeNode = nodes[0];

  129. if (nodes.length == 0) {

  130. alert( "亲,请先选择一个分类!" );

  131. return;

  132. }

  133. var callbackFlag = $("#callbackTrigger" ).attr("checked");

  134. zTree.removeNode(treeNode, callbackFlag);

  135. };

  136.  
  137. //展开全部分类

  138. function expandAllFlag(){

  139. zTree_Menu.expandAll( true);

  140. }

  141. //合并全部分类

  142. function combineAllFlag(){

  143. zTree_Menu.expandAll( false);

  144. }

  145.  
  146. //加载ztree

  147. function onloadZTree(){

  148. var ztreeNodes;

  149. $.ajax( {

  150. async : true, //是否异步

  151. cache : false, //是否使用缓存

  152. type : 'post', //请求方式,post

  153. dataType : "json", //数据传输格式

  154. url : "<%=request.getContextPath() %>/library/findAllLibrary/ ", //请求链接

  155. error : function() {

  156. alert('亲,网络有点不给力呀!');

  157. },

  158. success : function(data) {

  159. ztreeNodes = eval( "["+data+"]" ); //将string类型转换成json对象

  160. $.fn.zTree.init($( "#treeDemo"), setting, ztreeNodes);

  161. zTree_Menu = $.fn.zTree.getZTreeObj("treeDemo" );

  162. $( "#selectAll").bind("click" , selectAll);

  163. expandAllFlag();

  164. addClick();

  165. }

  166. });

  167. }

  168.  
  169. //初始化操作

  170. $(document).ready( function(){

  171. onloadZTree();

  172. });

  173. </script>

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

Controller层代码如下:

 
  1. import java.util.List;

  2.  
  3. import javax.servlet.http.HttpServletRequest;

  4. import javax.servlet.http.HttpServletResponse;

  5.  
  6. import org.springframework.beans.factory.annotation.Autowired;

  7. import org.springframework.stereotype.Controller;

  8. import org.springframework.web.bind.annotation.RequestMapping;

  9. import org.springframework.web.bind.annotation.RequestParam;

  10. import org.springframework.web.bind.annotation.ResponseBody;

  11.  
  12. @Controller

  13. @RequestMapping(value="library/")

  14. public class LibraryController {

  15.  
  16. @Autowired

  17. public LibraryService libraryService;

  18.  
  19. /**

  20. * 跳转到分类页面

  21. * @return

  22. */

  23. @RequestMapping(value="toListLibrary/")

  24. public String toListLibrary(){

  25. return "library/listLibrary";

  26. }

  27.  
  28. /**

  29. * 查询所有分类信息

  30. * @return

  31. */

  32. @RequestMapping(value="findAllLibrary/")

  33. @ResponseBody

  34. public List<Object> findAllLibrary(HttpServletRequest request, HttpServletResponse response){

  35. return libraryService.findAllLibrary();

  36. }

  37.  
  38. /**

  39. * 保存分类

  40. * @return

  41. */

  42. @RequestMapping(value="saveLibrary/")

  43. @ResponseBody

  44. public String saveLibrary(HttpServletRequest request, HttpServletResponse response){

  45. String libraryId = UUIDUtil.randomUUID();

  46. return libraryId;

  47. }

  48.  
  49. /**

  50. * 更新分类名称

  51. * @return

  52. */

  53. @RequestMapping(value="updateLibraryName/")

  54. @ResponseBody

  55. public String updateLibraryName(HttpServletRequest request, HttpServletResponse response, Library library) {

  56. String createname=(String) request.getSession().getAttribute(Constants.CURRENT_USER_NAME);

  57. library.setCreate_user(createname);

  58. library.setUpdate_user(createname);

  59. return libraryService.addOrUpdateLibrary(library);

  60. }

  61.  
  62.  
  63. /**

  64. * 删除分类

  65. * @return

  66. */

  67. @RequestMapping(value="deleteLibrary/")

  68. @ResponseBody

  69. public String deleteLibrary(HttpServletRequest request, HttpServletResponse response,@RequestParam(value = "id") String id) {

  70. return libraryService.deleteLibrary(id);

  71. }

  72. }

service层代码如下:

 
  1. import java.util.ArrayList;

  2. import java.util.Date;

  3. import java.util.HashMap;

  4. import java.util.List;

  5. import java.util.Map;

  6.  
  7. import org.apache.commons.lang3.StringUtils;

  8. import org.apache.commons.logging.Log;

  9. import org.apache.commons.logging.LogFactory;

  10. import org.springframework.beans.factory.annotation.Autowired;

  11. import org.springframework.stereotype.Service;

  12.  
  13. @Service

  14. public class LibraryService {

  15. protected final static Log log = LogFactory.getLog(LibraryService.class);

  16.  
  17. @Autowired

  18. private LibraryMapper libraryMapper;

  19.  
  20. /**

  21. * 查询所有分类信息

  22. * @return

  23. */

  24. public List<Object> findAllLibrary(){

  25. List<Object> listZTree = new ArrayList<Object>();

  26. List<Library> listLibrary = libraryMapper.findAllLibrary();

  27. String str = "";

  28. for (int i = 0; i < listLibrary.size(); i++) {

  29. Library library = listLibrary.get(i);//分类信息

  30. str = "{id:'" +library.getId() + "', pId:'"+library.getPid()+"', name:\""+library.getName()+"\" }";//封装ztree需要格式的字符串

  31. log.info(str);

  32. listZTree.add(str);

  33. }

  34. return listZTree;

  35. }

  36.  
  37. /**

  38. * 保存或更新分类信息

  39. * @param library

  40. * @return

  41. */

  42. public String addOrUpdateLibrary(Library library){

  43. int numFlag = 0;

  44. //根据id查询分类信息

  45. if (StringUtils.isBlank(library.getId())) {

  46. return "error";

  47. }

  48. int num = libraryMapper.findLibraryById(library.getId());

  49. if (num >0) {//更新信息

  50. library.setUpdate_time(new Date());

  51. library.setCreate_user(null);

  52. library.setPid(null);

  53. numFlag = libraryMapper.updateByPrimaryKeySelective(library);

  54. }else{//插入信息

  55. if(library.getPid().equals("null")){

  56. library.setPid("0");

  57. }

  58. int orderId = libraryMapper.findLastLibrary(library);

  59. orderId++;

  60. library.setCreate_time(new Date());

  61. library.setUpdate_time(new Date());

  62. library.setOrder_id(orderId);

  63. numFlag = libraryMapper.insert(library);

  64. }

  65. return "success";

  66. }

  67.  
  68. /**

  69. * 删除分类

  70. * @param id

  71. * @return

  72. */

  73. public String deleteLibrary(String id){

  74. int num = libraryMapper.deleteByPrimaryKey(id);

  75. return "success";

  76. }

  77.  
  78. }

备注:执行完数据操作需要判断返回值,这里我直接返回success活error了。

Mapper层代码如下

 
  1. import java.util.List;

  2. import java.util.Map;

  3.  
  4. public interface LibraryMapper extends BaseMapper<Library,String>{

  5.  
  6. /**

  7. * 查询所有分类信息

  8. * @return

  9. */

  10. public List<Library> findAllLibrary();

  11.  
  12.  
  13. /**

  14. * 根据id查询条数

  15. * @param id

  16. * @return

  17. */

  18. public int findLibraryById(String id);

  19.  
  20. /**

  21. * 查询最大排序号

  22. * @return

  23. */

  24. public int findLastLibrary(Library library);

  25.  
  26. }

备注:BaseMapper里有几个公用的增删改查的方法,Library是数据库表对应的实体,都很简单,避免代码过多这里就省略了

 
  1. <?xml version="1.0" encoding= "UTF-8" ?>

  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

  3. <mapper namespace= "LibraryMapper" >

  4. < resultMap id= "BaseResultMap" type= "Library" >

  5. <id column ="id" property="id" jdbcType= "VARCHAR" />

  6. <result column ="pid" property="pid" jdbcType= "VARCHAR" />

  7. <result column ="name" property="name" jdbcType= "VARCHAR" />

  8. <result column ="create_time" property="create_time" jdbcType= "TIMESTAMP" />

  9. <result column ="update_time" property="update_time" jdbcType= "TIMESTAMP" />

  10. <result column ="is_delete" property="is_delete" jdbcType= "INTEGER" />

  11. <result column ="update_user" property="update_user" jdbcType= "VARCHAR" />

  12. <result column ="create_user" property="create_user" jdbcType= "VARCHAR" />

  13. <result column ="level_id" property="level_id" jdbcType= "INTEGER" />

  14. <result column ="order_id" property="order_id" jdbcType= "INTEGER" />

  15. </ resultMap>

  16. < sql id= "Base_Column_List" >

  17. id, pid , name, create_time, update_time, is_delete, update_user, create_user, level_id,

  18. order_id

  19. </ sql>

  20.  
  21. <!-- 根据id查询分类信息是否存在 -->

  22. < select id= "findLibraryById" parameterType ="java.lang.String" resultType= "java.lang.Integer" >

  23. select count(*) from onair_vms_library

  24. where is_delete=1 and id = #{id,jdbcType=VARCHAR}

  25. </ select>

  26. <!-- 根据 pid查询最大排序号 -->

  27. < select id= "findLastLibrary" resultType ="java.lang.Integer" parameterType="Library" >

  28. SELECT MAX(order_id) as order_id FROM onair_vms_library

  29. where pid = #{pid,jdbcType=VARCHAR}

  30. </ select>

  31. <!-- 查询所有分类信息 -->

  32. < select id= "findAllLibrary" resultMap ="BaseResultMap">

  33. select

  34. <include refid ="Base_Column_List"/>

  35. from onair_vms_library

  36. where is_delete = 1 order by order_id

  37. </ select>

  38.  
  39. < select id= "selectByPrimaryKey" resultMap ="BaseResultMap" parameterType="java.lang.String" >

  40. select

  41. <include refid ="Base_Column_List" />

  42. from onair_vms_library

  43. where id = #{id,jdbcType=VARCHAR}

  44. </ select>

  45. < delete id= "deleteByPrimaryKey" parameterType="java.lang.String" >

  46. update onair_vms_library set is_delete = 0

  47. where id = #{id,jdbcType=VARCHAR}

  48. </ delete>

  49. < insert id= "insert" parameterType="Library" >

  50. insert into onair_vms_library (id, pid, name,

  51. create_time, update_time, is_delete,

  52. update_user, create_user, level_id,

  53. order_id)

  54. values (#{id,jdbcType=VARCHAR}, #{pid,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR},

  55. #{create_time,jdbcType=TIMESTAMP}, #{update_time,jdbcType=TIMESTAMP}, #{is_delete,jdbcType=INTEGER},

  56. #{update_user,jdbcType=VARCHAR}, #{create_user,jdbcType=VARCHAR}, #{level_id,jdbcType=INTEGER},

  57. #{order_id,jdbcType=INTEGER})

  58. </ insert>

  59. < update id= "updateByPrimaryKey" parameterType="Library" >

  60. update onair_vms_library

  61. set pid = #{pid,jdbcType=VARCHAR},

  62. name = #{name,jdbcType=VARCHAR},

  63. create_time = #{create_time,jdbcType=TIMESTAMP},

  64. update_time = #{update_time,jdbcType=TIMESTAMP},

  65. is_delete = #{is_delete,jdbcType=INTEGER},

  66. update_user = #{update_user,jdbcType=VARCHAR},

  67. create_user = #{create_user,jdbcType=VARCHAR},

  68. level_id = #{level_id,jdbcType=INTEGER},

  69. order_id = #{order_id,jdbcType=INTEGER}

  70. where id = #{id,jdbcType=VARCHAR}

  71. </ update>

  72. </mapper>

备注:mapper对应的xml

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

 
  1. public class LibraryVo {

  2.  
  3. /* id */

  4. private String id;

  5. /* 目标id */

  6. private String targetId;

  7. /* pid */

  8. private String pId;

  9. /* 目标pid */

  10. private String targetPId;

  11. /* "inner":成为子节点,"prev":成为同级前一个节点,"next":成为同级后一个节点 */

  12. private String moveType;

  13.  
  14. public String getId() {

  15. return id;

  16. }

  17.  
  18. public void setId(String id) {

  19. this. id = id;

  20. }

  21.  
  22. public String getTargetId() {

  23. return targetId;

  24. }

  25.  
  26. public void setTargetId(String targetId) {

  27. this. targetId = targetId;

  28. }

  29.  
  30. public String getpId() {

  31. return pId;

  32. }

  33.  
  34. public void setpId(String pId) {

  35. this. pId = pId;

  36. }

  37.  
  38. public String getTargetPId() {

  39. return targetPId;

  40. }

  41.  
  42. public void setTargetPId(String targetPId) {

  43. this. targetPId = targetPId;

  44. }

  45.  
  46. public String getMoveType() {

  47. return moveType;

  48. }

  49.  
  50. public void setMoveType(String moveType) {

  51. this. moveType = moveType;

  52. }

  53.  
  54. }

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

--------------------- 本文来自 黄爱岗 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/huangaigang6688/article/details/27376831?utm_source=copy

猜你喜欢

转载自blog.csdn.net/weixin_41045798/article/details/82924137