版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Spring可以不用struts,不用hibernate,但是唯独spring和ejbspring可以用来整合框架(struts2,hibernate...),3看一个小项目,假设:Action》Dao三种数据库,1种Oracle,1种mySql,1种DB2使用jdbc3dao,创建一个SpringIOCAop1Spring环境搭建web导入 IOC把ActionDao都配置到springid:标识,用来区分不同class--(BeanFactory的配置文件<beanid="userDaoMySql"<beanid="userDaoDB2"<bean><propertyname="userDao"Bean注入方式与注入数据类型 默认<bean>构造方法注入 <bean><constructor- <propertyname="userDao"基本数据类型注 使用set注入基本类型<propertyname="name"value=" propertyname="friends"><property<property<entrykey="1001value="java基础<entrykey="1004value="框架<property<prop<propsingleton(默认scope=singleton(单例,默认值)prototype(多例)<beanid="bean2"class="com.tarena.bean2.Bean2"每次调getBean时都会创建:<beanid="XXXbean"<beanid="XXXbean" factory-<beanid="XXXfacotry"(factory-bean中的值是方法所在bean的<beanid="XXXbean"factory-bean="XXXfacotry"factory-抽象的bean<bean <propertyname="id"<propertyname="name"<!--继承上一个bean<beanid="bean4"class="com.tarena.bean4.Bean4"AOP目标对象(TargetAOP类 )分为jdk动态和cglib动对象也会实现这些接口,并且对接口中的方能会进行增强cglib动态:生 (Advice)将在何时被触发通知(Advice)到joinpoint之后要做的事情前置通知(Beforeadvice):在某连接点之前执行后置通知(Afterreturningadvice):在某连接点正常完成后执行环绕通知(AroundAdvice):包围接点异常通知(Afterthrowingadvice):在方法抛出异常退出时执行最终通知(After(finally)advice):当某连接点退出的时候执行(不论是织入(Weaving)指将aspects应用到target对象并导 对象创建的过AOP配置在applicationContext.xmlxmlns:aop="加入jarbeanFactoryapplicationContext.xml中的配置:目标对象<beanid="empDao"切面<beanid="myAspect"<!--Aop--<aop:pointcutid="myPointCut"<aop:aspectid="myaspect"<aop:beforemethod="myBefore"pointcut-<aop:aftermethod="myAfter"pointcut-<aop:aroundmethod="myRound"pointcut-publicvoid} publicvoid} publicvoidmyRound(ProceedingJoinPointprj)throwsStringmethodName=prj.getSignature().getName();}注ceed();而且代码反射中的class对象:对象名.getClass(),类名.classStringclassNamepjp.getTarget().getClass()StringmethodName=包名+类名异常通知(Afterthrowingadvice):在方法抛出异常退出时执行applicationContext.xml<aop:aspect></aop:aspect>中的配置<aop:after-throwingmethod="myException"切面的定义publicvoidmyException(Exception 截获到目标对象中save ex指代就是save exStringexname= Loggerlogger=Logger.getLogger(this.getClass());StackTraceElement[]els=ex.getStackTrace();}Logger对象中常用到的方法 logger.warn("警告信息");logger.error("错误信息"); 整个jdbc操作时间的80%以上2)发送并执行sql如何提高jdbc策略:可以提前创建好很多连接,放到一个容器中,当操作jdbc容器获得连接,这个就是连接池连接池组件中管理的单元就是我们之前使用的Connection对象,在连接池中可以管理ConnectionConnection对象2
execution(*包名.类名.方法名前缀+*(..))第1个*:返回值任意egcom.tarena.dao.impl.UserDaoImplexecution(*外层包的名字..*.*(..))第1个*:返回值任意1个2个*3个*2个..:expression="execution(*com.tarena.aop.dao.impl.UserDaoImpl.update*(..))||execution(*com.tarena.aop.dao.impl.UserDaoImpl.save*(..))"/>expression="execution(*com.tarena.aop.dao..*.*(..))"Aop修改spring配置文件:启动注修改类,添加aopspring整合jdbc:减少直接使用jdbc的代码量,spring提供一个专门简化jdbc操作的工具类JdbcTemte(封装很多针对jdbc操作的方法),只要写好了sql语句,通过JdbcTemte对象直接.调用即可企业开发中dao层使用spring整合jdbc的。Stringsql“sqlDao层的代码,功能一定要单一获得connection对象的接口,用来替代DriverManager,参与连接池连接池(程序员操作连接池的类)BasicDataSource是DBCP连接池的类spring整合jdbc的时候,直接使用就是连接池,不会使用DBCP比较常见的连接池,commons-dbcp-1.2.2.jarcommons-pool-spring管理连接池的方式,就是把连接池的类,注入到IOC容器中,<!--连接池类--<beanid="dataSoruce" <!--4<propertyname="url"<property<propertyname="username"<propertyname="password"配置连接池的参数<propertyname="initialSize"<propertyname="maxActive"<propertyname=”maxWait”(Spring中的jdbc)3RowMapper当使用jdbcTemte做查询时候,查询回来的数据跟实体类之间有对应的关系,*作查询的时候单独写一个类继承RowMapper RowMapperpublicObjectmapRow(ResultSetrs,introwNum)throwsSQLException(将结果集rs封装到new}4JdbcTemjdbcTemte:封装很多针对jdbc的操作的方法,可以通过该工具类简化我们开对于Hibernate有对应的HibernateTemte2)实例化jdbcTemte构造方法:publicJdbcTemte(DataSourcedataSource){}publicclassCostDaoImpl ICostDao{privateJdbcTemtejdbcTemte;//采用set注入的方publicvoidsetDataSource(DataSourcedataSource){ te=newJdbcTem }Dao对象<beanid="costDao"把实现了DataSource<propertyname="dataSource"jdbcTemte中封装的方法及用publicvoiddeleteCost(intid)Stringsql="deletefromCOSTwhereID=?";Object[]params={id};jdbcTemte.update(sql,params);//可以用于更改删除插}publicCostfindById(intid)Stringsql="select*fromCOSTwhereID=?";Object[]params={id};//return(Cost)jdbcTemte.query(sql,params,newCostMapper()).get(0);return(Cost)jdbcTemte.queryForObject(sql,params,newCostMapper());//用于查询上面返回的是一个List集合下面的返回的Cost//newCostMapper(实现RowMapper}使用jdbcTemte,不需要再频繁使用jdbc自5spring建议开发的时候,写dao都最好继承DaoSupport, >JdbcDaoSupportjdbcDaoSupport内部包含了一个JdbcTemte对象利用JdbcTemte对象来简化我在dao中继承了父类中JdbcTemte类型的jdbcTemte属性的 set所以dao中可以直接用this.getJdbcTemte()来调用jdbcTemte对 >spring整合
1分别导入hibernate和spring的jar遇到重复的jar2Spring管理SessionFactory(ioc)(配置SessionFactory)1)LocalSessionFactoryBean管理SessionFactorya)DataSource:连接池(参照jdbc)b)hibernate自身属性:<beanid=”sessionFactory”<property<prop<propcorm<propertyname="map3HibernateTemHibernateTem封装很多针对hibernate操作的方法,可以直接使用HibernateTemte对象操作数跟get(),load()使用也跟sessionfind(hql,参数):返回值list集合,如果只有返回一个结果:get(0)5)hibernate缺点:没有很好封装hibernate分页,可以通过回调来使用封装起来session,进而使用hibernatepublicList<Cost>findPage(finalintfirstResult,finalintmaxResult) 使用回调,找到session对象,使用hibernatereturn(List<Cost>)hibernateTemte.execute(newHibernateCallback()publicObject nHibernate(Sessionsession)throwsHibernateException,SQLException{Stringhql="fromreturn}}6)在HibernateTemte中灵活使用hql语句,比如构造方法查询属性,比如目标4事务的特2)事务的级别:
5式事spring对hibernateHibernateTransactionManager处理事务(对事务:<beanid="transactionManager"<propertyname="sessionFactory"<tx:advice <tx:methodname="find*" <tx:methodname="*" 配置切入点现在配置到dao层但一般的企业开发,事务都建议配置到业务层最好配置到业务层,如果没有的话,配置到Action 》(Action》 》<aop:pointcutexpression="execution(*<aop:advisoradvice- pointcut-6内部封装一个HibernateTemte对7DataSourceTransactionManager:jdbc中控制事务的类,配置跟Hibernate基<beanid="transactionManager"<propertyname="dataSourceref="dataSource"></property>(一般在SessionFactory中配置后就没有必要再在这里配置了)spring整合hibernateSessionFactoryActionDao。事
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汉中市留坝县2026-2027学年三上数学期末联考模拟试题含解析
- 江苏省南通市海安市白甸镇2027届六上数学期末检测试题含解析
- 南平市政和县2027届数学三年级第一学期期末监测试题含解析
- 抵制不良风气共筑文明校园三至四年级主题班会课件
- 小学主题班会课件:英语角:快乐学习每一天
- 文明礼仪成就未来:小学主题班会课件
- 2026年浙江省人教版初中英语第8单元语法练习题
- 项目推进催办及进展通报函(3篇范文)
- 小学美术示范课《手捏成型法》教案
- 《母鸡萝丝去散步》教学设计
- 2026秋人教版(新教材)小学数学五年级上册(全册)教学设计(附目录p273)
- 2024版人教版初中语文九上名著《唐诗三百首》复习题
- T∕CAGIS 20-2026 T∕CSGPC 70-2026 测绘地理信息技术服务成本要素 通则
- 2026年文物保护工程从业资格考试(责任工程师近现代重要史迹及代表性建筑)经典试题及答案
- GB/T 17623-2026绝缘油中溶解气体组分含量的气相色谱测定法
- 2026年中国时尚耳夹数据监测研究报告
- 2026年4月自考02160流体力学试题及答案含评分参考
- 广西壮族自治区梧州市2026年高三第一次模拟考试物理试卷(含答案解析)
- 2026广州医药集团有限公司春季校园招聘笔试历年典型考点题库附带答案详解
- 2026年执业医师加试院前急救考试试题与参考答案
- 上海市二级注册建造师继续教育(建筑工程)考试题库
评论
0/150
提交评论