当前位置: 首页 > news >正文

电子商务网站建设公司开公司怎么找客户

电子商务网站建设公司,开公司怎么找客户,小程序自己制作流程,自己怎么开网店的步骤Spring的事务控制-基于AOP的声明式事务控制 Spring事务编程概述 事务是开发中必不可少的东西#xff0c;使用JDBC开发时#xff0c;我们使用connection对事务进行控制#xff0c;使用MyBatis时#xff0c;我们使用SqlSession对事务进行控制#xff0c;缺点就是#xff…Spring的事务控制-基于AOP的声明式事务控制 Spring事务编程概述 事务是开发中必不可少的东西使用JDBC开发时我们使用connection对事务进行控制使用MyBatis时我们使用SqlSession对事务进行控制缺点就是当我们切换数据库访问技术时事务控制的方式总会变化Spring就在这些技术基础上提供了统一的控制事务的接口。Spring的事务分为编程式事务控制和声明式事务控制 事务控制方式解释编程式事务控制Spring提供了事务控制的类和方法使用编码的方式对业务代码进行事务控制事务控制代码和业务操作代码耦合到了一起开发中不使用声明式事务控制Spring将事务控制的代码封装对外提供了xml和注解配置方式通过配置的方式完成事务的控制可以达到事务控制与业务操作代码解耦合开发中推荐使用 Spring事务编程相关的类主要有如下三个 事务控制相关类解释平台事务管理器 PlatformTransactionManager是一个接口标准实现类都具备事务提交、回滚和获得事务对象的功能不同持久层框架可能会有不同实现方案事务定义 TransactionDefinition封装事务的隔离级别、传播行为、过期时间等属性信息事务状态 TransactionStatus存储当前事务的状态信息如事务是否提交、是否回滚、是否有回滚点等 搭建测试环境 搭建一个转账的环境dao层一个转出钱的方法一个转入钱的方法service层一个转账业务方法内部分别调用dao层转出钱和转入钱的方法准备工作如下 数据库准备一个账户表 tb_account;dao层准备一个AccountMapper包括incrMoney和decrMoney两个方法service层准备一个transferMoney分别调用incrMoney和decrMoney方法;在applicationContext文件中进行Bean的管理配置测试正常转账与异常转账 select * from tb_account idaccount_namemoney1tom50002lucy5000 jdbc.properties jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql//localhost3306/mybatis jdbc.usernameroot jdbc.passwordrootpackage com.luxifa.mapperpublic interface AccountMapper {//钱update(update tb_account set moneymoney#{money} where account_name#{accountName})public void incrMoney(Param(accountName) String accountName,Param(money) Integer money);//-钱Update(update tb_account set moneymoney-#{money} where account_name#{accountName})public void decrMoney(Param(accountName) String accountName,Param(money) Integer money); }package com.luxifa.service;public interface AccountService {void transferMoney(String outAccount,String inAccount,Interger money);}Service(accountService) public class AccountServiceImpl implements AccountService {Autowiredprivate AccountMapper accountMapper;Overridepublic void transferMoney(String outAccount,String inAccount,Integer money) {accountMapper.decrMoney(outAccount,money);accountMapper.incrMoney(inAccount,money);}}xml中 !--组件扫描-- context:component-scan base-packagecom.luxifa/!--加载properties文件-- context:property-placeholder locationclasspath:jdbc:properties/!--配置数据源信息-- bean iddataSource classcom.alibaba.druid.pool.DruidDataSourceproperty namedriverClassName value${jdbc.driver}/propertyproperty nameurl value${jdbc.url}/propertyproperty nameusername value${jdbc.username}/propertyproperty namepassword value${jdbc.password}/property /bean!--配置SqlSessionFactoryBean,作用将SqlSessionFactory存储到spring容器-- bean classorg.mybatis.spring.SqlSessionFactoryBeanproperty namedataSource refdataSource/property /bean!--MapperScannerConfigurer,作用扫描指定的包,产生Mapper对象存储到Spring容器-- bean classorg.mybatis.spring.mapper.MapperScannerCongigurerproperty namebasePackage valuecom.luxifa.mapper/property /bean测试类 public class AccountTest {public static void main(String[] args) {ApplicationContext app new ClassPathXmlApplicationContext(applicationContext.xml);AccountService accountService app.getBean(AccountService.class);accountService.transferMoney(tom,lucy,500);} }结果 select * from tb_account idaccount_namemoney1tom45002lucy5500基于xml声明式事务控制 结合AOP技术可以使用AOP对Service的方法进行事务增强 目标类自定义的AccountServiceImpl内部的方法是切点通知类Spring提供的通知方法已经定义好只需要配置即可 分析 通知类是Spring提供的需要导入Spring事务的相关坐标配置目标类AccountServiceImpl;使用advisor标签配置切面。 Service(accountService) public class AccountServiceImpl implements AccountService {Autowiredprivate AccountMapper accountMapper;Overridepublic void transferMoney(String outAccount,String inAccount,Integer money) {accountMapper.decrMoney(outAccount,money);accountMapper.incrMoney(inAccount,money);}public void registerAccout () {}}xml中 !--组件扫描-- context:component-scan base-packagecom.luxifa/!--加载properties文件-- context:property-placeholder locationclasspath:jdbc:properties/!--配置数据源信息-- bean iddataSource classcom.alibaba.druid.pool.DruidDataSourceproperty namedriverClassName value${jdbc.driver}/propertyproperty nameurl value${jdbc.url}/propertyproperty nameusername value${jdbc.username}/propertyproperty namepassword value${jdbc.password}/property /bean!--配置SqlSessionFactoryBean,作用将SqlSessionFactory存储到spring容器-- bean classorg.mybatis.spring.SqlSessionFactoryBeanproperty namedataSource refdataSource/property /bean!--MapperScannerConfigurer,作用扫描指定的包,产生Mapper对象存储到Spring容器-- bean classorg.mybatis.spring.mapper.MapperScannerCongigurerproperty namebasePackage valuecom.luxifa.mapper/property /bean!--配置平台事务管理器-- bean idtransactionManager classorg.springframework.jdbc.datasource.DataSourceTransationManagerproperty namedataSource refdataSource/ /bean!--配置Spring提供好的Advice-- tx:advice idtxAdvice transaction-managertransactionManagertx:attribute!--配置不同的方法的事务属性name:方法名称 *代表通配符 添加操作addUser、addAccount、addOrders-add*isolation:事务的隔离级别,解决事务并发问题timeout:超时时间 默认-1(没有超时时间) 单位是秒read-only:是否只读,查询操作设置为只读,默认是falsepropagation:事务的传播行为,解决业务方法调用业务方法(事务嵌套问题)--tx:method nametransferMoney isolationREAD_COMMITTED timeout3 read-onlyfalse/tx:method nameregisterAccount/tx:method nameadd*/tx:method nameupdate*/tx:method nameselete/tx:method name*//tx:attribute /tx:advice!--事务增强的aop-- aop:config!--配置切点表达式--aop:pointcut idtxPointcut expressionexecution(* com.luxifa.service.impl.*.*(..))/!--配置织入关系 通知advice-ref引入Spring提供好的--aop:advisor advice-reftxAdvice pointcut-reftxPointcut/ /aop:configisolation属性:指定事务的隔离级别,事务并发存在三大问题:脏读、不可重复读、幻读/虚读。可以通过设置事务的隔离级别来保证并发问题的出现,常用的是READ_COMMITTED和REPEATABLE_READ isolation属性解释DEFAULT模式隔离级别,取决于当前数据库隔离级别,例如MySQL默认隔离级别是REPEATABLE_READREAD_UNCOMMITTEDA事务可以读取到B事务尚未提交的事务记录,不能解决任何并发问题,安全性最低,性能最高READ_COMMITTEDA事务只能读到其他事务已经提交的记录,不能读取到未提交的记录。可以解决脏读问题,但是不能解决不可以重复读和幻读REPEATBLE_READA事务多次从数据库读取某条记录结果一致,可以解决不可重复读,不可以解决幻读SERLALIZABLE串行化,可以解决任何并发问题,安全性最高,但是性能最低 read-only属性:设置当前的只读操作,如果是查询则设置为true,可以提高查询性能,如果是更新(增删改)操作则设置为false !--一般查询相关的业务操作都会设置为只读模式-- tx:method nameselect* read-onlytrue/ tx:method namefind* read-onlytrue/timeout属性:设置事务执行的超时时间,单位是秒,如果超过该时间限制但事务还没有完成,则自动回滚事务,不在继续执行。默认值是-1,即没有超过时间限制 !--设置查询操作的超时时间是3秒-- tx:method nameselect* read-onlytrue timeout3/propagation设置:设置事务的传播行为,主要解决是A方法调用B方法时,事务的传播方式问题,例如:使用单方面的事务,还是A和B都可以使用自己的事务等。事务的传播行为有如下七种属性值可配置 事务传播行为解释REQUIRED(默认值)A调用B,B需要事务如果A有事务就加入A的事务中如果A没有事务B就自己创建一个事务REQUIRED_NEWA调用B,B需要新事务,如果A有事务就挂起,B自己创建一个新的事务SUPPORTSA调用B,B有无事务无所谓,A有事务就加入到A事务中,A无事务就以非事务方式执行NOT_SUPPORTSA调用B,B以无事务方式执行,A如有事务则挂起NEVERA调用B以无事务方式执行A如有事务则抛出异常MEADATORYA调用B,B要加入A的事务中如果A无事务就抛出异常NESTEDA调用B,B创建一个新事务,A有事务就作为嵌套事务存在,A没事务就以创建的新事务执行 基于注解声明式事务控制 Service(accountService) Transactional(isolation Isolation.READ_COMMITTED,propagation Propagation.REQUIRED) public class AccountServiceImpl implements AccountService {Autowiredprivate AccountMapper accountMapper;OverrideTransactional(isolation Isolation.READ_COMMITTED,propagation Propagation.REQUIRED)public void transferMoney(String outAccount,String inAccount,Integer money) {accountMapper.decrMoney(outAccount,money);accountMapper.incrMoney(inAccount,money);}public void registerAccout () {}}xml中 !--组件扫描-- context:component-scan base-packagecom.luxifa/!--加载properties文件-- context:property-placeholder locationclasspath:jdbc:properties/!--配置数据源信息-- bean iddataSource classcom.alibaba.druid.pool.DruidDataSourceproperty namedriverClassName value${jdbc.driver}/propertyproperty nameurl value${jdbc.url}/propertyproperty nameusername value${jdbc.username}/propertyproperty namepassword value${jdbc.password}/property /bean!--配置SqlSessionFactoryBean,作用将SqlSessionFactory存储到spring容器-- bean classorg.mybatis.spring.SqlSessionFactoryBeanproperty namedataSource refdataSource/property /bean!--MapperScannerConfigurer,作用扫描指定的包,产生Mapper对象存储到Spring容器-- bean classorg.mybatis.spring.mapper.MapperScannerCongigurerproperty namebasePackage valuecom.luxifa.mapper/property /bean!--配置平台事务管理器-- bean idtransactionManager classorg.springframework.jdbc.datasource.DataSourceTransationManagerproperty namedataSource refdataSource/ /beanxml中xml !--组件扫描-- context:component-scan base-packagecom.luxifa/!--加载properties文件-- context:property-placeholder locationclasspath:jdbc:properties/!--配置数据源信息-- bean iddataSource classcom.alibaba.druid.pool.DruidDataSourceproperty namedriverClassName value${jdbc.driver}/propertyproperty nameurl value${jdbc.url}/propertyproperty nameusername value${jdbc.username}/propertyproperty namepassword value${jdbc.password}/property /bean!--配置SqlSessionFactoryBean,作用将SqlSessionFactory存储到spring容器-- bean classorg.mybatis.spring.SqlSessionFactoryBeanproperty namedataSource refdataSource/property /bean!--MapperScannerConfigurer,作用扫描指定的包,产生Mapper对象存储到Spring容器-- bean classorg.mybatis.spring.mapper.MapperScannerCongigurerproperty namebasePackage valuecom.luxifa.mapper/property /bean!--配置平台事务管理器-- bean idtransactionManager classorg.springframework.jdbc.datasource.DataSourceTransationManagerproperty namedataSource refdataSource/ /bean!--事务的自动代理(注解驱动)-- tx:annotation-driven transaction-managertransactionManager/使用全注解方式: Configuration ComponentScan(com.luxifa) PropertySource(classpath:jdbc.properties) MapperScan(com.luxifa.mapper) EnableTransactionManagement //tx:annotation-driven/ public class SpringConfig {public DataSource dataSource(Value(${jdbc.driver} String driver,Value({jdbc.url} String url,Value(${jdbc.username}),Value(${jdbc.password}) {DruidDataSource dataSource new DruidDataSource();dataSource.setDriverClassName(driver);dataSource.setUrl(url);dataSource.setUsername(username);dataSource.setPassword(password);return dataSource;}Beanpublic SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource) {SqlSessionFactoryBean sqlSessionFactoryBean new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);return sqlSessionFactoryBean;}Beanpublic DataSourceTransactionManager transactionManager (DataSource daaSource) {DataSourceTRansactionManager dataSourceTransactionManager new DataSourceTransactionManager();dataSourceTransactionManager.setDataSource(dataSource);return dataSourceTransactionManager;}}测试类: public class AccountTest {public static void main(String[] args) {ApplicationContext app new AnnotationConfigApplicationContext(SpringConfig.class);AccountService accountService app.getBean(AccountService.class);accountService.transferMoney(tom,lucy,500);} }
http://www.hkea.cn/news/14505191/

相关文章:

  • 郑州网站优化汉狮网络网站开发项目教程笔记
  • 我想做个网站怎么做的电子商务网站建设与管理的论文总结
  • 优秀设计工作室网站戴尔的网站建设
  • 建筑网站首页杭州赛虎网站建设
  • 网站建设与维护工作wordpress主机 seo
  • 网站建设的业务范围dw网页设计与制作
  • 十大下载网站免费安装广东app开发公司
  • 济南做网站哪家公司好浙江省住房和城乡建设厅官网证件查询
  • 做游戏人设计网站wordpress 建立数据库连接时出错 重启数据库
  • 做衬衫的作业网站天河网站建设开发
  • 如何成立一个房产网站保定建设环境项目网站
  • 目前做网站的好处0基础做网站多久
  • 微信 网站应用开发营销网站 需求说明书
  • app使用什么做的网站中国互联网平台
  • 高性能网站建设进阶指南pdf怎么用服务器搭建网站
  • 个人网站建设基础与实例wordpress映射不出去
  • 长沙网络安全公司张家界seo优化方案
  • 网站怎么实现手机号注册会员公司起名字推荐
  • 北京做网站哪家公司好云南网网站
  • 佛山移动网站建设费用前端和网站开发的区别
  • 中英文外贸网站模板 生成静态html企业网站推广文案
  • 仁怀哪里可以做网站百度服务
  • 建立网站需要多少钱 激发湖南岚鸿合肥seo排名扣费
  • 网站建设轮播图wordpress+登陆图标
  • 东莞化工网站建设注册网站一年多少钱
  • 网站建设ui设计公司苏州网页制作公司哪家好
  • 云服务器搭建个人网站工业和信息化部装备工业发展中心
  • 什么网站做弹窗广告好自己做网站怎么推广
  • 杭州市拱墅区网站建设网站标题乱码
  • 在重庆_那里可以做诚信网站认证上海公共招聘官网