使用HibernateTemplate進行增刪改查操作
觀前提示:本系列文章有關服務器以及后端程序這些概念,我寫的全是自己的理解,並不一定正確,希望不要誤人子弟。歡迎各位大佬來評論區提出問題或者是指出錯誤,分享寶貴經驗。先謝謝了( ̄▽ ̄)"!
這次的廢話留在文章末尾吧,斷更了好久,直接進入正題!
- 本篇中主要用到的代碼我都會在文章里貼出來
如果博主玩明白GitHub了的話,源碼會上傳到Github,貼出鏈接方便各位使用。不過我覺得各位還是找更有參考價值的文章吧,這個系列純粹是我一個人寫日記( ̄_ ̄),沒有太多參考價值
- 本篇中提到的上篇如無特別說明,均指本系列的第一篇
如何搭建一個WEB服務器項目(一)—— 開篇 ,搭建SSH整合框架
項目文檔結構目錄如下(覺得不理解的同學可以看一下上篇文章,里面有教程的鏈接):
首先簡單介紹一下HibernateTemplate的作用以及用法:
- HibernateTemplate的作用:
我簡單整理了網上的說法,大概如下:
從字面上意思我們就知道它是一個模板,然后我們又知道hibernate是一個對象關系映射的框架,所以我們很容易聯想到他的功能就是將Hibernate的持久層訪問模板化。或者我們直接叫他為hibernate的持久化模板。HibernateTemplate 提供了非常多的常用方法來完成基本的操作,比如增加、刪除、修改及查詢等操作,Spring 2.0 更增加對命名 SQL 查詢的支持,也增加對分頁的支持。大部分情況下,使用Hibernate 的常規用法,就可完成大多數DAO對象的 CRUD操作。其更多特性請各位自行百度,根據需求去了解,我也不再贅述。
- HibernateTemplate的用法:
本篇是基於注解的聲明式事務控制,在Tomcat啟動的時候由 Tomcat 加載 ApplicationContext.xml,配置文件給 hibernateTemplate賦值,這樣的話就實現了,在使用某個對象之前不用給他實例化(配置文件的內容詳情見上篇教程鏈接)
該說的也都說了,我們來看看具體的代碼實現,就以新增一條記錄為例:
- UserEntity(用戶實體類)

1 package dolphin.entity; 2 3 import javax.persistence.*; 4 5 @Entity 6 @Table(name = "user", schema = "hibernate", catalog = "") 7 public class UserEntity { 8 private int userId; 9 private String userName; 10 private String userKey; 11 private String userScore; 12 private String userGrade; 13 private String isVip; 14 private String headImage; 15 16 @Id 17 @GeneratedValue(strategy=GenerationType.IDENTITY) 18 @Column(name = "user_id") 19 public int getUserId() { 20 return userId; 21 } 22 23 public void setUserId(int userId) { 24 this.userId = userId; 25 } 26 27 @Basic 28 @Column(name = "user_name") 29 public String getUserName() { 30 return userName; 31 } 32 33 public void setUserName(String userName) { 34 this.userName = userName; 35 } 36 37 @Basic 38 @Column(name = "user_key") 39 public String getUserKey() { 40 return userKey; 41 } 42 43 public void setUserKey(String userKey) { 44 this.userKey = userKey; 45 } 46 47 @Basic 48 @Column(name = "user_score") 49 public String getUserScore() { 50 return userScore; 51 } 52 53 public void setUserScore(String userScore) { 54 this.userScore = userScore; 55 } 56 57 @Basic 58 @Column(name = "user_grade") 59 public String getUserGrade() { 60 return userGrade; 61 } 62 63 public void setUserGrade(String userGrade) { 64 this.userGrade = userGrade; 65 } 66 67 @Basic 68 @Column(name = "is_vip") 69 public String getIsVip() { 70 return isVip; 71 } 72 73 public void setIsVip(String isVip) { 74 this.isVip = isVip; 75 } 76 77 @Basic 78 @Column(name = "head_image") 79 public String getHeadImage() { 80 return headImage; 81 } 82 83 public void setHeadImage(String headImage) { 84 this.headImage = headImage; 85 } 86 87 @Override 88 public boolean equals(Object o) { 89 if (this == o) return true; 90 if (o == null || getClass() != o.getClass()) return false; 91 92 UserEntity that = (UserEntity) o; 93 94 if (userId != that.userId) return false; 95 if (userName != null ? !userName.equals(that.userName) : that.userName != null) return false; 96 if (userKey != null ? !userKey.equals(that.userKey) : that.userKey != null) return false; 97 if (userScore != null ? !userScore.equals(that.userScore) : that.userScore != null) return false; 98 if (userGrade != null ? !userGrade.equals(that.userGrade) : that.userGrade != null) return false; 99 if (isVip != null ? !isVip.equals(that.isVip) : that.isVip != null) return false; 100 if (headImage != null ? !headImage.equals(that.headImage) : that.headImage != null) return false; 101 102 return true; 103 } 104 105 @Override 106 public int hashCode() { 107 int result = userId; 108 result = 31 * result + (userName != null ? userName.hashCode() : 0); 109 result = 31 * result + (userKey != null ? userKey.hashCode() : 0); 110 result = 31 * result + (userScore != null ? userScore.hashCode() : 0); 111 result = 31 * result + (userGrade != null ? userGrade.hashCode() : 0); 112 result = 31 * result + (isVip != null ? isVip.hashCode() : 0); 113 result = 31 * result + (headImage != null ? headImage.hashCode() : 0); 114 return result; 115 } 116 }
- UserService(用戶服務層接口)

1 package dolphin.service; 2 3 import dolphin.entity.UserEntity; 4 5 import java.util.List; 6 7 /** 8 * @Description :UserService 9 * @author :郭小柒w 10 * @date :2020/3/26 12:21 11 */ 12 public interface UserService { 13 /** 14 * @Description :驗證登陸身份 15 * @return :boolean 16 **/ 17 boolean isLoginOk(String username, String password); 18 /** 19 * @Description :查詢所有用戶信息 20 * @return :java.util.List<dolphin.entity.UserEntity> 21 **/ 22 List<UserEntity> getAll(); 23 /** 24 * @Description :添加用戶信息 25 * @return :void 26 */ 27 void add(UserEntity user); 28 /** 29 * @Description :更新用戶信息 30 * @return :void 31 */ 32 void update(UserEntity user); 33 /** 34 * @Description :刪除用戶信息 35 * @return :void 36 */ 37 void delete(UserEntity user); 38 /** 39 * @Description :根據id查詢用戶 40 * @return :java.lang.Object 41 **/ 42 UserEntity getUserById(int id); 43 }
- UserServiceImpl(用戶服務層實現類)

1 package dolphin.service.impl; 2 3 import dolphin.dao.UserDao; 4 import dolphin.entity.UserEntity; 5 import dolphin.service.UserService; 6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.stereotype.Service; 8 import org.springframework.transaction.annotation.Transactional; 9 10 import javax.annotation.Resource; 11 import java.util.List; 12 13 /** 14 * @Description :UserServiceImpl 15 * @author :郭小柒w 16 * @date :2020/3/26 12:20 17 */ 18 @Transactional 19 @Service("UserServiceImpl") 20 public class UserServiceImpl implements UserService { 21 22 @Autowired 23 @Resource 24 private UserDao userDao; 25 26 public UserDao getTestmapper() { 27 return userDao; 28 } 29 30 public void setTestmapper(UserDao mapper) { 31 this.userDao = mapper; 32 } 33 34 @Override 35 public boolean isLoginOk(String name,String key){ 36 return userDao.isLoginOk(name, key); 37 } 38 39 @Override 40 public List<UserEntity> getAll() { 41 return userDao.getAll(); 42 } 43 44 @Override 45 public void add(UserEntity user) { userDao.add(user); } 46 47 @Override 48 public void update(UserEntity user) { 49 userDao.update(user); 50 } 51 52 @Override 53 public void delete(UserEntity user) { 54 userDao.delete(user); 55 } 56 57 @Override 58 public UserEntity getUserById(int id) { 59 return userDao.getUserById(id); 60 } 61 }
- UserDao(用戶DAO層接口)

1 package dolphin.dao; 2 3 import dolphin.entity.UserEntity; 4 5 import java.util.List; 6 7 /** 8 * @description :映射類接口 9 * @author :郭小柒w 10 * @date :2020/3/26 13:36 11 * @version :1.0 12 */ 13 public interface UserDao { 14 /** 15 * @Description :驗證登陸身份 16 * @return :boolean 17 **/ 18 boolean isLoginOk(String username,String password); 19 /** 20 * @Description :查詢所有用戶信息 21 * @return :java.util.List 22 **/ 23 List getAll(); 24 /** 25 * @Description :添加用戶信息 26 * @return :void 27 **/ 28 void add(UserEntity user); 29 /** 30 * @Description :更新用戶信息 31 * @return :void 32 **/ 33 void update(UserEntity user); 34 /** 35 * @Description :刪除用戶信息 36 * @return :void 37 **/ 38 void delete(UserEntity user); 39 /** 40 * @Description :根據id查詢用戶信息 41 * @return :java.lang.Object 42 **/ 43 UserEntity getUserById(int id); 44 }
- UserDaoImpl(用戶DAO層實現類)

1 package dolphin.dao.impl; 2 3 import dolphin.dao.UserDao; 4 import org.springframework.beans.factory.annotation.Autowired; 5 import org.springframework.orm.hibernate5.HibernateTemplate; 6 import org.springframework.stereotype.Repository; 7 import dolphin.entity.UserEntity; 8 9 import javax.annotation.Resource; 10 import java.util.List; 11 12 /** 13 * @Description :UserDao 14 * @author :郭小柒w 15 * @date :2020/3/26 12:20 16 */ 17 @Repository 18 public class UserDaoImpl implements UserDao { 19 //提供Hibernate模板 20 @Autowired 21 @Resource 22 private HibernateTemplate hibernateTemplate; 23 24 public HibernateTemplate getHibernateTemplate() { 25 return hibernateTemplate; 26 } 27 28 public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { 29 this.hibernateTemplate = hibernateTemplate; 30 } 31 32 public boolean isLoginOk(String username, String password){ 33 List<UserEntity> list = getAll(); 34 for (UserEntity arr:list) { 35 if(username.equals(arr.getUserName())&&password.equals(arr.getUserKey())) 36 return true; 37 } 38 return false; 39 } 40 @Override 41 public List<UserEntity>getAll() { 42 return this.hibernateTemplate.loadAll(UserEntity.class); 43 } 44 45 @Override 46 public void add(UserEntity user) { 47 this.hibernateTemplate.save(user); 48 } 49 50 @Override 51 public void update(UserEntity user) { 52 this.hibernateTemplate.update(user); 53 } 54 55 @Override 56 public void delete(UserEntity user) { 57 this.hibernateTemplate.delete(user); 58 } 59 60 @Override 61 public UserEntity getUserById(int id) { 62 return getHibernateTemplate().get(UserEntity.class,id); 63 } 64 }
- AddController(邏輯控制層,新增記錄)

1 package dolphin.controller; 2 3 import dolphin.entity.UserEntity; 4 import dolphin.service.UserService; 5 import dolphin.utils.Singleton; 6 import org.springframework.stereotype.Controller; 7 import org.springframework.web.bind.annotation.RequestMapping; 8 9 import javax.servlet.http.HttpServletRequest; 10 import java.util.List; 11 12 /** 13 * @description :添加數據控制層 14 * @author :郭小柒w 15 * @date :2020/3/26 15:52 16 * @version :1.0 17 */ 18 @Controller 19 public class AddController { 20 private UserService userService = (UserService) Singleton.GetApplicationContext().getBean("UserServiceImpl"); 21 /** 22 * @Description :新增一條用戶信息 23 * @return :java.lang.String 24 **/ 25 @RequestMapping("/addUser") 26 public String addUser(HttpServletRequest request){ 27 UserEntity user = new UserEntity(); 28 user.setUserName(request.getParameter("id")); 29 user.setUserKey(request.getParameter("key")); 30 System.out.println(user.getUserName()+" "+user.getUserKey()); 31 userService.add(user); 32 List<UserEntity> list = userService.getAll(); 33 request.getSession().setAttribute("list",list); 34 return "show"; 35 } 36 }
- index.jsp(數據輸入頁)

1 <%-- 2 Created by IntelliJ IDEA. 3 User: 郭小柒w 4 Date: 2020/3/26 5 Time: 18:38 6 To change this template use File | Settings | File Templates. 7 --%> 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 9 <html> 10 <head> 11 <title>Title</title> 12 </head> 13 <body> 14 <a href="showUser">增刪改查</a><br> 15 <form action="./addUser", method="post"> 16 用戶名:<input name="id" type="text"><br> 17 密    碼:<input name="key" type="password"><br> 18 <button type="submit">提交</button> 19 </form><br> 20 <%-- 21 22 <form action="./deleteUser", method="post"> 23 用戶Id:<input name="id" type="text"> 24 <input type="submit"> 25 </form><br> 26 27 <form action="./updateUser", method="post"> 28 用戶Id:<input name="id" type="text"><br> 29 用戶名:<input name="key" type="text"><br> 30 <button type="submit">修改</button> 31 </form><br> 32 33 <form action="./findUser", method="post"> 34 用戶Id:<input name="id" type="text"> 35 <input type="submit" text="查詢"> 36 </form><br> 37 --%> 38 </body> 39 </html>
- show.jsp(數據展示頁)

1 <%@ page import="java.util.List" %> 2 <%@ page import="dolphin.entity.UserEntity" %><%-- 3 Created by IntelliJ IDEA. 4 User: 郭小柒w 5 Date: 2020/3/26 6 Time: 19:07 7 To change this template use File | Settings | File Templates. 8 --%> 9 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 10 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 11 <html> 12 <head> 13 <title>展示</title> 14 </head> 15 <body> 16 <% 17 List<UserEntity> list = (List<UserEntity>) request.getSession().getAttribute("list"); 18 if(list.size()!=0 || list!=null) 19 for (UserEntity arr :list) { 20 response.getWriter().println("ID是"+arr.getUserId()+"姓名是:"+arr.getUserName()+" 密碼是:"+arr.getUserKey()+"<br>"); 21 } 22 %> 23 <%-- <c:forEach var="r" items="${xuanlist}" varStatus="vs">--%> 24 <%-- ID是:${r}--%> 25 <%-- 姓名是:${r.name}--%> 26 <%-- </c:forEach>--%> 27 </body> 28 </html>
效果圖如下,輸入數據提交:
數據展示頁面:
雖然在這里只展示了新增一條記錄(只用到用戶的兩種屬性->姓名和密碼)的過程,但是我貼出的代碼里(UserDaoImpl.java)包含了查找、刪除和更新的具體實現,有興趣的朋友可以自行編寫對應的Controller來實現功能。另外,有關HibernateTemplate的更多用法以及講解請自行搜索,我這里只是最基本的增刪改查用法(還請各位不要笑話,我也是剛學(╥﹏╥)...)
—————————我———是———分———割———線—————————
說點閑話(廢話)
被需求分析、概要設計以及詳細設計三個文檔搞得頭昏腦脹,這個系列也拖更了兩周(這是第三周🙃)。雖然是寫給自己看的,但這么久不更還是覺得不太合適,之前也是抱着一腔熱血要在博客這塊地方留下濃墨重彩的一筆,現實卻是自己的造詣遠遠不夠格啊🐷。加之被開頭說的三個文檔打擊了一番,瞬間覺得寫東西並不全是件快樂的事,尤其是寫不擅長的內容而且還要保質保量,着實痛苦🤪。不過萬事開頭難,和開篇說的一樣,自己還是很希望在這漫長的流水賬記錄里收獲一些東西的,只能給自己打打氣,再接再厲吧!(不出意外的話這周應該能按時更新,逃...)