s2sh框架搭建(基于spring aop)

对于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><!--通过配置文件的方式获取数据源--><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> <!-- 切入点指明了在执行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];*    最后发现了问题所在,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 {......}可以发现,显示地指明了 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.和数据库映射的pojo:

package com.xunchang;import java.io.Serializable;
/**待解决问题,为什么一定要实现 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

codeforces B. Pasha and String(贪心)

题意&#xff1a;给定一个长度为len的字符序列&#xff0c;然后是n个整数&#xff0c;对于每一个整数ai&#xff0c; 将字符序列区间为[ai,len-ai1]进行反转。求出经过n次反转之后的序列&#xff01; 1 /*2 思路1&#xff1a;将区间为偶数次的直接去掉&#xff01;对剩下的…

java简单词法分析器(源码下载)

java简单词法分析器 : http://files.cnblogs.com/files/hujunzheng/%E7%AE%80%E5%8D%95%E8%AF%8D%E6%B3%95%E5%88%86%E6%9E%90%E5%99%A8.zip 转载于:https://www.cnblogs.com/hujunzheng/p/4383880.html

java 模拟qq源码

java 模拟qq源码&#xff1a; http://files.cnblogs.com/files/hujunzheng/QQ--hjzgg.zip 转载于:https://www.cnblogs.com/hujunzheng/p/4390307.html

蓝桥杯 算法提高 日期计算

算法提高 日期计算 时间限制&#xff1a;1.0s 内存限制&#xff1a;256.0MB问题描述已知2011年11月11日是星期五&#xff0c;问YYYY年MM月DD日是星期几&#xff1f;注意考虑闰年的情况。尤其是逢百年不闰&#xff0c;逢400年闰的情况。 输入格式输入只有一行YYYY MM DD 输出…

java JFileChooser选择文件和保存文件

//文件过滤器import java.io.File;import javax.swing.filechooser.FileFilter;public class MyFilter extends FileFilter{private String[] filterString null;public MyFilter(String[] filStrings){this.filterString filStrings;}public boolean accept(File file){if(f…

指针详解

c语言相比其他高级语言来说,更接近于对计算机硬件的操作,而指针的应用更是为我们对硬件的操作插上了翅膀,所以指针是嵌入式编程不可少的一部分,在一定意义上说,指针是c语言的精髓。 欢迎加入嵌入式学习群:559601187 一、 什么是指针 在计算机中,数据时存放在内存中的,…

反质数问题,求不大于n的最大反质数

反质数&#xff1a;设f(n)表示n个约数的个数&#xff0c;如果对于任意x有0<x<n, f(x) < f(n),那么n就是一个反质数我们都知道对于任意一个数n&#xff0c;都可以用质数乘积的形式表示出来&#xff1a;x p1^k1p2^k2...pn^kn一个数n如果可以表示成 n p1^k1 p2^k2, 那…

c语言之结构

今天来说一下C语言里的结构体(struct)、共用体(l联合体)union、枚举。 欢迎加入嵌入式学习群&#xff1a;559601187 &#xff08;一&#xff09;结构体&#xff1a;struct 1.1 概念 是一种自定义的数据类型结构体是构造类型的一种不同数据类型的集合地址空间连续&#xff0c;…

猫和老鼠 蓝桥杯/手速/暴力练习赛(暴力搜索)

猫和老鼠 蓝桥杯&#xff0f;手速&#xff0f;暴力练习赛 【题目描述】猫和老鼠在10*10 的方格中运动&#xff0c;例如&#xff1a;*...*...........*......*...*...............*.C....*.....*......*........M......*...*.*.....*.*......C猫&#xff08;CAT&#xff09;M老鼠…

STM32 4*4矩阵按键

本文章讲述了如何用STM32编写4*4矩阵按键程序&#xff0c;先简单介绍一下扫描的基本方法&#xff1a;1.反转法 2.行列扫描。本文主要介绍行列扫描 欢迎加入嵌入式学习群&#xff1a;559601187 &#xff08;一&#xff09;代码如下 /*****************************************…

编译原理:正规式转变成DFA算法

//将正规式转变成NFApackage hjzgg.formal_ceremony_to_dfa;import java.util.ArrayList;class Edge{public int u, v;public char key;public Edge(int u, int v, char key) {super();this.u u;this.v v;this.key key;}Overridepublic String toString() {return u "…

C语言实现音乐播放器(Linux madplay)

&#xff08;一&#xff09;需求分析 1.扫描指定路径下的音乐&#xff0c;并显示出来 2.实现音乐的播放、暂停、上一首和下一首的功能 3.程序退出释放内存资源 &#xff08;二&#xff09;思路 1.扫描出指定路径下的音乐文件(便利指定文件夹&#xff0c;找出音频文件放在数组…

编译原理(简单自动词法分析器LEX)

编译原理&#xff08;简单自动词法分析器LEX&#xff09;源程序下载地址&#xff1a; http://files.cnblogs.com/files/hujunzheng/%E6%B1%87%E7%BC%96%E5%8E%9F%E7%90%86%E7%AE%80%E5%8D%95LEX%EF%BC%88%E8%AF%8D%E6%B3%95%E8%87%AA%E5%8A%A8%E5%88%86%E6%9E%90%E5%99%A8%EF%…

虚拟机中安装linux

&#xff08;一&#xff09;前言 就在昨天电脑的固态突然崩掉&#xff0c;无奈重新把系统装在的以前的硬盘上&#xff0c;为了能够继续工作重新配置嵌入式linux系统开发环境&#xff0c;本教程主要记录在虚拟机中安装linux。 &#xff08;二&#xff09;环境准备 虚拟机&…

编译原理简单语法分析器(first,follow,分析表)源码下载

编译原理&#xff08;简单语法分析器下载&#xff09; http://files.cnblogs.com/files/hujunzheng/%E5%8A%A0%E5%85%A5%E5%90%8C%E6%AD%A5%E7%AC%A6%E5%8F%B7%E5%90%8E%E7%9A%84%E8%AF%AD%E6%B3%95%E5%88%86%E6%9E%90%E5%99%A8.zip 转载于:https://www.cnblogs.com/hujunzheng…

Ubuntu设置root登录

1.、Ubuntu 管理员用户 root 默认没有密码&#xff0c;在使用前最好添加密码&#xff0c;使用指令&#xff1a; sudo passwd root 注意&#xff1a;命令行输入密码时不显示&#xff0c;输入时需注意密码的准确性&#xff1b; 2、Ubuntu 想要用 root 帐户登录&#xff0c;可在普…

vim配置之spacevim

为了更好的利用vim&#xff0c;我们一般需要自己配置&#xff0c;今天介绍了一下经常用的spacevim &#xff08;一&#xff09;配置环境 Ubuntu16.04vim 7.4版本以上(必须&#xff01;&#xff01;) &#xff08;二&#xff09;安装spacevim 1.检查vim的版本&#xff1a; v…

Ubuntu更换gnome桌面环境后不能root登录

安装完Ubuntu后感觉界面有点丑陋&#xff0c;安装了gnome桌面环境试一下 sudo apt-get install gnome-shell sudo apt-get install ubuntu-gnome-desktop如果选择了lightdm后可以使用sudo dpkg-reconfigure gdm3 重新改回gdm3 sudo apt-get install unity-tweak-tool sudo ap…

Ubuntu下安装tilix终端仿真器

安装环境 Ubuntu 16.04 操作步骤 首先添加这个终端模拟器仓库的公钥。这里我都是以root超级用户权限操作的&#xff0c;如果没有的话&#xff0c;请在命令前面加sudo。 add-apt-repository ppa:webupd8team/terminixapt update安装Tilix。 apt install tilix安装完成测试结…

(扩展欧几里德算法)zzuoj 10402: C.机器人

10402: C.机器人 Description Dr. Kong 设计的机器人卡尔非常活泼&#xff0c;既能原地蹦&#xff0c;又能跳远。由于受软硬件设计所限&#xff0c;机器人卡尔只能定点跳远。若机器人站在&#xff08;X&#xff0c;Y&#xff09;位置&#xff0c;它可以原地蹦&#xff0c;但只可…