s2sh框架搭建(基于spring aop)
生活随笔
收集整理的這篇文章主要介紹了
s2sh框架搭建(基于spring aop)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
對于spring aop 是如何管理事務的,請看一下:http://bbs.csdn.net/topics/290021423
1.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:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" <!-- 新加入?-->xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd "> <!--新加入 datasource --><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/hjzgg_test?characterEncoding=UTF-8" /><property name="username" value="root" /><property name="password" value="hjzgg5211314" /></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="configLocation"value="classpath:hibernate.cfg.xml"></property><!--新加入 將dataSource注入到sessionFactory中 --><property name="dataSource" ref="dataSource"></property><property name="hibernateProperties"><value>hibernate.dialect=org.hibernate.dialect.MySQL5Dialecthibernate.hbm2ddl.auto=updatehibernate.show_sql=truehibernate.format_sql=falsehibernate.cache.use_second_level_cache=truehibernate.cache.use_query_cache=falsehibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider<!--hibernate.current_session_context_class=thread 不需要了--></value></property><!--通過配置文件的方式獲取數(shù)據(jù)源--><property name="mappingResources"><list><!-- 以下用來列出所有的PO映射文件 --><value>person.cfg.xml</value></list></property> </bean><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><bean id="personDao" class="com.xunchang.PersonDaoImpl"><!-- 采用依賴注入傳入SessionFactory的引用 --><property name="sessionFactory" ref="sessionFactory"/></bean><bean id="service" class="com.hjzgg.service.XunChageService"><property name="personDao" ref="personDao"/></bean><bean id="login" class="com.xunchang.LoginAction"> <property name="service" ref="service"/></bean><!-- 配置那些類的方法進行事務管理,需要aopalliance-1.0.jar和aspectjweaver.jar,當前com.neusoft.leehom.service包中的子包, 類中所有方法需要,還需要參考tx:advice的設置 --> <!-- 需要引入tx的命名空間 --> <!-- 這是事務通知操作,使用的事務管理器引用自 transactionManager --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 指定哪些方法需要加入事務,這里懶惰一下全部加入,可以使用通配符來只加入需要的方法 --> <tx:method name="insert*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="get*" propagation="REQUIRED" read-only="true"/> <tx:method name="query*" propagation="REQUIRED" read-only="true"/> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes> </tx:advice> <!-- 需要引入aop的命名空間 --> <aop:config> <!-- 切入點指明了在執(zhí)行Service的所有方法時產生事務攔截操作 --> <aop:pointcut id="daoMethods" expression="execution(* com.hjzgg.service.*.*(..))" /> <!-- 定義了將采用何種攔截操作,這里引用到 txAdvice --> <aop:advisor advice-ref="txAdvice" pointcut-ref="daoMethods" /></aop:config><tx:annotation-driven transaction-manager="transactionManager" /> </beans>
2. dao層代碼
package com.xunchang;import java.util.List;import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction;public class PersonDaoImpl implements PersonDao{private SessionFactory sessionFactory; public Session getSession() { return sessionFactory.getCurrentSession(); } public SessionFactory getSessionFactory() { return sessionFactory; } public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Overridepublic Person get(Integer id) {return (Person) this.getSession().get(Person.class, id);}@Overridepublic void save(Person ps) {this.getSession().save(ps);}@Overridepublic List<Person> findAllPerson() {/** 問題: home402 is not mapped [from home402];* 最后發(fā)現(xiàn)了問題所在,hql查詢時使用的from Xxx,Xxx不是實體類的名稱,而是 EntityName (Hibernate注解)。如:@Entity@Table(name="QING_AO_CENTER_INFO")public class QingAoCenterInfo {......}此處,@Entity后并沒有顯示的指明EntityName,因此默認采用實體類的名稱。@Entity(name="QING_AO_CENTER_INFO")@Table(name="QING_AO_CENTER_INFO")public class QingAoCenterInfo {......}可以發(fā)現(xiàn),顯示地指明了 EntityName,因此在使用hql查詢的時候,要from QING_AO_CENTER_INFO,而不是from QingAoCenterInfo ;centerList = manager.find("from QING_AO_CENTER_INFO center where center.type = ? and center.centerName = ?", new Object[]{type,centerName});*/Session session = this.getSession(); // Transaction tran = session.beginTransaction();session.save(new Person(null, "我是hjzgg", 23));List<Person> list = session.createQuery("from Person").list(); // tran.commit();return list;}}3.service層部分代碼:
package com.hjzgg.service;import java.util.List;import com.xunchang.Person; import com.xunchang.PersonDao;public class XunChageService {private PersonDao personDao;public Person get(Integer id){return personDao.get(id);}public void save(Person ps){personDao.save(ps);}public List<Person> findAllPerson(){return personDao.findAllPerson();}public PersonDao getPersonDao() {return personDao;}public void setPersonDao(PersonDao personDao) {this.personDao = personDao;} }4.action部分代碼:
package com.xunchang;import java.util.List;import com.hjzgg.service.XunChageService; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport {private XunChageService service;@Overridepublic String execute() throws Exception{List<Person> list_person = service.findAllPerson();ActionContext.getContext().getSession().put("person", list_person);return "success";}public XunChageService getService() {return service;}public void setService(XunChageService service) {this.service = service;}}5.和數(shù)據(jù)庫映射的pojo:
package com.xunchang;import java.io.Serializable; /**待解決問題,為什么一定要實現(xiàn) Serializeable */ public class Person implements Serializable{private Integer personId;private String person_name;private Integer person_age;public Person(){}public Person(Integer personId, String person_name, Integer person_age) {super();this.personId = personId;this.person_name = person_name;this.person_age = person_age;}public Integer getPersonId() {return personId;}public void setPersonId(Integer personId) {this.personId = personId;}public String getPerson_name() {return person_name;}public void setPerson_name(String person_name) {this.person_name = person_name;}public Integer getPerson_age() {return person_age;}public void setPerson_age(Integer person_age) {this.person_age = person_age;} }6.hibernate映射文件xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.xunchang"><class name="Person" table="home402"><!-- 定義持久化類的表示屬性 --><id name="personId" column="personId" type="java.lang.Integer"><!-- 定義主鍵生成策略 --><generator class="identity"/></id><property name="person_name" column="person_name" type="java.lang.String"/><property name="person_age" column="person_age" type="java.lang.Integer"/></class> </hibernate-mapping>7.struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts><package namespace="/" name="struts2" extends="struts-default"> <!-- package中的標簽必須按照如下順序配置result-types,interceptors,default-interceptor-ref,default-action-ref,default-class-ref,global-results,global-exception-mappings,action*(就是所有的action放到最后)--><!-- 自定義攔截器 ,如果有攔截器,必須放在package標簽內的第一位--><interceptors><!-- 在這里可以添加自己的攔截器<interceptor name="myInterceptor" class="自定義pojo類"></interceptor>--><interceptor-stack name="myInterceptorStack"><!-- <interceptor-ref name="myInterceptor"></interceptor-ref>--><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors> <global-results><result></result></global-results><action name="login" class="login"><result name="success">/servlet/MyServlet</result></action></package> </struts>?
轉載于:https://www.cnblogs.com/hujunzheng/p/4372706.html
總結
以上是生活随笔為你收集整理的s2sh框架搭建(基于spring aop)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华硕系统怎么进bios设置u盘启动项 如
- 下一篇: win10笔记本无法重置密码怎么办 wi