用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;
    }

}

運行結果如下:

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM