10 05Hibernate之联合Struts 2.x开发

    技术2022-07-15  66

    文章目录

    1 开发业务层2 开发控制层及显示层

    Hibernate是属于数据层的工具类,所以在所有的开发之中,Hibernate只能够在数据层上编写代码。

    1 开发业务层

    1、建立一个SHProject; 2、数据库脚本如下:

    -- 删除数据库 DROP DATABASE IF EXISTS hedb; -- 创建数据库 CREATE DATABASE hedb; -- 使用数据库 USE hedb; -- 删除数据表 DROP TABLE IF EXISTS `member`; -- 创建数据表 CREATE TABLE `member`( mid VARCHAR(50), mname VARCHAR(50), mage INT, msalary DOUBLE, mbirthday DATE, mnote TEXT, CONSTRAINT pk_mid PRIMARY KEY(mid) );

    3、为项目添加Hibernate支持与Struts 2.x支持; 4、添加完Hibernate项目之后,考虑设置几个属性;

    <property name="show_sql">true</property> <property name="format_sql">true</property>

    5、本次使用Annotation的配置方式;

    <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <init-param> <param-name>actionPages</param-name> <param-value>org.lks.action</param-value> </init-param> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>

    6、要生成POJO类以及对应的Member.hbm.xml文件; (1)现在相当于免去了DatabaseConnection(数据库连接类)、以及VO类的编写。

    7、Hibernate就是数据层的操作,那么依然要定义IMemberDAO接口;

    package org.lks.dao; import org.lks.pojo.Member; public interface IMemberDAO { public boolean doCreate(Member vo) throws Exception; } package org.lks.dao.impl; import org.lks.dao.IMemberDAO; import org.lks.dbc.HibernateSessionFactory; import org.lks.pojo.Member; public class MemberDAOImpl implements IMemberDAO { @Override public boolean doCreate(Member vo) throws Exception { //如果保存的时候成功会返回当前的数据ID,如果不为空表示增加成功 return HibernateSessionFactory.getSession().save(vo) != null; } }

    8、要创建DAOFactory工厂类

    package org.lks.factory; import org.lks.dao.IMemberDAO; import org.lks.dao.impl.MemberDAOImpl; public class DAOFactory { private DAOFactory(){} public static IMemberDAO getIMemberDAOInstance(){ return new MemberDAOImpl(); } }

    由于存在由HibernateSessionFactory类,所以这块的连接对象就没有必要传递了。

    9、定义业务层接口——IMemberService;

    package org.lks.service; import org.lks.pojo.Member; public interface IMemberService { public boolean insert(Member vo) throws Exception; } package org.lks.service.impl; import org.lks.dbc.HibernateSessionFactory; import org.lks.factory.DAOFactory; import org.lks.pojo.Member; import org.lks.service.IMemberService; public class MemberServiceImpl implements IMemberService{ @Override public boolean insert(Member vo) throws Exception { try{ boolean flag = DAOFactory.getIMemberDAOInstance().doCreate(vo); HibernateSessionFactory.getSession().beginTransaction().commit(); //事务提交 return flag; }catch(Exception e){ throw e; }finally{ HibernateSessionFactory.closeSession(); } } }

    所有复杂的引用关系全部忽略了。

    10、定义业务层工厂类

    package org.lks.factory; import org.lks.service.IMemberService; import org.lks.service.impl.MemberServiceImpl; public class ServiceFactory { private ServiceFactory(){} public static IMemberService getIMemberServiceInstance(){ return new MemberServiceImpl(); } }

    与直接使用JDBC相比,此时的代码更加的简化。

    2 开发控制层及显示层

    1、定义一个MemberAction,同时本处使用分发处理;

    package ork.lks.action; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.lks.factory.ServiceFactory; import org.lks.pojo.Member; import com.opensymphony.xwork2.ActionSupport; @SuppressWarnings("serial") @Namespace("/") @Action("MemberAction") public class MemberAction extends ActionSupport { private Member member = new Member(); public Member getMember() { return member; } public void insert(){ try { System.out.println(ServiceFactory.getIMemberServiceInstance().insert(this.member)); } catch (Exception e) { e.printStackTrace(); } } }

    2、定义member_insert.jsp页面

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; String insertUrl = basePath + "MemberAction!insert.action" ; %> <html> <head> <base href="<%=basePath%>"> <title>Struts 2.x + Hibernate</title> </head> <form action="<%=insertUrl%>" method="post"> ID: <input type="text" name="member.mid" value="31713011021"><br> Name: <input type="text" name="member.mname" value="hhy"><br> Age: <input type="text" name="member.mage" value="20"><br> Salary: <input type="text" name="member.msalary" value="2000.0"><br> Birthday: <input type="text" name="member.mbirthday" value="1999-08-21"><br> Note: <input type="text" name="member.mnote" value="big fool!"><br> <input type="submit" value="add"> <input type="reset" value="reset"> </form> <body> </body> </html>

    整个的操作变化,Strusts 2.x基本上不关心数据层。

    使用了Hibernate之后,整个的MVC设计模式上,数据层的代码开发一下子减少了许多。

    Processed: 0.020, SQL: 9