1. 程式人生 > >ztree與springmvc+spring+mybatis整合實現增刪改查

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. function addHoverDom(treeId, treeNode) {

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

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

  83. var addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增分類' onfocus='this.blur();'></span>";

  84. sObj.after(addStr);

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

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

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

  88. var treeNodes;

  89. $.ajax({

  90. async: false,

  91. type: "post",

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

  93. success : function(libraryId){

  94. if(libraryId != "" ){

  95. treeNodes = zTree.addNodes(treeNode, {id:(libraryId), pId:treeNode.id, name:"請輸入名稱" });

  96. }

  97. if (treeNodes) {

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

  99. }

  100. },

  101. error : function(){

  102. alert('親,網路有點不給力呀!');

  103. }

  104. });

  105. return false;

  106. });

  107. }

  108. //父級分類去除刪除功能

  109. function setRemoveBtn(treeId, treeNode) {

  110. return !treeNode.isParent;

  111. }

  112. //滑鼠移開按鈕消失

  113. function removeHoverDom(treeId, treeNode) {

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

  115. };

  116. //新增按鈕點選事件

  117. function addClick(){

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

  119. }

  120. //移除分類

  121. function remove(e) {

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

  123. nodes = zTree.getSelectedNodes(),

  124. treeNode = nodes[0];

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

  126. alert( "親,請先選擇一個分類!" );

  127. return;

  128. }

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

  130. zTree.removeNode(treeNode, callbackFlag);

  131. };

  132. //展開全部分類

  133. function expandAllFlag(){

  134. zTree_Menu.expandAll( true);

  135. }

  136. //合併全部分類

  137. function combineAllFlag(){

  138. zTree_Menu.expandAll( false);

  139. }

  140. //載入ztree

  141. function onloadZTree(){

  142. var ztreeNodes;

  143. $.ajax( {

  144. async : true, //是否非同步

  145. cache : false, //是否使用快取

  146. type : 'post', //請求方式,post

  147. dataType : "json", //資料傳輸格式

  148. url : "<%=request.getContextPath() %>/library/findAllLibrary/ ", //請求連結

  149. error : function() {

  150. alert('親,網路有點不給力呀!');

  151. },

  152. success : function(data) {

  153. ztreeNodes = eval( "["+data+"]" ); //將string型別轉換成json物件

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

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

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

  157. expandAllFlag();

  158. addClick();

  159. }

  160. });

  161. }

  162. //初始化操作

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

  164. onloadZTree();

  165. });

  166. </script>

備註:後臺傳過來的json資料一定執行這個操作:eval( "["+data+"]" ) 將string轉換為物件

Controller層程式碼如下:

  1. import java.util.List;

  2. import javax.servlet.http.HttpServletRequest;

  3. import javax.servlet.http.HttpServletResponse;

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

  5. import org.springframework.stereotype.Controller;

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

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

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

  9. @Controller

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

  11. public class LibraryController {

  12. @Autowired

  13. public LibraryService libraryService;

  14. /**

  15. * 跳轉到分類頁面

  16. * @return

  17. */

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

  19. public String toListLibrary(){

  20. return "library/listLibrary";

  21. }

  22. /**

  23. * 查詢所有分類資訊

  24. * @return

  25. */

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

  27. @ResponseBody

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

  29. return libraryService.findAllLibrary();

  30. }

  31. /**

  32. * 儲存分類

  33. * @return

  34. */

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

  36. @ResponseBody

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

  38. String libraryId = UUIDUtil.randomUUID();

  39. return libraryId;

  40. }

  41. /**

  42. * 更新分類名稱

  43. * @return

  44. */

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

  46. @ResponseBody

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

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

  49. library.setCreate_user(createname);

  50. library.setUpdate_user(createname);

  51. return libraryService.addOrUpdateLibrary(library);

  52. }

  53. /**

  54. * 刪除分類

  55. * @return

  56. */

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

  58. @ResponseBody

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

  60. return libraryService.deleteLibrary(id);

  61. }

  62. }

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. import org.apache.commons.lang3.StringUtils;

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

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

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

  10. import org.springframework.stereotype.Service;

  11. @Service

  12. public class LibraryService {

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

  14. @Autowired

  15. private LibraryMapper libraryMapper;

  16. /**

  17. * 查詢所有分類資訊

  18. * @return

  19. */

  20. public List<Object> findAllLibrary(){

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

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

  23. String str = "";

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

  25. Library library = listLibrary.get(i);//分類資訊

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

  27. log.info(str);

  28. listZTree.add(str);

  29. }

  30. return listZTree;

  31. }

  32. /**

  33. * 儲存或更新分類資訊

  34. * @param library

  35. * @return

  36. */

  37. public String addOrUpdateLibrary(Library library){

  38. int numFlag = 0;

  39. //根據id查詢分類資訊

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

  41. return "error";

  42. }

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

  44. if (num >0) {//更新資訊

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

  46. library.setCreate_user(null);

  47. library.setPid(null);

  48. numFlag = libraryMapper.updateByPrimaryKeySelective(library);

  49. }else{//插入資訊

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

  51. library.setPid("0");

  52. }

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

  54. orderId++;

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

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

  57. library.setOrder_id(orderId);

  58. numFlag = libraryMapper.insert(library);

  59. }

  60. return "success";

  61. }

  62. /**

  63. * 刪除分類

  64. * @param id

  65. * @return

  66. */

  67. public String deleteLibrary(String id){

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

  69. return "success";

  70. }

  71. }

備註:執行完資料操作需要判斷返回值,這裡我直接返回success活error了。

Mapper層程式碼如下

  1. import java.util.List;

  2. import java.util.Map;

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

  4. /**

  5. * 查詢所有分類資訊

  6. * @return

  7. */

  8. public List<Library> findAllLibrary();

  9. /**

  10. * 根據id查詢條數

  11. * @param id

  12. * @return

  13. */

  14. public int findLibraryById(String id);

  15. /**

  16. * 查詢最大排序號

  17. * @return

  18. */

  19. public int findLastLibrary(Library library);

  20. }

備註: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. <!-- 根據id查詢分類資訊是否存在 -->

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

  22. select count(*) from onair_vms_library

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

  24. </ select>

  25. <!-- 根據 pid查詢最大排序號 -->

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

  27. SELECT MAX(order_id) as order_id FROM onair_vms_library

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

  29. </ select>

  30. <!-- 查詢所有分類資訊 -->

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

  32. select

  33. <include refid ="Base_Column_List"/>

  34. from onair_vms_library

  35. where is_delete = 1 order by order_id

  36. </ select>

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

  38. select

  39. <include refid ="Base_Column_List" />

  40. from onair_vms_library

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

  42. </ select>

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

  44. update onair_vms_library set is_delete = 0

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

  46. </ delete>

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

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

  49. create_time, update_time, is_delete,

  50. update_user, create_user, level_id,

  51. order_id)

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

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

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

  55. #{order_id,jdbcType=INTEGER})

  56. </ insert>

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

  58. update onair_vms_library

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

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

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

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

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

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

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

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

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

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

  69. </ update>

  70. </mapper>

備註:mapper對應的xml

與jsp對應的VO層程式碼如下:

  1. public class LibraryVo {

  2. /* id */

  3. private String id;

  4. /* 目標id */

  5. private String targetId;

  6. /* pid */

  7. private String pId;

  8. /* 目標pid */

  9. private String targetPId;

  10. /* "inner":成為子節點,"prev":成為同級前一個節點,"next":成為同級後一個節點 */

  11. private String moveType;

  12. public String getId() {

  13. return id;

  14. }

  15. public void setId(String id) {

  16. this. id = id;

  17. }

  18. public String getTargetId() {

  19. return targetId;

  20. }

  21. public void setTargetId(String targetId) {

  22. this. targetId = targetId;

  23. }

  24. public String getpId() {

  25. return pId;

  26. }

  27. public void setpId(String pId) {

  28. this. pId = pId;

  29. }

  30. public String getTargetPId() {

  31. return targetPId;

  32. }

  33. public void setTargetPId(String targetPId) {

  34. this. targetPId = targetPId;

  35. }

  36. public String getMoveType() {

  37. return moveType;

  38. }

  39. public void setMoveType(String moveType) {

  40. this. moveType = moveType;

  41. }

  42. }

上面的程式碼實現了基本的增刪改查,有哪些地方有問題歡迎指正,也歡迎交流,每一次的進步都離不開大家的幫助

--------------------- 本文來自 黃愛崗 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/huangaigang6688/article/details/27376831?utm_source=copy