使用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. Java中String的hash函数分析

    转载自:http://blog.csdn.net/hengyunabc/article/details/7198533 JDK6的源码: [java] view plaincopy /** * Ret ...

  2. jQuery Lightbox效果插件Boxer

    演示:http://www.jq22.com/yanshi1139 下载:链接: https://pan.baidu.com/s/1o8zaV2q 密码: 2ccy Boxer 是一款基于 jQuer ...

  3. SQL语句中的单引号处理以及模糊查询

    为了防止程序SQL语句错误以及SQL注入,单引号必须经过处理.有2种办法: 1.使用参数,比如SELECT * FROM yourTable WHERE name = @name; 在C#中使用Sql ...

  4. 压缩LDF档

    --压缩LDF档 USE VoucherServer; GO -- Truncate the log by changing the database recovery model to SIMPLE ...

  5. MVC 从控制器将数据对象赋值给前端JS对象

    @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport&quo ...

  6. iOS一个项目开始创建, 部署到git服务器

    在做iOS开发时, 最开始可能你的经理部署项目, 所以你不会插手, 只是直接从git上clone下来然后就开始撸码, 如果有一天你做经理了, 你怎么去部署一个项目呢, 下面我来过一遍流程 1. 首先需 ...

  7. web前端教程:用 CSS 实现三角形与平行四边形

    最近在逛某个技术网站的时候,感觉文章关键词上的样式好酷炫啊,分页的样式.来张截图: 你在首页的底部也可以看到这样一个分页栏:是不是看上去还不错?下面就来看看这是如何实现的吧~ 第一种方法:利用bord ...

  8. ACE_Reactor类

    .ACE反应器框架简介 反应器(Reactor):用于事件多路分离和分派的体系结构模式 对一个文件描述符指定的文件或设备的操作, 有两种工作方式: 阻塞与非阻塞. 在设计服务端程序时,如果采用阻塞模式 ...

  9. JavaScript中常用的BOM属性

    window 窗口 window.open():打开窗口.返回一个指向新窗口的引用. window.close():关闭窗口. window.resizeTo():调整窗口尺寸到指定值 window. ...

  10. io流中比较特殊的流-java

    1.序列流(SequenceInputStream)整合个多个文件 A SequenceInputStream表示其他输入流的逻辑级联. 它从一个有序的输入流集合开始,从第一个读取到文件的结尾,然后从 ...