什麼是SSH?
java
SSH對應 struts spring hibernate
struts 採用MVC模式,主要是做用於用戶交互
spring 採用IOC和AOP~做用比較抽象,是用於項目的鬆耦合
hibernate 是對象持久化框架,其實就是實體類和數據庫表創建關係,操做類就會觸發相應的sql語句,能夠不用寫任何sql語句,完成數據庫編程(引自百度知道)
SSH就是Struts + Spring + Hibernate 3個Java框架的集合,如今Java開發中經常使用的框架組合。用來開發後臺,與前臺和數據庫進行數據交互。最初學這個是爲了寫JSP。
mysql
事先須要作的準備工做:web
1.安裝jdk,這裏就很少說了,我使用的是jdk1.8spring
2.須要用到的工具:eclipse,mysql等等sql
好,接下來咱們就開始建立項目了。數據庫
第一步:建立一個叫作ssh的項目吧。可是得提醒你們不要忘記勾選web.xml文件,請看以下截圖。編程
第二步:搭建struts2環境session
首先;引入struts2的包app
接下來須要修改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; } }
運行結果以下:
SSH框架搭建步驟不少,可是不難,由於MyEclipse已經幫咱們作了大部分的工做,若是純手動添加這個框架的話,那真是夠複雜的了。不過涉及的知識挺多的,適合有必定基礎的人。下面詳細介紹一下SSH框架的搭建步驟而且解決了幾個我在搭建過程當中遇到的問題。