如何搭建一个WEB服务器项目(二)—— 对数据库表进行基本的增删改查操作
使用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的更多用法以及讲解请自行搜索,我这里只是最基本的增删改查用法(还请各位不要笑话,我也是刚学(╥﹏╥)...)
—————————我———是———分———割———线—————————
说点闲话(废话)
被需求分析、概要设计以及详细设计三个文档搞得头昏脑胀,这个系列也拖更了两周(这是第三周🙃)。虽然是写给自己看的,但这么久不更还是觉得不太合适,之前也是抱着一腔热血要在博客这块地方留下浓墨重彩的一笔,现实却是自己的造诣远远不够格啊🐷。加之被开头说的三个文档打击了一番,瞬间觉得写东西并不全是件快乐的事,尤其是写不擅长的内容而且还要保质保量,着实痛苦🤪。不过万事开头难,和开篇说的一样,自己还是很希望在这漫长的流水账记录里收获一些东西的,只能给自己打打气,再接再厉吧!(不出意外的话这周应该能按时更新,逃...)