前面我们学会了如何封装表单数据、如何在页面中获取表单数据、以及如何通过重定向完成一些特定的操作、同时前段时间我也复习完了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框架也会得心应手。