使用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(用户实体类)
 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

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

  

  数据展示页面:

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

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

  说点闲话(废话)

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

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

  1. 一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器

    一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字 ...

  2. 如何搭建一个WEB服务器项目(四)—— 实现安卓端图片加载

    使用Glide安卓图片加载库 观前提示:本系列文章有关服务器以及后端程序这些概念,我写的全是自己的理解,并不一定正确,希望不要误人子弟.欢迎各位大佬来评论区提出问题或者是指出错误,分享宝贵经验.先谢谢 ...

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

    使用Intellij IDEA2019创建SSH(Spring+SpringMVC+Hibernate+Maven整合)项目 观前提示:本系列文章有关服务器以及后端程序这些概念,我写的全是自己的理解, ...

  4. 如何搭建一个WEB服务器项目(六)—— 上传图片至服务器

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

  5. 如何搭建一个WEB服务器项目(三)—— 实现安卓端联网登录

    安卓端调用服务器登录函数进行验证登录 观前提示:本系列文章有关服务器以及后端程序这些概念,我写的全是自己的理解,并不一定正确,希望不要误人子弟.欢迎各位大佬来评论区提出问题或者是指出错误,分享宝贵经验 ...

  6. 如何搭建一个WEB服务器项目(五)—— Controller返回JSON字符串

    从服务器获取所需数据(JSON格式) 观前提示:本系列文章有关服务器以及后端程序这些概念,我写的全是自己的理解,并不一定正确,希望不要误人子弟.欢迎各位大佬来评论区提出问题或者是指出错误,分享宝贵经验 ...

  7. Arrays(二),对封装的数组进行增删改查操作

    (一)添加元素 对任意位置添加元素 /** * 向数组中添加元素 * @param e 元素e * @param index 插入元素的在数组中的位置 * @return 添加结果 */ public ...

  8. 用C写一个web服务器(二) I/O多路复用之epoll

    .container { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px } .conta ...

  9. Web框架之Django_02基本操作(Django项目启动配置、数据库连接、orm、增删改查)

    摘要: Django项目简单现实过程 pycharm连接数据库 Django之orm简单操作增删改查 一.新建Django项目.配置.设置: 新建Django项目:(为了熟悉Django操作,暂时全部 ...

随机推荐

  1. tensorflow1.0 构建lstm做图片分类

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #this is data mni ...

  2. 开发一款图片压缩工具(二):使用 pngquant 实现图片压缩

    上一篇我尝试使用了 pillow 库对 png 图片进行了压缩,效果不好.这次我换用 pngquant 来压缩.pngquant 是用于 PNG 图像有损压缩的命令行实用程序和库.压缩程序会显著减小文 ...

  3. Docker 搭建 ELK 集群步骤

    前言 本篇文章主要介绍在两台机器上使用 Docker 搭建 ELK. 正文 环境 CentOS 7.7 系统 Docker version 19.03.8 docker-compose version ...

  4. 反转链表-PHP的实现

    <? //节点 class Node { private $Data;//节点数据 private $Next;//下一节点 public function setData($value) { ...

  5. 关于Google下插件SwitchyOmega用法

    开启代理后,尽管访问很自由了,但是我的搬瓦工,是有流量限制的.所以,在之前,我开启一会自由访问模式(戏称),然后关一会,用来方便打开国内网站. 是的,我这么坚持了半个月,之后,就崩溃了,太尼玛繁琐了! ...

  6. <algorithm>中sort()函数的用法

    先说一下,本篇文章我没有讲sort()实现排序的原理,我写在另一篇文章中了,如果想了解的话,可以看一下,附上链接:https://www.cnblogs.com/buanxu/p/12772700.h ...

  7. MySql -- 数据结构

    现在的数据表不单单只是存储数据,还有的是设计功能和快速处理数据的结构功能: 首先,我们在设计数据库的时候,我们要先分清楚,那些是要单纯的存储数据的(固定),然后再设计出来数据的表(流动) 你懂我意思吧 ...

  8. QtConcurrent::run() 只能运行参数个数不超过5的函数

    有时不得不看源码 qtconcurrentrun.h template <typename T, typename Param1, typename Arg1, typename Param2, ...

  9. js 随机数生成器

    title: js 随机数生成器 js 随机数生成器 js 随机数生成器 确定产生随机数的数目,最小值和最大值: 个数: 最小值: 最大值: 是否为唯一的随机数: 唯一 允许重复 点击生成产生随机数: ...

  10. 标准库 xml

    xml处理模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融 ...