如何搭建一个WEB服务器项目(二)—— 对数据库表进行基本的增删改查操作

时间:2023-03-08 16:30:28

使用HibernateTemplate进行增删改查操作

  观前提示:本系列文章有关服务器以及后端程序这些概念,我写的全是自己的理解,并不一定正确,希望不要误人子弟。欢迎各位大佬来评论区提出问题或者是指出错误,分享宝贵经验。先谢谢了( ̄▽ ̄)"!

  这次的废话留在文章末尾吧,断更了好久,直接进入正题!

  • 本篇中主要用到的代码我都会在文章里贴出来

    如果博主玩明白GitHub了的话,源码会上传到Github,贴出链接方便各位使用。不过我觉得各位还是找更有参考价值的文章吧,这个系列纯粹是我一个人写日记( ̄_ ̄),没有太多参考价值

  • 本篇中提到的上篇如无特别说明,均指本系列的第一篇

    如何搭建一个WEB服务器项目(一)—— 开篇 ,搭建SSH整合框架

  项目文档结构目录如下(觉得不理解的同学可以看一下上篇文章,里面有教程的链接):

  如何搭建一个WEB服务器项目(二)—— 对数据库表进行基本的增删改查操作

  如何搭建一个WEB服务器项目(二)—— 对数据库表进行基本的增删改查操作

首先简单介绍一下HibernateTemplate的作用以及用法:

  • HibernateTemplate的作用:

  我简单整理了网上的说法,大概如下:

  从字面上意思我们就知道它是一个模板,然后我们又知道hibernate是一个对象关系映射的框架,所以我们很容易联想到他的功能就是将Hibernate的持久层访问模板化。或者我们直接叫他为hibernate的持久化模板。HibernateTemplate 提供了非常多的常用方法来完成基本的操作,比如增加、删除、修改及查询等操作,Spring 2.0 更增加对命名 SQL 查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate 的常规用法,就可完成大多数DAO对象的 CRUD操作。其更多特性请各位自行百度,根据需求去了解,我也不再赘述。

  • HibernateTemplate的用法:

  本篇是基于注解的声明式事务控制,在Tomcat启动的时候由 Tomcat 加载 ApplicationContext.xml,配置文件给 hibernateTemplate赋值,这样的话就实现了,在使用某个对象之前不用给他实例化(配置文件的内容详情见上篇教程链接)

  该说的也都说了,我们来看看具体的代码实现,就以新增一条记录为例:

  • UserEntity(用户实体类)
 package dolphin.entity;

 import javax.persistence.*;

 @Entity
@Table(name = "user", schema = "hibernate", catalog = "")
public class UserEntity {
private int userId;
private String userName;
private String userKey;
private String userScore;
private String userGrade;
private String isVip;
private String headImage; @Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "user_id")
public int getUserId() {
return userId;
} public void setUserId(int userId) {
this.userId = userId;
} @Basic
@Column(name = "user_name")
public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} @Basic
@Column(name = "user_key")
public String getUserKey() {
return userKey;
} public void setUserKey(String userKey) {
this.userKey = userKey;
} @Basic
@Column(name = "user_score")
public String getUserScore() {
return userScore;
} public void setUserScore(String userScore) {
this.userScore = userScore;
} @Basic
@Column(name = "user_grade")
public String getUserGrade() {
return userGrade;
} public void setUserGrade(String userGrade) {
this.userGrade = userGrade;
} @Basic
@Column(name = "is_vip")
public String getIsVip() {
return isVip;
} public void setIsVip(String isVip) {
this.isVip = isVip;
} @Basic
@Column(name = "head_image")
public String getHeadImage() {
return headImage;
} public void setHeadImage(String headImage) {
this.headImage = headImage;
} @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; UserEntity that = (UserEntity) o; if (userId != that.userId) return false;
if (userName != null ? !userName.equals(that.userName) : that.userName != null) return false;
if (userKey != null ? !userKey.equals(that.userKey) : that.userKey != null) return false;
if (userScore != null ? !userScore.equals(that.userScore) : that.userScore != null) return false;
if (userGrade != null ? !userGrade.equals(that.userGrade) : that.userGrade != null) return false;
if (isVip != null ? !isVip.equals(that.isVip) : that.isVip != null) return false;
if (headImage != null ? !headImage.equals(that.headImage) : that.headImage != null) return false; return true;
} @Override
public int hashCode() {
int result = userId;
result = 31 * result + (userName != null ? userName.hashCode() : 0);
result = 31 * result + (userKey != null ? userKey.hashCode() : 0);
result = 31 * result + (userScore != null ? userScore.hashCode() : 0);
result = 31 * result + (userGrade != null ? userGrade.hashCode() : 0);
result = 31 * result + (isVip != null ? isVip.hashCode() : 0);
result = 31 * result + (headImage != null ? headImage.hashCode() : 0);
return result;
}
}

UserEntity.java

  • UserService(用户服务层接口)
 package dolphin.service;

 import dolphin.entity.UserEntity;

 import java.util.List;

 /**
* @Description :UserService
* @author :郭小柒w
* @date :2020/3/26 12:21
*/
public interface UserService {
/**
* @Description :验证登陆身份
* @return :boolean
**/
boolean isLoginOk(String username, String password);
/**
* @Description :查询所有用户信息
* @return :java.util.List<dolphin.entity.UserEntity>
**/
List<UserEntity> getAll();
/**
* @Description :添加用户信息
* @return :void
*/
void add(UserEntity user);
/**
* @Description :更新用户信息
* @return :void
*/
void update(UserEntity user);
/**
* @Description :删除用户信息
* @return :void
*/
void delete(UserEntity user);
/**
* @Description :根据id查询用户
* @return :java.lang.Object
**/
UserEntity getUserById(int id);
}

UserService.java

  • UserServiceImpl(用户服务层实现类)
 package dolphin.service.impl;

 import dolphin.dao.UserDao;
import dolphin.entity.UserEntity;
import dolphin.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource;
import java.util.List; /**
* @Description :UserServiceImpl
* @author :郭小柒w
* @date :2020/3/26 12:20
*/
@Transactional
@Service("UserServiceImpl")
public class UserServiceImpl implements UserService { @Autowired
@Resource
private UserDao userDao; public UserDao getTestmapper() {
return userDao;
} public void setTestmapper(UserDao mapper) {
this.userDao = mapper;
} @Override
public boolean isLoginOk(String name,String key){
return userDao.isLoginOk(name, key);
} @Override
public List<UserEntity> getAll() {
return userDao.getAll();
} @Override
public void add(UserEntity user) { userDao.add(user); } @Override
public void update(UserEntity user) {
userDao.update(user);
} @Override
public void delete(UserEntity user) {
userDao.delete(user);
} @Override
public UserEntity getUserById(int id) {
return userDao.getUserById(id);
}
}

UserServiceImpl.java

  • UserDao(用户DAO层接口)
 package dolphin.dao;

 import dolphin.entity.UserEntity;

 import java.util.List;

 /**
* @description :映射类接口
* @author :郭小柒w
* @date :2020/3/26 13:36
* @version :1.0
*/
public interface UserDao {
/**
* @Description :验证登陆身份
* @return :boolean
**/
boolean isLoginOk(String username,String password);
/**
* @Description :查询所有用户信息
* @return :java.util.List
**/
List getAll();
/**
* @Description :添加用户信息
* @return :void
**/
void add(UserEntity user);
/**
* @Description :更新用户信息
* @return :void
**/
void update(UserEntity user);
/**
* @Description :删除用户信息
* @return :void
**/
void delete(UserEntity user);
/**
* @Description :根据id查询用户信息
* @return :java.lang.Object
**/
UserEntity getUserById(int id);
}

UserDao.java

  • UserDaoImpl(用户DAO层实现类)
 package dolphin.dao.impl;

 import dolphin.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateTemplate;
import org.springframework.stereotype.Repository;
import dolphin.entity.UserEntity; import javax.annotation.Resource;
import java.util.List; /**
* @Description :UserDao
* @author :郭小柒w
* @date :2020/3/26 12:20
*/
@Repository
public class UserDaoImpl implements UserDao {
//提供Hibernate模板
@Autowired
@Resource
private HibernateTemplate hibernateTemplate; public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
} public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
} public boolean isLoginOk(String username, String password){
List<UserEntity> list = getAll();
for (UserEntity arr:list) {
if(username.equals(arr.getUserName())&&password.equals(arr.getUserKey()))
return true;
}
return false;
}
@Override
public List<UserEntity>getAll() {
return this.hibernateTemplate.loadAll(UserEntity.class);
} @Override
public void add(UserEntity user) {
this.hibernateTemplate.save(user);
} @Override
public void update(UserEntity user) {
this.hibernateTemplate.update(user);
} @Override
public void delete(UserEntity user) {
this.hibernateTemplate.delete(user);
} @Override
public UserEntity getUserById(int id) {
return getHibernateTemplate().get(UserEntity.class,id);
}
}

UserDaoImpl.java

  • AddController(逻辑控制层,新增记录)
 package dolphin.controller;

 import dolphin.entity.UserEntity;
import dolphin.service.UserService;
import dolphin.utils.Singleton;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest;
import java.util.List; /**
* @description :添加数据控制层
* @author :郭小柒w
* @date :2020/3/26 15:52
* @version :1.0
*/
@Controller
public class AddController {
private UserService userService = (UserService) Singleton.GetApplicationContext().getBean("UserServiceImpl");
/**
* @Description :新增一条用户信息
* @return :java.lang.String
**/
@RequestMapping("/addUser")
public String addUser(HttpServletRequest request){
UserEntity user = new UserEntity();
user.setUserName(request.getParameter("id"));
user.setUserKey(request.getParameter("key"));
System.out.println(user.getUserName()+" "+user.getUserKey());
userService.add(user);
List<UserEntity> list = userService.getAll();
request.getSession().setAttribute("list",list);
return "show";
}
}

AddController.java

  • index.jsp(数据输入页)
 <%--
Created by IntelliJ IDEA.
User: 郭小柒w
Date: 2020/3/26
Time: 18:38
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<a href="showUser">增删改查</a><br>
<form action="./addUser", method="post">
用户名:<input name="id" type="text"><br>
密&nbsp&nbsp&nbsp&nbsp码:<input name="key" type="password"><br>
<button type="submit">提交</button>
</form><br>
<%-- <form action="./deleteUser", method="post">
用户Id:<input name="id" type="text">
<input type="submit">
</form><br> <form action="./updateUser", method="post">
用户Id:<input name="id" type="text"><br>
用户名:<input name="key" type="text"><br>
<button type="submit">修改</button>
</form><br> <form action="./findUser", method="post">
用户Id:<input name="id" type="text">
<input type="submit" text="查询">
</form><br>
--%>
</body>
</html>

index.jsp

  • show.jsp(数据展示页)
 <%@ page import="java.util.List" %>
<%@ page import="dolphin.entity.UserEntity" %><%--
Created by IntelliJ IDEA.
User: 郭小柒w
Date: 2020/3/26
Time: 19:07
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>展示</title>
</head>
<body>
<%
List<UserEntity> list = (List<UserEntity>) request.getSession().getAttribute("list");
if(list.size()!=0 || list!=null)
for (UserEntity arr :list) {
response.getWriter().println("ID是"+arr.getUserId()+"姓名是:"+arr.getUserName()+" 密码是:"+arr.getUserKey()+"<br>");
}
%>
<%-- <c:forEach var="r" items="${xuanlist}" varStatus="vs">--%>
<%-- ID是:${r}--%>
<%-- 姓名是:${r.name}--%>
<%-- </c:forEach>--%>
</body>
</html>

show.jsp

  效果图如下,输入数据提交:

如何搭建一个WEB服务器项目(二)—— 对数据库表进行基本的增删改查操作

  

  数据展示页面:

如何搭建一个WEB服务器项目(二)—— 对数据库表进行基本的增删改查操作

  虽然在这里只展示了新增一条记录(只用到用户的两种属性->姓名和密码)的过程,但是我贴出的代码里(UserDaoImpl.java)包含了查找、删除和更新的具体实现,有兴趣的朋友可以自行编写对应的Controller来实现功能。另外,有关HibernateTemplate的更多用法以及讲解请自行搜索,我这里只是最基本的增删改查用法(还请各位不要笑话,我也是刚学(╥﹏╥)...)

  —————————我———是———分———割———线—————————

  说点闲话(废话)

  被需求分析、概要设计以及详细设计三个文档搞得头昏脑胀,这个系列也拖更了两周(这是第三周