JavaWeb框架复习笔记-Struts2(与hibernate共同实现添加操作)

使用Hibernate进行CRUD操作
本文详细介绍了一种基于Hibernate框架的增删查改(CRUD)操作实现过程,包括实体类定义、映射文件生成、核心配置文件编写、工具类测试、DAO层接口及其实现类的设计等内容。

前面我们学会了如何封装表单数据、如何在页面中获取表单数据、以及如何通过重定向完成一些特定的操作、同时前段时间我也复习完了hibernate,所以这次就与hibernate来共同完成一个简单的操作逻辑:把页面数据保存到数据库,可以从数据库中查询数据然后在页面展示。

下面是具体流程

一:新建业务实体类

这里我们就假设保存一个用户的基本信息吧
在这里插入图片描述

二:生成相应的映射文件

我那些红色的不是报错,是idea工具的提示而已
在这里插入图片描述

三:编写Hibernate核心配置文件

在这里插入图片描述

四:编写Hibernate工具类测试数据库是否创建成功

就是把这个工具类运行一下,然后去数据看有没有表生成就行了(可以用单元测试,也可以写一个main方法,只要能生成sessionFactory就行了)
在这里插入图片描述

五:编写Dao接口规定数据操作方法

在这里插入图片描述

六:生成Dao接口的实现类

保存方法用的是session的save方法,查询用的是hql

import com.lfm.entity.User;
import com.lfm.utils.HibernateUtils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.query.Query;
import java.io.Serializable;
import java.util.List;

/**
 * ClassName:UserDaoImpl
 * Author:LFM
 * Date:2019/7/21 0:11
 **/
public class UserDaoImpl implements UserDao{
    //使用hibernate实现相应的功能
    //添加方法
    @Override
    public void add(User user) {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();
            //生成id值,返回id值
            Serializable id = session.save(user);

            tx.commit();
        }catch (Exception e){
            tx.rollback();
            e.printStackTrace();
        }finally {
            session.close();
        }
    }
    //查询所有方法
    @Override
    public List<User> findAll() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();
            //查询所有记录
            Query query = session.createQuery("from User ");
            List<User> list = query.list();
            //返回这个记录
            tx.commit();
            return list;
        }catch (Exception e){
            tx.rollback();
            e.printStackTrace();
        }finally {
            session.close();
        }
        return null;
    }
}

七:生成相应的Service类

在这里插入图片描述

之所以写dao、daoimpl、service这三层结构是为了以后代码的维护,为什么要用Service类?是让表示层不依赖于业务层的具体实现。为什么要用DAO接口?是让业务层不依赖于持久层的具体实现(举个例子,用DAO接口,那么持久层用Hibernate,还是用MyBatis,还是 JDBC,随时可以替换,不用修改业务层Service类的代码。)

八:编写相应的Action

因为这里只有一个对象,所以使用模型驱动封装
在这里插入图片描述

九:生成相应的JSP页面

添加页面
在这里插入图片描述
结果页面(列表展示)
在这里插入图片描述

十:在Struts核心配置文件中配置Action和JSP页面

在这里插入图片描述

十一:如果不是工具直接生成的web项目,要记得去配置web.xml文件(配置struts过滤器)

在这里插入图片描述

十二:配置服务器(tomcat8.35)

在这里插入图片描述

十三:运行测试结果

之所以有很多数据是因为我提前测试过
在这里插入图片描述
在这里插入图片描述
当我们点击返回添加新用户的时候就会重定向到添加页面,此时再添加数据将会非常快显示数据库内容(第一次很慢),这是因为缓存问题

十四:查看数据库内容

在这里插入图片描述

通过上面流程我们可以发现,Action不做具体的业务逻辑操作,只是起到一个控制转发的效果,充当了控制器的作用,然后表现层和业务逻辑层我们通过service层实现解耦,然后业务逻辑层和持久化层我们通过dao和它的实现类实现解耦,这样的分层方式为以后的Spring管理铺垫基础,以后使用ssm框架也会得心应手。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值