从零开始做SSH项目(二)
使用hibernate测试加载数据、删除数据和修改数据等功能时,针对的是与数据库表user对应的User。
为了简化对其他数据表对应的实体类的持久化操作,可以在项目中创建一个BaseHibernateDAO类,将数据的加载、添加、修改、删除等持久化方法封装其中。

BaseHibernateDAO.java
package com.dao;
import java.io.Serializable;
import javax.xml.rpc.handler.HandlerInfo;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.util.HibernateSessionFactory; public class BaseHibernateDAO {
protected void add(Object object) {
Transaction t = null;
Session session = HibernateSessionFactory.getSession();
//获取session
try{
//开始事务
t = session.beginTransaction();
//持久化事务
session.save(object);
//提交事务
t.commit();
}catch (Exception e) {
if(t!=null){
//事务回滚
t.rollback();
}
e.printStackTrace();
}finally{
HibernateSessionFactory.closeSession();
}
} //加载数据
protected Object get(Class cla, Serializable id) {
Object object = null;
Session session = HibernateSessionFactory.getSession();
try{
object = session.get(cla, id);
}catch (Exception e) {
e.printStackTrace();
}finally{
HibernateSessionFactory.closeSession();
}
return object;
} //删除数据
protected void delete(Object object) {
Transaction t = null;
Session session = HibernateSessionFactory.getSession();
try {
t = session.beginTransaction();
session.delete(object);
t.commit();
} catch (Exception e) {
if(t!=null){
t.rollback();
}
e.printStackTrace();
} finally{
HibernateSessionFactory.closeSession();
}
} //修改数据
protected void update(Object object) {
Transaction t = null;
Session session = HibernateSessionFactory.getSession();
try {
t = session.beginTransaction();
session.update(object);
t.commit();
} catch (Exception e) {
if(t!=null){
t.rollback();
}
e.printStackTrace();
} finally{
HibernateSessionFactory.closeSession();
}
} }
为了使得数据访问层的代码更加清晰,创建一个接口UserDAO.java,并在接口中定义一些方法
package com.dao;
import com.vo.Stu; public interface UserDAO {
public void add(Stu stu);
public void delete(Stu stu);
public Stu get(int id);
public void update(Stu stu);
}
实现类UserDAOImpl类继承BaseHibernateDAO类(操作数据),实现UserDAO接口(具体实现方法)
package com.dao;
import com.vo.Stu;
public class UserDAOImpl extends BaseHibernateDAO implements UserDAO {
@Override
public void add(Stu stu) {
// TODO Auto-generated method stub
super.add(stu);
}
@Override
public void delete(Stu stu) {
// TODO Auto-generated method stub
super.delete(stu);
}
@Override
public Stu get(int id) {
// TODO Auto-generated method stub
return (Stu) super.get(Stu.class, id);
}
@Override
public void update(Stu stu) {
// TODO Auto-generated method stub
super.update(stu);
}
}
创建测试类
package com.test; import java.util.HashSet;
import java.util.Set; import org.hibernate.Session;
import org.hibernate.Transaction; import com.dao.UserDAO;
import com.dao.UserDAOImpl;
import com.util.HibernateSessionFactory;
import com.vo.Stu; public class OpTest {
public static void main(String[] args) {
OpTest test = new OpTest();
//test.testAdd();
//test.testDelete(3);
test.testUpdate(2);
}
//添加数据
public void testAdd() {
Stu stu = new Stu();
stu.setSage(11);
stu.setSname("85693897453");
stu.setSnumber("2016");
UserDAO userDAO = new UserDAOImpl();
userDAO.add(stu);
} //删除数据
public void testDelete(int id) {
UserDAO userDAO = new UserDAOImpl();
Stu stu = userDAO.get(id);
userDAO.delete(stu);
} //修改数据
public void testUpdate(int id) {
UserDAO userDAO = new UserDAOImpl();
Stu stu = userDAO.get(id);
stu.setSname("FUCK U!");
userDAO.update(stu);
}
}
---由于这个项目很赶时间,所以代码请在GitHub查看~
- 做这个“项目”其实是很赶时间的,当时由于写项目的我们组也同是一个ACM队伍的,到处出去参加ACM比赛,最重要的周末在比赛中度过了,所以那半个月为了完成这个项目我们三个人没怎么睡觉。(12.15~1.2)由于是人才招聘网站,整体设计包括个人和企业两个模块,包括数据字典的设计、数据库表的对应关系都是不断推翻重建,甚至在之后还有站内信没来得及实现。
- 我负责的是后端方面,前端由另一个同学负责。
- 设计数据库表 + 构建Hibrnate数据模型和映射关系的配置文件 + 编写dao业务逻辑代码(和数据库交互)
- 后端主程和测试人员,因为只有三个人完全从零到一写项目,不可能专门拿出人来做测试工作。
- 这个项目主要学会了熟练使用Hibernate,用到了SSH
- 这个项目印象最深刻的就是一个Hibernate产生脏数据的问题,询问学长说要用Spring重构才能解决。具体还没有实施...
从零开始做SSH项目(二)的更多相关文章
- 从零开始做SSH项目(一)
1.数据库脚本 用户表 CREATE TABLE `ybl`.`userinfo`( `id` INT NOT NULL AUTO_INCREMENT, `email` ) NOT NULL, `id ...
- 从零开始的SpringBoot项目 ( 二 ) 使用IDEA创建一个SpringBoot项目
工欲善其事 , 必先利其器 . IntelliJ IDEA 2019.3.3 x64的安装与破解 下面详细说明下如何使用idea创建我们的第一个springboot项目: 首先打开idea主界面选择 ...
- 从零开始的SpringBoot项目 ( 五 ) 整合 Swagger 实现在线API文档的功能
综合概述 spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...
- 从零开始的SpringBoot项目 ( 四 ) 整合mybatis
一.创建一个SpringBoot项目 从零开始的SpringBoot项目 ( 二 ) 使用IDEA创建一个SpringBoot项目 二.引入相关依赖 <!--mysql数据库驱动--> & ...
- 从零开始,跟我一起做jblog项目(二)Maven
从零开始,跟我一起做jblog项目(一)引言 从零开始,跟我一起做jblog项目(二)Maven maven是一个项目管理工具,尤其适用于JAVA世界 在jblog的开发前期,还没有系统使用过mave ...
- 跟着视频做的SSH项目总结
一直没做过SSH(Struts2+Spring+Hibernate)的实际项目,只是三个框架学的还熟练,但整合起来使用就不知道了.所以前段时间在网上找了一套SSH实际项目的视频来学习(确切的说是买的. ...
- 从零开始,跟我一起做jblog项目(三)从Maven到Gradle
http://www.cnblogs.com/newflydd/p/4972922.html?utm_source=tuicool&utm_medium=referral ********** ...
- 从零开始,跟我一起做jblog项目(一)引言
从零开始,跟我一起做jblog项目(一)引言 想做一个java版的blog,源自一个很久之前的想法 当时刚学习JAVA的web编程 想买自己的域名,自己的VPS,安装自己的WEB服务 用google ...
- 从零开始学Xamarin.Forms(二) 环境搭建、创建项目
原文:从零开始学Xamarin.Forms(二) 环境搭建.创建项目 一.环境搭建 Windows下环境搭建: 1.下载并安装jdk.Android SDK和NDK,当然还需要 VS2013 ...
随机推荐
- Robotframework Web自动化实战课程
想学习的小伙伴,现在可以报名了!!!7月1日正式开课本期课程主要是web自动化为主,根据平时工作经验整理的一套流程以及使用过程中常见的问题总结.学完后能很快上手,即学即用,课后遇到问题在线解答,远程协 ...
- [LeetCode] 17. Letter Combinations of a Phone Number ☆☆
Given a digit string, return all possible letter combinations that the number could represent. A map ...
- 用python爬校花网
import requests import re import hashlib,time def get_index(url): response=requests.get(url) if resp ...
- MyBatis框架的使用及源码分析(十) CacheExecutor,SimpleExecutor,BatchExecutor ,ReuseExecutor
Executor分成两大类,一类是CacheExecutor,另一类是普通Executor. 普通类又分为: ExecutorType.SIMPLE: 这个执行器类型不做特殊的事情.它为每个语句的执行 ...
- 撩下Cookie和Session
Cookie Cookie其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读 ...
- 【HMOI】小C的填数游戏 DP+线段树维护
[题目描述] 一个长为n的序列,每个元素有一个a[i],b[i],a[i]为0||1,每个点和他相邻的两个点分别有两条边,权值为cost1[i],cost2[i],对于每个区间l,r,我们可以给每一个 ...
- aspnet_regiis.exe -i 执行报错
IIS刚部署时出现问题 处理程序“svc-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler” 按照网上的步骤,使用管理员打开CMD 开始->所有程 ...
- docker 环境
1.docker 升级 步骤: docker -v service docker stop yum -y update docker.io
- promise 如何知道所有的回调都执行完了?
var fs = require('fs'); /** * @return {object} Promise */ function doThing(fileName) { // ... // con ...
- 【转】CVE-2010-4258 漏洞分析
一. 漏洞简介 CVE-2010-4258这个漏洞很有意思,主要思路是如果通过clone函数去创建进程,并且带有CLONE_CHILD_CLEARTID标志,那么进程在退出的时候,可以造成内核任意地址 ...