<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Cyh的博客

    Email:kissyan4916@163.com
    posts - 26, comments - 19, trackbacks - 0, articles - 220

    Spring+JPA+Struts2整合

    Posted on 2009-02-27 15:48 啥都寫點 閱讀(1190) 評論(0)  編輯  收藏 所屬分類: J2EE


    Person類代碼
    package quickstart.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id;
    @Entity
    public class Person {     
        @Id     
        @GeneratedValue     
        
    private Integer id;    
       
    private String lastName;    
        private
     String firstName;    
       
    public String getFirstName() {         
        
    return firstName;    
     }   
      
    public void setFirstName(String firstName) {         
           
    this.firstName = firstName;    
     }     
    public String getLastName() {         
           
    return lastName;    
    }     
    public void setLastName(String lastName) {         
            
    this.lastName = lastName;    
     }     
    public Integer getId() {         
            
    return id;    
     }     
    public void setId(Integer id) {         
       
    this.id = id;    
     }
    }
    創建一個接口,命名為"PersonService",包名為"quickstart.service" PersonService.java
    package quickstart.service; import java.util.List; import quickstart.model.Person; public interface PersonService {     
        
    public List<Person> findAll();
        
        
    public void save(Person person);     
        
        
    public void remove(int id);     
        
        
    public Person find(int id); }
    創建一個類,命名為"PersonServiceImpl",包名為"quickstart.service"PersonServiceImpl.java
    package quickstart.service;
    import java.util.List;
    import
     javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import
     javax.persistence.Query;
    import
     org.springframework.transaction.annotation.Transactional;
    import quickstart.model.Person;
    @Transactional
    public class PersonServiceImpl implements PersonService {     
       
    private EntityManager em;    
       @PersistenceContext    
       public void setEntityManager(EntityManager em) {         
        
    this.em = em;   
      }    
        @SuppressWarnings(
    "unchecked")   
        
    public List<Person> findAll() {         
        Query query 
    = getEntityManager().createQuery("select p FROM Person p");       
          
    return query.getResultList();   
      }   
       
    public void save(Person person) {        
       
    if (person.getId() == null) {           
            
    // new             em.persist(person);      
      } else {           
         
    // update             em.merge(person);         }   
      }   
           
    public void remove(int id) {        
            Person person 
    = find(id);       
            
    if (person != null) {          
              em.remove(person);       
         }   
     }   
        
    private EntityManager getEntityManager() {        
             
    return em;   
     }    
        
    public Person find(int id) {        
        
    return em.find(Person.class, id);  
       }
    }

    @PersistenceContext會讓Spring在實例化的時候給服務注入一個EntityManager。@PersistenceContext注解可以放在實例變量,或者setter方法前面。如果一個類被注解為@Transactional,Spring將會確保類的方法在運行在一個事務中。
    JPA配置
    persistence.xml中就不用配置了,因為會教給spring保管

    web.xml的配置
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="person" version="2.4"
    xmlns
    ="http://java.sun.com/xml/ns/j2ee"    
    xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">    <display-name>person</display-name>  
     
    <filter>       
        
    <filter-name>struts2</filter-name>     
        
    <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class>
     
    </filter>
    <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>    
    </filter-mapping>
    <welcome-file-list>        
    <welcome-file>index.jsp</welcome-file>    
    </welcome-file-list>    
    <listener>       
    <listener-class>org.springframework.web.context.ContextLoaderListener </listener-class>  
    </listener>
    </web-app>
    applicationContext.xml配置如下:
    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:aop="http://www.springframework.org/schema/aop"     xmlns:tx="http://www.springframework.org/schema/tx"     xsi:schemaLocation="     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">    
       
    <
    bean   class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />    

    <
    bean id="personService" class="quickstart.service.PersonServiceImpl" />  
     
     
    <bean id="entityManagerFactory"    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">   
        
    <property name="dataSource" ref="dataSource" />    
        
    <property name="jpaVendorAdapter">         
              
    <bean   class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">               
                     
    <property name="database" value="MYSQL" />              
                     
    <property name="showSql" value="true" />          
              
    </bean>       
       
    </property>  
     
    </bean>   
     
    <bean id="dataSource"    class="org.springframework.jdbc.datasource.DriverManagerDataSource">    
       
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />    
       
    <property name="url" value="jdbc:mysql://localhost/test" />    
       
    <property name="username" value="root" />     
      
    <property name="password" value="root" />    
    </bean>   
     

    <
    bean id="transactionManager"   class="org.springframework.orm.jpa.JpaTransactionManager">   
        
    <property name="entityManagerFactory" ref="entityManagerFactory" />  
    </bean>   
     

    <
    tx:annotation-driven transaction-manager="transactionManager" />  
     
    <bean id="personAction" scope="prototype" class="quickstart.action.PersonAction">      
      
    <constructor-arg ref="personService" />   
    </bean>

    </beans>

    注意"personAction"bean"class"屬性被設為Action類的名字,并且"personService"bean會作為參數傳遞到action的構造器中。改變"dataSource"Bean"url", "username""passwrod"屬性為你數據庫的值。更多beans設置的細節,請參看Spring的文檔。"scope"Spring2新增的屬性,它意味著Spring會在該類型的對象被請求時創建一個新的PersonAction對象。在Struts2里,一個新的action對象被創建,用來為每個請求服務,這就是我們為什么需要scope="prototype"。



    現在我們需要創建一個簡單的Struts action,它封裝了PersonServices的方法。并且我們配置Struts使用Spring作為對象工廠。
    打開新建類對話框,輸入
    "PersonAction"作為類名,包名為"quickstart.action",內容如下:
    package quickstart.action;
    import java.util.List;
    import quickstart.model.Person;
    import quickstart.service.PersonService;
    import
     com.opensymphony.xwork2.Action;
    import com.opensymphony.xwork2.Preparable;

    public class PersonAction implements Preparable {     
      
    private PersonService service;  
      
    private List<Person> persons;   
      
    private Person person;  
      
    private Integer id;   
     
    public PersonAction(PersonService service) {         
        
    this.service = service;     
    }    
    public String execute() {         
         
    this.persons = service.findAll();       
        
    return Action.SUCCESS;    
     }   
     
    public String save() {         
           
    this.service.save(person);   
          
    this.person = new Person();    
          
    return execute();    
     }   
     
    public String remove() {         
           service.remove(id);   
          
    return execute();    
     }   
     
    public List<Person> getPersons() {         
          
    return persons;    
     }   
     
    public Integer getId() {         
         
    return id;   
     }   
     
    public void setId(Integer id) {        
         
    this.id = id;   
     }   
     
    public void prepare() throws Exception {         
         
    if (id != null)          
          person 
    = service.find(id);   
      }    
        
    public Person getPerson() {         
          
    return person;   
     }  
     
    public void setPerson(Person person) {      
         
    this.person = person;    
     }
    }
    struts.xml中的配置
    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"     "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts>    
    <constant name="struts.objectFactory" value="spring" />  
     
    <constant name="struts.devMode" value="true" />  
     
    <package name="person" extends="struts-default">  
       
     
    <action name="list" method="execute" class="personAction">            
        <
    result>pages/list.jsp</result>        
       
    <result name="input">pages/list.jsp</result>       
     
    </action>       

     
    <action name="remove" class="personAction" method="remove">        
       
    <result>pages/list.jsp</result>     
       
    <result name="input">pages/list.jsp</result>      
     
    </action>     

      
    <action name="save" class="personAction" method="save">          
         
    <result>pages/list.jsp</result>         
         
    <result name="input">pages/list.jsp</result>    
      
    </action>  

     
    </package>

    </
    struts>

    設置"struts.objectFactory""spring"會強制Struts使用Spring來實例化action,并注入所有定義在applicationContext.xml中的依賴關系。每個action別名的"class"屬性被設置為"personAction",這也就是我們在applicationContext.xml中定義的PersonAction bean。要讓StrutsSpring一起工作,我們僅僅需要做上面這點事情。






                                                                                                           --    學海無涯
            

    主站蜘蛛池模板: 一级毛片免费毛片毛片| 日本久久久久亚洲中字幕| 亚洲成AV人片在线播放无码| fc2成年免费共享视频网站| 天天拍拍天天爽免费视频 | 午夜亚洲www湿好大| 黄网站在线播放视频免费观看 | 在线观看成人免费视频不卡| 亚洲国产中文在线二区三区免| 国产精品成人69XXX免费视频| 亚洲国产精品无码久久久久久曰| 看免费毛片天天看| 国产亚洲一区二区三区在线不卡| 国产一二三四区乱码免费| 亚洲精品成人片在线播放| 欧洲人成在线免费| 亚洲综合综合在线| 免费看AV毛片一区二区三区| 在线观看亚洲专区| 亚洲中文久久精品无码ww16| 91精品国产免费入口| 国产成人综合亚洲一区| 在线观看人成网站深夜免费| 免费人成大片在线观看播放| 亚洲无线观看国产精品| 91在线手机精品免费观看| 国产成人亚洲精品| 四虎影视永久免费观看| 成人精品视频99在线观看免费| 666精品国产精品亚洲| 日韩特黄特色大片免费视频| 久久毛片免费看一区二区三区| 亚洲精品在线免费观看| 国产日产成人免费视频在线观看| 国产真人无码作爱免费视频| 亚洲中文字幕人成乱码| 又粗又大又硬又爽的免费视频| a色毛片免费视频| 国产亚洲精aa在线看| 久久久久亚洲AV无码专区网站 | 亚洲中文字幕第一页在线|