用Eclipse搭建ssh框架

问:ssh是哪三大框架,以及他们的作用是什么?

答:分别是struts,spring,hibernate.

struts的作用是:是web层,其核心是mvc模式,他可以自动获取参数,自动类型转换,自动页面跳转(将业务接口返回的结果包装起来发送给指定的视图,并由视图完成处理结果的展现),还有一个就是做一些简单的校验或者是国际化工作。

spring的作用是:是业务层,采用IOC和AOP,是用于项目解耦。

hibernate的作用是:数据层,数据库的封装

事先需要做的准备工作:

1.安装jdk,这里就不多说了,我使用的是jdk1.8

2.需要用到的工具:eclipse,mysql等等

好,接下来我们就开始创建项目了。

第一步:创建一个叫做ssh的项目吧。但是得提醒大家不要忘记勾选web.xml文件,请看如下截图。

 

第二步:搭建struts2环境

首先;引入struts2的包

接下来需要修改WEB-INF里面的web.xml文件

 

由于待会我们就要引入spring了,所以这个监听器我们这里一块配置

第三小步就是添加我们的struts.xml文件了

 

接下来我们需要创建一个action类,名字就叫做indexAction吧

中间的话我们先相应的建一个dao类和service类

刚刚的那个注入,也就替换了以前的new对象。

接下来我们来先建jsp文件,我们先不写里面的内容,只是把流程弄出来

第三步:搭建spring和hibernate的环境

首先我们也是需要导包的

这里我们的文件和源码是不需要导进来的

到这里包并没有导完,还需要导struts2-spring的包

如下:

接着我们导hibernate需要的包

接着我们来看看我们的实现类

同理dao的实现类也是一样的

 

hibernate包导完了我们就可以用sessionFactory注入了

接下来我们编写applicationContext.xml文件

看到实体类的映射文件我这里就随便举个例子说下

接着我们继续弄applicateContext.xml文件

如上图那样的话我们需要在自己写一份jdbc的属性,所以我们需要在头部导入

接着我们需要创建一份jdbc.properties

现在我们来运行,发现程序报错了

然后发现是c3p0的架包没有导入

再来运行

看到这里我们就知道框架搭建成功了

 下面是我画的一张流程图,大家可以参考下

接下来我来跟大家分享用EntityManagerFactory来实现上面一样的功能

由于这样的话我们需要在dao的实现类注入EntityManagerFactory,

代码如下:

package dao;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;

import entity.BookCard;


public class IndexDaoImpl implements IndexDao {
    //注入:
    //private SessionFactory sf;
    
    //public void setSf(SessionFactory sf) {
        //this.sf = sf;
    //}
    @PersistenceContext
    private EntityManagerFactory emf;
    

    public void setEmf(EntityManagerFactory emf) {
        this.emf = emf;
    }

    @Override
    public List<BookCard> getAllBookCard(){
        //这个是没有交给spring去做的实例化对象
        //sf=new Configuration().configure().buildSessionFactory();
        //Session session=sf.openSession();//实例化session
        //session.beginTransaction();//实例化一个事务
        /*List<BookCard> list=
                session.createQuery("from BookCard").getResultList();
        session.getTransaction().commit();
        session.close();
        //sf.close();
         
*/        
        EntityManager entityManager=emf.createEntityManager();
        List<BookCard> list=entityManager.createQuery("from BookCard",BookCard.class).getResultList();
        entityManager.close();
        //emf.close();
        return list;
    }
}

大家可以做个对比,其实大同小异

但是EntityManagerFactory需要persistence.xml

代码如下

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"  
    xmlns:persistence="http://java.sun.com/xml/ns/persistence"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_2_1.xsd ">
    
    <persistence-unit name="jpa" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider><!-- 驱动实现类,入口类 -->
    
    <mapping-file>entity/BookCard.hbm.xml</mapping-file>
    <properties>
      
         <!-- Common properties -->
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"></property>
         <property name="hibernate.show_sql" value="true"></property>
         <property name="hibernate.format_sql" value="true"></property>
         <property name="hibernate.hbm2dll.auto" value="update"></property>
         
         <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"></property>
         <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/CardDB"></property>
         <property name="hibernate.connection.username" value="root"></property>
         <property name="hibernate.connection.password" value="123456"></property>
      
        
      </properties>
  </persistence-unit>
</persistence>

当然也别忘了applicationContext.xml里面需要配置,如下:

<bean id="myEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">  
        <property name="persistenceUnitName" value="jpa" />  
    </bean> 

这里还需要说的一个就是,如果实体类.hbm.xml删除了,那就要配着注解才可以使用。

下面是实体类的映射文件,如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="entity">
    <!-- 这里的名和数据库那边一一对应,不写则默认一样 -->
    <class name="BookCard" table="BookCard">
        <id name="cid" column="cid">
            <generator class="increment"/>
        </id>
        <property name="name"></property>
        <property name="sex"></property>
        <property name="cardDate" column="cardDate"></property>
        <property name="deposit"></property>
    </class>
</hibernate-mapping>

再次声明一下,如果删除了映射文件,那么就要在实体类那边注解。

 现在,我们把实体类的映射文件删了,但是我们要在实体类那边加上注解,如下:

 

package entity;

import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="BookCard")//如果不加则表明类名和表名相同
public class BookCard {
    private int cid  ;
    private String name;
    private String sex ;
    private Date cardDate;
    private BigDecimal deposit;
    
    public BookCard() {
        super();
    }
    public BookCard(String name, String sex, Date cardDate, BigDecimal deposit) {
        super();
        this.name = name;
        this.sex = sex;
        this.cardDate = cardDate;
        this.deposit = deposit;
    }

    @Id
    @GeneratedValue(generator="increament")
    public int getCid() {
        return cid;
    }
    public void setCid(int cid) {
        this.cid = cid;
    }
    
    @Column
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    @Column
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    
    @Column
    public Date getCardDate() {
        return cardDate;
    }
    public void setCardDate(Date cardDate) {
        this.cardDate = cardDate;
    }
    
    @Column
    public BigDecimal getDeposit() {
        return deposit;
    }
    public void setDeposit(BigDecimal deposit) {
        this.deposit = deposit;
    }

}

运行结果如下:

 

 

 

 

posted on 2016-09-05 15:18  皮皮聪  阅读(2237)  评论(2编辑  收藏  举报

导航