ssh初步整合(一)——实现简单的单表CRUD

博主基于前面对spring、struts2、hibernate的简单学习,进行ssh整合实现单表的CRUD,此版本中spring未对事物进行控制且没有采用注解的方式。
项目结构图:
ssh初步整合(一)——实现简单的单表CRUD_第1张图片
开发环境:win7、eclipse、Oracle
框架:spring 2.5、hibernate3.6、struts2.3

一、整合spring

1.导入jar包:
ssh初步整合(一)——实现简单的单表CRUD_第2张图片
2.添加spring配置文件applicationContext.xml
在eclipse中需要手动在src下创建:


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">
           <bean id="..." class="....">
           <property name="...." value="....">property>
           bean>
beans>

我们需要在…的地方进行配置。

二、整合hibernate

1.导入jar包,整合数据库连接:
这里写图片描述
lib下的required中的jar包
ssh初步整合(一)——实现简单的单表CRUD_第3张图片
orcale包
这里写图片描述
日志包及连接池包
这里写图片描述
2.在applicationContext.xml中配置dateSource设置数据库连接字符串、用户名、密码、驱动

id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
           <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver">property>
           <property name="username" value="scott">property>
           <property name="password" value="tiger">property>
           <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl">property>
           

2.applicationContext.xml中得到sessionFactory:

<bean id="sessionFactroy" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
             
            <property name="dataSource" ref="dataSource">property>
            <property name="hibernateProperties">
             
            <props>
            <prop key="hibernate.show_sql">trueprop>
            props>
            property>
            <property name="mappingResources">
            
            <list>
            
            <value>com/it/ssh/entity/Person.hbm.xmlvalue>
            list>
            property>
            bean>

引用第一步设置好的datasource及设置sql_show、获取获取sessionfactory,并将实体类配置文件的引入。
注意:这里需要创建Person实体、数据库创建对应表、以及Person.hbm.xml文件,共有三个属性:

public class Person {

    private int pid;
    private String pname;
    private String pwd;
    //set、get及构造省略

Person.hbm.xml:



        
<hibernate-mapping package="com.it.ssh.entity">
    
    <class name="Person" table="person">
        
        <id name="pid" type="int" column="pid">
            
            <generator class="sequence">
            
                <param name="sequence">seq_personparam>
            generator>
        id>
        <property name="pname" type="string"  />
        <property name="pwd" type="string">property>  
    class>
hibernate-mapping>

3.建立dao层并将 sessionfactory注入:
PersonDao.java

package com.it.ssh.dao;

import java.util.List;

import com.it.ssh.entity.Person;

public interface PersonDao {

    public boolean login(Person person);
    public boolean add(Person person);
    public boolean update(Person person);
    public boolean delete(Person person);
    public Person queryById(Person person);
    public List queryAll();
}

PersonDaoImpl.java

package com.it.ssh.dao.impl;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import com.it.ssh.dao.PersonDao;
import com.it.ssh.entity.Person;

public class PersonDaoImpl implements PersonDao {
    //此时采用的就是设置注入法
    private SessionFactory sessionFactory;
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    @Override
    public boolean login(Person person) {
        String hql = "from Person where pid = ? and pwd = ?";
        Session session = sessionFactory.openSession();
        Query q = session.createQuery(hql);
        q.setInteger(0, person.getPid());
        q.setString(1, person.getPwd());
        Object obj = q.uniqueResult();
        boolean flag = false;
        if(obj!=null){
            flag = true;
        }
        session.close();
        return flag;
    }

    @Override
    public boolean add(Person person) {
         Session session = sessionFactory.openSession();
            //开启事务
            Transaction tran = session.beginTransaction();
            session.save(person);
            //提交事物
            tran.commit();
            //关闭session
            session.close();
            return true;
    }

    @Override
    public boolean update(Person person) {

       Session session = sessionFactory.openSession();

        Transaction tran = session.beginTransaction();
        session.update(person);;

        tran.commit();
        session.close();
        return true;
    }

    @Override
    public boolean delete(Person person) {
        Session session = sessionFactory.openSession();

        Transaction tran = session.beginTransaction();
        session.delete(person);

        tran.commit();
        session.close();
        return true;
    }

    @Override
    public Person queryById(Person p) {

        Session session = sessionFactory.openSession();
        Transaction tran = session.beginTransaction();
        Person person = (Person) session.get(Person.class, p.getPid());

        tran.commit();
        session.close();
        return person;
    }

    @Override
    public List queryAll() {

        String hql = "from Person";
        Session session = sessionFactory.openSession();
        Transaction tran = session.beginTransaction();
        Query q = session.createQuery(hql);

        List list = q.list();
        tran.commit();
        return list;
    }

}

此时需将dao层配置在applicationContext.xml:

 id="personDao" class="com.it.ssh.dao.impl.PersonDaoImpl">
            <property name="sessionFactory" ref="sessionFactroy">property>
            

4.建立service层并进行配置:
PersonService.java

package com.it.ssh.service;

import java.util.List;

import com.it.ssh.entity.Person;

public interface PersonService {

    public boolean login(Person person);
    public boolean add(Person person);
    public boolean update(Person person);
    public boolean delete(Person person);
    public Person queryById(Person person);
    public List queryAll();
}

PersonServiceImpl.java

package com.it.ssh.service.impl;

import java.util.List;

import com.it.ssh.dao.PersonDao;
import com.it.ssh.entity.Person;
import com.it.ssh.service.PersonService;

public class PersonServiceImpl implements PersonService {

    private PersonDao personDao;

    public void setPersonDao(PersonDao personDao) {
        this.personDao = personDao;
    }


    public boolean login(Person person) {
        return personDao.login(person);
    }


    public boolean add(Person person) {
        return personDao.add(person);
    }


    public boolean update(Person person) {
        return personDao.update(person);
    }


    public boolean delete(Person person) {
        return personDao.delete(person);
    }


    public Person queryById(Person person) {
        return personDao.queryById(person);
    }


    public List queryAll() {
        return personDao.queryAll();
    }

}
此时需将Service层配置在applicationContext.xml:
     id="personService" class="com.it.ssh.service.impl.PersonServiceImpl">
            <property name="personDao" ref="personDao">property>
    

三、整合struts2

1.导入jar包
ssh初步整合(一)——实现简单的单表CRUD_第4张图片
2.将struts过滤器配置在web.xml

  <filter>
        <filter-name>struts2filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterfilter-class>
    filter>

    <filter-mapping>
        <filter-name>struts2filter-name>
        /*
    filter-mapping>

3.action类设置 模型驱动
PersonAction.java

package com.it.ssh.action;

import java.util.List;
import com.it.ssh.entity.Person;
import com.it.ssh.service.PersonService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class PersonAction extends ActionSupport implements ModelDriven {
    //模型驱动
    Person person = new Person();
    //spring设值注入
    private PersonService personService;
    //域模型
    private Person p;

    public Person getP() {
        return p;
    }


    public void setP(Person p) {
        this.p = p;
    }
    //域模型
    private List list;

    public List getList() {
        return list;
    }


    public void setList(List list) {
        this.list = list;
    }


    public void setPersonService(PersonService personService) {
        this.personService = personService;
    }

    //模型驱动方法
    @Override
    public Person getModel() {
        // TODO Auto-generated method stub
        return person;
    }


    public String login() throws Exception {
        boolean flag = personService.login(person);
        String path = "input";
        if(flag){
            show();
            path = "success";
        }
        return path;
    }
    public String show() {
        list = personService.queryAll();
        return "success";
    }
    public String del() {
        boolean result = personService.delete(person);
        String path = "false";
        if(result) {
            show();
            path = "success";
        }
        return path;
    }
    public String showId() {

    p = personService.queryById(person);

    String path = "input";
    if (person!=null) {
        path = "findsuccess";
    }
    return path;
    }
    public String upd() {

        boolean flag = personService.update(p);
        String path = "input";
        if (flag) {
            show();
            path = "success";
        }
        return path;
    }
    public String add() {

                boolean flag = personService.add(person);
                show();
                return "success";

    }
}

4struts.xml配置

name="personAction" class="personAction">
            <result>show.jspresult>
            <result name="findsuccess">upUser.jspresult>
            <result name="input" type="redirect">login.jspresult>
        

5.将action注入applicationContext.xml,引用spring设置好的dao层

  name="personAction" class="com.it.ssh.action.PersonAction">
            <property name="personService" ref="personService">property>
            

此时应注意将struts中action的class与applicationContext中bean的name一致,这样在程序启动时,才会将personService注入personAction,否则personService为空值;
6.将applicationContext.xml配置到web.xml,使得在服务器启动时自动加载applicationContext.xml

param>
    <param-name>contextConfigLocationparam-name>
    <param-value>classpath:applicationContext.xmlparam-value>
  param>

还需加入spring监听器

<listener>
    <listener-class>
    org.springframework.web.context.ContextLoaderListener
    listener-class>
  listener>

四、jsp页面

这里只给出body中内容,头部除需要引入<%@ taglib prefix="s" uri="/struts-tags" %>外没有需要修改的的地方。
login.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>   


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title heretitle>
head>
<body>
<s:form action="personAction!login" method="post">
    <s:textfield name="pid" label="帐号">s:textfield>
    <s:password name="pwd" label="密码">s:password>
    <tr>
        <td colspan="2">
            <s:submit value="提交" theme="simple">s:submit>
            <s:reset value="重置" theme="simple">s:reset>
        td>
    tr>
s:form>

body>
html>

show.jsp

<center>
<a href="addUser.jsp" >添加用户a>
<a href="personAction!show" >显示用户a>

<table border="1">
<tr>
<th>pidth>
<th>pnameth>
<th>pwdth>
<th colspan="2">操作th>
tr>
<s:iterator value="list" status="st" var="user" >
<tr>
        <td><s:property value="#user.pid"/>td>
        <td><s:property value="#user.pname"/>td>
        <td><s:property value="#user.pwd"/>td>
        <td><a href="personAction!del?pid=" >删除td>
        <td><a href="personAction!showId?pid=" >更新td>td>
    tr>
  s:iterator>
table>
center>
body>

adduser.jsp

<body >
<center>
<s:form action="personAction!add" method="post">
<s:textfield name="pname" label="用户名">s:textfield>
<s:textfield name="pwd" label="密码">s:textfield>
<tr>
<td colspan="2">
    <s:submit theme="simple" value="提交">s:submit>
    <s:submit theme="simple" value="重置">s:submit>
td>
tr>
s:form>
center>
body>

upuser.jsp

<body>
<center>
<s:form action="personAction!upd" method="post">
<s:hidden name="p.pid" >s:hidden>
<s:textfield name="p.pname" label="用户名">s:textfield>
<s:textfield name="p.pwd" label="密码">s:textfield>
<tr>
<td colspan="2">
    <s:submit theme="simple" value="提交">s:submit>
    <s:submit theme="simple" value="重置">s:submit>
td>
tr>
s:form>
center>
body>

效果图:
ssh初步整合(一)——实现简单的单表CRUD_第5张图片

你可能感兴趣的:(ssh)