使用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
④项目描述中,最好可以体现自己的综合素质;比如你是如何协调项目组成员协同开发的或者在遇到某一个棘手的问题的时候你是如何解决的?又或者说你在这个项目用了什么技术实现了什么功能?比如:用redis做缓存提高访问速度和并发量、使用消息队列削峰和降流等等。
  • 这个项目印象最深刻的就是一个Hibernate产生脏数据的问题,询问学长说要用Spring重构才能解决。具体还没有实施...

从零开始做SSH项目(二)的更多相关文章

  1. 从零开始做SSH项目(一)

    1.数据库脚本 用户表 CREATE TABLE `ybl`.`userinfo`( `id` INT NOT NULL AUTO_INCREMENT, `email` ) NOT NULL, `id ...

  2. 从零开始的SpringBoot项目 ( 二 ) 使用IDEA创建一个SpringBoot项目

    工欲善其事 , 必先利其器 . IntelliJ IDEA 2019.3.3 x64的安装与破解 下面详细说明下如何使用idea创建我们的第一个springboot项目: 首先打开idea主界面选择 ...

  3. 从零开始的SpringBoot项目 ( 五 ) 整合 Swagger 实现在线API文档的功能

    综合概述 spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...

  4. 从零开始的SpringBoot项目 ( 四 ) 整合mybatis

    一.创建一个SpringBoot项目 从零开始的SpringBoot项目 ( 二 ) 使用IDEA创建一个SpringBoot项目 二.引入相关依赖 <!--mysql数据库驱动--> & ...

  5. 从零开始,跟我一起做jblog项目(二)Maven

    从零开始,跟我一起做jblog项目(一)引言 从零开始,跟我一起做jblog项目(二)Maven maven是一个项目管理工具,尤其适用于JAVA世界 在jblog的开发前期,还没有系统使用过mave ...

  6. 跟着视频做的SSH项目总结

    一直没做过SSH(Struts2+Spring+Hibernate)的实际项目,只是三个框架学的还熟练,但整合起来使用就不知道了.所以前段时间在网上找了一套SSH实际项目的视频来学习(确切的说是买的. ...

  7. 从零开始,跟我一起做jblog项目(三)从Maven到Gradle

    http://www.cnblogs.com/newflydd/p/4972922.html?utm_source=tuicool&utm_medium=referral ********** ...

  8. 从零开始,跟我一起做jblog项目(一)引言

    从零开始,跟我一起做jblog项目(一)引言 想做一个java版的blog,源自一个很久之前的想法 当时刚学习JAVA的web编程 想买自己的域名,自己的VPS,安装自己的WEB服务 用google ...

  9. 从零开始学Xamarin.Forms(二) 环境搭建、创建项目

    原文:从零开始学Xamarin.Forms(二) 环境搭建.创建项目 一.环境搭建 Windows下环境搭建:     1.下载并安装jdk.Android SDK和NDK,当然还需要 VS2013 ...

随机推荐

  1. 二叉树系列 - 二叉树里的最长路径 例 [LeetCode] Binary Tree Maximum Path Sum

    题目: Binary Tree Maximum Path Sum Given a binary tree, find the maximum path sum. The path may start ...

  2. [SCOI2009]生日礼物

    https://www.luogu.org/problem/show?pid=2564 题目描述 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x ...

  3. vijos 1464 积木游戏 DP

    描述 积木游戏 SERCOI 最近设计了一种积木游戏.每个游戏者有N块编号依次为1 ,2,…,N的长方体积木.对于每块积木,它的三条不同的边分别称为"a边"."b边&qu ...

  4. dp优化-四边形不等式(模板题:合并石子)

    学习博客:https://blog.csdn.net/noiau/article/details/72514812 看了好久,这里整理一下证明 方程形式:dp(i,j)=min(dp(i,k)+dp( ...

  5. 【bzoj1572-工作安排】贪心

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1572 题意: 约翰接到了N份工作,每份工作恰好占用一天的时间.约翰从第一天开始工作,他可以任意 ...

  6. bzoj 2730: [HNOI2012]矿场搭建——tarjan求点双

    Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一 ...

  7. HDU 2059 龟兔赛跑 (dp)

    题目链接 Problem Description 据说在很久很久以前,可怜的兔子经历了人生中最大的打击--赛跑输给乌龟后,心中郁闷,发誓要报仇雪恨,于是躲进了杭州下沙某农业园卧薪尝胆潜心修炼,终于练成 ...

  8. MongoDB 数据库(2)

    db.collectionName 集合对象 获取集合对象 db.getCollection('collection_name') e.g. db.getCollection("class0 ...

  9. bzoj 1034 贪心

    首先如果我们想取得分最高的话,肯定尽量赢,实在赢不了的话就耗掉对方最高的,那么就有了贪心策略,先排序,我方最弱的马和敌方最弱的相比,高的话赢掉,否则耗掉敌方最高的马. 对于一场比赛,总分是一定的,所以 ...

  10. Java线程总结(一)

    首先,先贴上一个简单的线程实例: public class MyThread extends Thread{ @Override public void run(){ try { for (int i ...