用struts和hibernate结合MVC层实例

1、倒包hibernate11个包+sturts2 13个包

2、创建web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Test27</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

3、创建struts

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <!-- 设置过滤的扩展名 -->
    <constant name="struts.action.extension" value="do,action,,"></constant>
    <!-- 定义包 -->
    <package name="index" extends="struts-default">
    <action name="addUser">
    <result>/WEB-INF/pages/addUser.jsp</result>
    </action>
    <!-- 保存User -->
    <action name="saveUser" class="com.hanqi.action.UserAction" method="saveUser">
    
    <result name="fail">/WEB-INF/pages/fail.jsp</result>
    <result >/WEB-INF/pages/success.jsp</result>
    </action>
    <!-- 查询用户 -->
    <action name="selectUser" class="com.hanqi.action.UserAction" method="selectUser">
    
    <result name="fail">/WEB-INF/pages/fail.jsp</result>
    <result >/WEB-INF/pages/selectUser.jsp</result>
    
    </action>
    <!-- 删除用户 -->
    <action name="deleteUser" class="com.hanqi.action.UserAction" method="deleteUser">
    <result name="fail">/WEB-INF/pages/fail.jsp</result>
    <result type="redirectAction">selectUser</result>
    
    
    </action>
    <!-- 修改用户 -->
    
    <action name="EditUser">
    <result>/WEB-INF/pages/EditUser.jsp</result>
    </action>
    <action name="updateUser" class="com.hanqi.action.UserAction" method="updateUser">
    <result name="fail">/WEB-INF/pages/fail.jsp</result>
    <result type="redirectAction">selectUser</result>
    </action>
    
    
    
    </package>
    
    
    
    
</struts>

4、创建cfg.xml文件链接数据库

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="hibernate.connection.password">123</property>
        <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
        <property name="hibernate.connection.username">test0816</property>
        <property name="hibernate.default_schema">TEST0816</property>
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
         <property name="hibernate.show_sql">true</property>
  <property name="hibernate.format_sql">true</property>
  <!-- 自动建表方式 -->
  <property name="hibernate.hbm2ddl.auto">update</property>
  <!-- 映射文件 -->
  <mapping resource="com/hanqi/entity/T_User.hbm.xml"/>
  
    </session-factory>
</hibernate-configuration>

5、创建登陆界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="addUser">添加用户</a>
<br><br>
<a href="selectUser">查询用户列表</a>
</body>
</html>

6、按照MVC思想创建包和类

用struts和hibernate结合MVC层实例

用struts和hibernate结合MVC层实例

6.1创建实体类和对应的映射文件(可用反向工程)

package com.hanqi.entity;
//持久化类
//不要使用final修饰
import java.util.Date;

public class T_User {
 
    private Integer user_ID;
    private String name;
    private Date birthday;
    private double money;
    private String password;
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Integer getuser_ID() {
        return user_ID;
    }
    public void setuser_ID(Integer user_ID) {
        this.user_ID = user_ID;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public double getMoney() {
        return money;
    }
    public void setMoney(double money) {
        this.money = money;
    }
    public T_User(Integer user_ID, String name, Date birthday, double money) {
        super();
        this.user_ID = user_ID;
        this.name = name;
        this.birthday = birthday;
        this.money = money;
    }
    
    public T_User(Integer user_ID, String name) {
        super();
        this.user_ID = user_ID;
        this.name = name;
    }
    //必须提供无参的构造方法
    //需要用到反射
    public T_User() {
        super();
    }
    @Override
    public String toString() {
        return "User [user_ID=" + user_ID + ", name=" + name + ", birthday=" + birthday + ", money=" + money
                + ", password=" + password + "]";
    }
    
    
    
}

对应的映射文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2016-11-16 14:30:38 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="com.hanqi.entity.T_User" table="T_USER">
        <id name="user_ID" type="java.lang.Integer">
            <column name="USER_ID" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" />
        </property>
        <property name="birthday" type="java.util.Date">
            <column name="BIRTHDAY" />
        </property>
        <property name="money" type="double">
            <column name="MONEY" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="PASSWORD" />
        </property>
    </class>
</hibernate-mapping>

6.2创建action类

package com.hanqi.action;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.hanqi.entity.T_User;
import com.hanqi.service.UserService;
import com.opensymphony.xwork2.ActionContext;

public class UserAction {

    //域模型方式
    private T_User user;
    private int userid;
    private String name;
    private String password;
    private Date birthday;
    private double money;

    public int getUserid() {
        return userid;
    }


    public void setUserid(int userid) {
        this.userid = userid;
    }


    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


    public String getPassword() {
        return password;
    }


    public void setPassword(String password) {
        this.password = password;
    }


    public Date getBirthday() {
        return birthday;
    }


    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }


    public double getMoney() {
        return money;
    }


    public void setMoney(double money) {
        this.money = money;
    }


    public T_User getUser() {
        return user;
    }


    public void setUser(T_User user) {
        this.user = user;
    }
    //处理保存User的方法
    public String saveUser()
    {
        String rtn="fail";
        try{
        //调用Service层(模型层,业务逻辑层)
            T_User u1=new UserService().add(user);
            //使用request转发到下一个页面上去
            ActionContext ac=ActionContext.getContext();
            Map<String, Object>mo=(Map<String, Object>)ac.get("request");
            mo.put("user", u1);
            rtn="success";
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        
        
        return rtn;
        
        
    }
    //查询
    public String selectUser()
    {
        String rtn="fail";
        try{
            //调用查询的方法
            List<T_User> lu=new UserService().getAll();
            //得到原生的request
            HttpServletRequest hsr=ServletActionContext.getRequest();
            hsr.setAttribute("userlist", lu);
            rtn="success";
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        return rtn;
    }
    //删除
    public String deleteUser()
    {
        String rtn="fail";
        try{
            //获取userID
            //得到原生的request
            HttpServletRequest hsr=ServletActionContext.getRequest();
            
            String uid=hsr.getParameter("userID");
            
            //执行删除
            new UserService().delete(Integer.parseInt(uid));
            
            rtn="success";
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
                
        return rtn;
    }
    //执行修改
    public String updateUser()
    {
        String rtn="fail";
        
        try{
            T_User user=new T_User();
            user.setuser_ID(userid);
            user.setPassword(password);
            user.setName(name);
            user.setBirthday(birthday);
            user.setMoney(money);
            new UserService().update(user);        
            rtn="success";
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        
        
        
        return rtn;
    }
    
    
}

6.3 创建service层

package com.hanqi.service;

import java.util.List;

import com.hanqi.DAO.UserDAO;
import com.hanqi.entity.T_User;

public class UserService {

    //添加user的方法
    public T_User add(T_User user)
    {
        return new UserDAO().insert(user);
        
    }
    //全表查询
    public List<T_User> getAll()
    {
        return new UserDAO().getAll();
    }
    //删除
    public void delete(int userID)
    {
        new UserDAO().delete(userID);
    }
    //单条查询
    public T_User getUser(int userID)
    {
        return new UserDAO().getUser(userID);
    }
    //执行修改
    public void update(T_User user)
    {
        new UserDAO().updateUser(user);
    }
    
}

6.4 创建DAO层

package com.hanqi.DAO;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

import com.hanqi.entity.T_User;

public class UserDAO {
    
    private Configuration cfg=null;
    private ServiceRegistry sr=null;
    
    private SessionFactory sf=null;
    
    private Session se=null;
    
    private Transaction ts=null;
    
    public UserDAO()
    {
        cfg=new Configuration().configure();
        
         sr=new StandardServiceRegistryBuilder()
                .applySettings(cfg.getProperties()).build();
        
    }
    private void init()
    {
        sf=cfg.buildSessionFactory(sr);
        se=sf.openSession();
        ts=se.beginTransaction();
    }
    private void destory()
    {
        ts.commit();
        se.close();
        sf.close();
    }
    //保存 user
    public T_User insert(T_User user)
    {
        
        init();
        se.save(user);
        
        destory();
        return user;
        
    }
    //查询列表
    public List<T_User> getAll()
    {
        init();
        List<T_User> rtn=new ArrayList<>();
        rtn=se.createQuery("from T_User").list();
        destory();
        return rtn;
    }
    //删除
    public void delete(int userID)
    {
        init();
        //获取对象
        T_User u=(T_User)se.get(T_User.class, userID);
        
        se.delete(u);
        destory();
    }
    //单条查询
    public T_User getUser(int userID)
    {
        init();
        T_User rtn=null;
        rtn=(T_User)se.get(T_User.class, userID);
        destory();
        return rtn;
    }
    //修改单条查询内容
    public T_User updateUser(T_User user)
    {
        init();
        T_User rtn=null;
        rtn=(T_User)se.get(T_User.class, user.getuser_ID());
        rtn.setuser_ID(user.getuser_ID());
        rtn.setName(user.getName());
        rtn.setPassword(user.getPassword());
        rtn.setBirthday(user.getBirthday());
        rtn.setMoney(user.getMoney());
        destory();
        return rtn;
    }
    
    

}

7、跳转页面

7.1添加用户页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
添加用户
<br><br>
<form action="saveUser" method="post">
用户名:<input type="text" name="user.name"/>
<br>
密码:<input type="password" name="user.password"/>
<br>
生日:<input type="text" name="user.birthday"/>
<br>
薪酬:<input type="text" name="user.money"/>
<br>
<input type="submit" value="保存"/>

</form>

</body>
</html>

7.2查询页面

<%@page import="com.hanqi.entity.T_User"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

<%
List<T_User> lu=(List<T_User>)request.getAttribute("userlist");
for(T_User u:lu)
{
    out.print(u + "【<a href='EditUser?userID="+u.getuser_ID()+"'>修改</a>】【<a href='deleteUser?userID="+u.getuser_ID()+"'>删除</a>】 <br>");    
}


%>

</body>
</html>

7.3 修改用户界面

<%@page import="com.hanqi.entity.T_User"%>
<%@page import="com.hanqi.service.UserService"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<% 
// 接收参数
String userID = request.getParameter("userID");

 T_User us=null;

if (userID == null || 
userID.trim().equals(""))
{
    response.getWriter().print("请正确访问");

}
else
{
     us=new UserService().getUser(Integer.parseInt(userID));
    

}
%>
编辑银行卡信息<br><br>

<form action="updateUser" method="post">
用户id号:<input type="text" name="userid" value="<%=us.getuser_ID() %>"readonly><br>

用户名:<input type="text" name="name" value="<%=us.getName() %>"/>
<br>
密码:<input type="password" name="password" value="<%=us.getPassword() %>"/>
<br>
生日:<input type="text" name="birthday" value="<%=us.getBirthday() %>"/>
<br>
薪酬:<input type="text" name="money" value="<%=us.getMoney() %>"/>
<br>
<input type="submit" value="提交"/>

</form>
</body>
</html>

7.4 操作失败的跳转页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
操作失败
</body>
</html>

7.5 保存成功的跳转页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
操作成功
User=${user }

</body>
</html>