使用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. python 利用numpy同时打乱列表的顺序,同时打乱数据和标签的顺序

    可用于网络训练打乱训练数据个标签,不改变对应关系 方法一: np.random.shuffle (无返回值,直接打乱原列表) state = np.random.get_state() np.rand ...

  2. 漫谈LiteOS-端云互通组件-MQTT开发指南(下)

    1.介绍 SDK简介 Agent Tiny是部署在具备广域网能力.对功耗/存储/计算资源有苛刻限制的终端设备上的轻量级互联互通中间件,您只需调用API接口,便可实现设备快速接入到物联网平台以及数据上报 ...

  3. 前端基础进阶(七)-前端工程师最容易出错的问题-this关键字

    我们在学习JavaScript的时候,因为对一些概念不是很清楚,但是又会通过一些简洁的方式把它给记下来,那么这样自己记下来的概念和真正的概念产生了很强的偏差. 当然,还有一些以为这个是对的,还会把它发 ...

  4. python 开发一款图片压缩工具(四):上传图床

    上一篇使用了 pngquant 图片压缩工具进行压缩,并通过 click 命令行工具构建了 picom 包.这篇的主要功能是实现图片上传. 图片上传功能的实现 通过 pngquant 压缩图片后,得到 ...

  5. Latex-0-latex2word

    Latex-0-latex2word LatexXeLaTex Latex 转 Word 虽然latex 格式很方便,能够满足绝大部分的排版要求,但是在与人沟通的时候不可避免地需要用到其他格式文件,比 ...

  6. java中Locks的使用

    文章目录 Lock和Synchronized Block的区别 Lock interface ReentrantLock ReentrantReadWriteLock StampedLock Cond ...

  7. VS中的生成和重新生成的区别

    2019独角兽企业重金招聘Python工程师标准>>> 生成 在上次编译的基础上,只对改动过的文件重新生成,没有改动过的文件不会重新生成. 重新生成 对所有的文件都重新生成.如果引用 ...

  8. 替换input单选框的样式

    实现效果:. css的input单选框的样式很丑,有时候不想使用原生的样式,如上照片,可以使用下面的方法. 思路是,给inpu加visibility:hidden隐藏,然后使用不同的图片绝对定位覆盖在 ...

  9. Jmeter 结构体系及运行顺序

    一.Jmeter 运行原理: Jmeter 时以线程的方式来运行的(由于Jmeter 是 java 开发的所以是运行在 JVM 虚拟机上的,java 也是支持多线程的) 二.Jmeter 结构体系 1 ...

  10. 学习vue第六节,v-if和v-show

    vue 中的v-if和v-show <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...