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

无为县住房建设局网站wordpress版微信小程序

无为县住房建设局网站,wordpress版微信小程序,国内十大管理咨询公司,wordpress企业单页模板一、事务管理 一个数据库事务是一个被视为单一的工作单元操作序列。 事务管理有四个原则#xff0c;被成为ACID#xff1a; Atomicity 原子性—— 事务作为独立单元进行操作#xff0c;整个序列是一体的#xff0c;操作全都成功或失败。Consistency 一致性—— 引用完整…一、事务管理 一个数据库事务是一个被视为单一的工作单元操作序列。 事务管理有四个原则被成为ACID Atomicity 原子性—— 事务作为独立单元进行操作整个序列是一体的操作全都成功或失败。Consistency 一致性—— 引用完整性的一致性表中唯一的主键等。Isolation 隔离性—— 每个事务同时处理时事务之间不会干预Durability 持久性 事务一旦完成结果是不可逆的不会因为故障而失效 那么一个关系型数据库将保证事务有这四个原则。 使用SQL发布到数据库中的事务简单视图如下 使用begin transaction命令开始事务使用SQL查询语句执行更新操作如果操作都成功则提交操作否则回滚操作 Spring 事务支持 Spring框架在不同底层事务管理API的顶部提供了一个抽象层。Spring事务支持主要通过添加事务能力到POJO来提供EJB事务。Spring支持编程式和声明式事务管理。EJB需要一个应用程序服务器但Spring事务管理可以不需要应用程序服务器。 全局事务与局部事务 局部事务 它是一个特定单一事务资源例如一个JDBC连接。 若你的生产环境是集中的该环境中的程序组件和资源位于一个位置而事务管理只涉及到一个运行 单一机器中的本地数据管理器则适用局部事务。 全局事务 它可以跨多个事务资源如一个分布式系统中的事务。 若你的生产环境是分散的所有资源分布在多个系统中则需要局部事务和全局事务管理。 分布式或全局事务跨多个系统执行它的执行需要全局事务管理系统和所有相关系统的局部数据管理人员之间的协调。 编程式与声明式事务管理 编程式事务管理 用编程的方式进行事务管理灵活性较高但维护性差。声明式事务管理 从业务代码中分离事务管理仅使用注释或XML配置来管理事务。 声明式事务管理比编程式事务管理更适合它可以使用AOP方法进行模块化Spring AOP框架也可以用来进行声明式事务管理。 Spring事务抽象 Spring事务管理的五大属性隔离级别传播行为只读属性事务超时回滚规则 隔离级别 默认 TransactionDefinition.ISOLATION_DEFAULT读取提交内容 TransactionDefinition.ISOLATION_READ_COMMITTED 能阻止误读可发生不可重复读和虚读。读取未提交内容 TransactionDefinition.ISOLATION_READ_UNCOMMITTED 可以发生误读、不可重复读和虚读。可重读内容 TransactionDefinition.ISOLATION_REPEATABLE_READ 表明能够阻止误读和不可重复读可以发生虚读。可串行化 TransactionDefinition.ISOLATION_SERIALIZABLE 表明能够阻止误读、不可重复读和虚读。 传播行为 支持当前事务 TransactionDefinition.PROPAGATION_MANDATORY支持当前事务在嵌套事务执行 TransactionDefinition.PROPAGATION_NESTED不支持当前事务 TransactionDefinition.PROPAGATION_NEVER不支持当前事务总是执行非事务性 TransactionDefinition.PROPAGATION_NOT_SUPPORTED支持当前事务若不存在则创建新事务 TransactionDefinition.PROPAGATION_REQUIRED创建新事务将当前事务挂起 TransactionDefinition.PROPAGATION_REQUIRES_NEW支持当前事务若不存在则执行非事务性 TransactionDefinition.PROPAGATION_SUPPORTS使用默认超时底层事务系统若不支持超时则没有传播行为 TransactionDefinition.TIMEOUT_DEFAULT 事务抽象 Spring事务抽象由org.springframework.transaction.PlatformTransactionManager接口定义。 public interface PlatformTransactionManager{//根据传播行为返回当前活动事务或创建新事务TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;//提交事务以及事务状态void commit(TransactionStatus status) throws TransactionException;//执行事务回滚void rollback(TransactionStatus status) throws TransactionException; }TransactionDefinition接口是Spring事务支持的核心接口定义如下 public interface TransactionDefinition{int getPropagationBehavior(); //获取传播行为int getIsolationLevel(); //获取隔离级别String getName(); //获取事务名称int getTimeout(); //获取事务超时时间boolean isReadOnly(); //获取只读属性 }TransactionStatus接口为事务代码提供简单方法来控制事务执行和查询事务状态。 public interface TransactionStatus extends SavepointManager{boolean isNewTransaction(); //是否为新事务boolean hasSavepoint(); //该事务内部是否有一个保存点也就是说基于一个保存点已经创建了嵌套事务。void setRollbackOnly(); //该方法设置该事务为 rollback-only 标记。boolean isRollbackOnly(); //该事务是否已标记为 rollback-only。boolean isCompleted(); //事务是否已经提交或回滚。 }二、编程式事务管理 我们尝试一下如何进行编程式事务管理。 步骤一添加依赖包 jdbc.jarmysql-connector.jartransaction.jar pom.xml dependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion5.3.23/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.47/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-tx/artifactIdversion5.3.24/version/dependency步骤二创建POJO类 User.java public class User{private Integer id;private String name;private Integer age;private Integer marks;private Integer year;private Integer sid;public User() {}public User(Integer id, String name, Integer age) {this.id id;this.name name;this.age age;}public User(Integer id, String name, Integer age, Integer marks, Integer year, Integer sid) {this.id id;this.name name;this.age age;this.marks marks;this.year year;this.sid sid;}public Integer getId() {return id;}public void setId(Integer id) {this.id id;}public String getName() {return name;}public void setName(String name) {this.name name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age age;}public Integer getMarks() {return marks;}public void setMarks(Integer marks) {this.marks marks;}public Integer getYear() {return year;}public void setYear(Integer year) {this.year year;}public Integer getSid() {return sid;}public void setSid(Integer sid) {this.sid sid;}Overridepublic String toString() {return User{ id id , name name \ , age age , marks marks , year year , sid sid };} }步骤三创建dao层 UserDao.java public interface UserDao {public void setDataSource(DataSource ds);public void create(String name,Integer age,Integer marks,Integer year);public ListUser listUsers(); }步骤四创建Mapper层 UserMapper.java public class UserMapper implements RowMapperUser {Overridepublic User mapRow(ResultSet rs, int rowNum) throws SQLException {return new User(rs.getInt(id),rs.getString(name),rs.getInt(age), rs.getInt(marks),rs.getInt(year),rs.getInt(sid));} }步骤五创建Template层 UserJdbcTemplate.java public class UserJdbcTemplate implements UserDao {private DataSource dataSource;private JdbcTemplate jdbcTemplate;private PlatformTransactionManager platform;private String sql;public void setPlatform(PlatformTransactionManager platform) {this.platform platform;}Overridepublic void setDataSource(DataSource ds) {this.dataSource ds;this.jdbcTemplate new JdbcTemplate(dataSource);}Overridepublic void create(String name, Integer age, Integer marks, Integer year) {TransactionDefinition definition new DefaultTransactionDefinition();TransactionStatus status platform.getTransaction(definition);try {sql insert into user (name,age) values(?,?);jdbcTemplate.update(sql,name,age);sql select max(id) from user;int sid jdbcTemplate.queryForInt(sql,null,Integer.class);sql insert into marks(sid,marks,year) values (?,?,?);jdbcTemplate.update(sql,sid,marks,year);System.out.println(提交);platform.commit(status);}catch (DataAccessException e){System.out.println(Error in creating record,rolling back);platform.rollback(status);throw e;}return;}Overridepublic ListUser listUsers() {sql select * from user u,marks m where u.id m.sid;return jdbcTemplate.query(sql,new UserMapper());}}步骤六bean配置 jdbc.xml bean iddataSource classorg.springframework.jdbc.datasource.DriverManagerDataSourceproperty namedriverClassName valuecom.mysql.jdbc.Driver/property nameurl valuejdbc:mysql://localhost:3306/test?useSSLfalse/property nameusername valueroot/property namepassword value123456//beanbean idtransactionManager classorg.springframework.jdbc.datasource.DataSourceTransactionManagerproperty namedataSource refdataSource //beanbean iduserJDBCTemplate classorg.example.Template.UserJdbcTemplateproperty namedataSource refdataSource /property nameplatform reftransactionManager //bean输出结果 回滚事件 ------Records creation-------- Error in creating record,rolling back Exception in thread main org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [select max(id) form user]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near user at line 1at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1541)at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:393)at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:465)at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:475)at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:508)at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:515)at org.example.Template.UserJdbcTemplate.create(UserJdbcTemplate.java:46)at org.example.Main.main(Main.java:26) Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near user at line 1at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:423)at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)at com.mysql.jdbc.Util.getInstance(Util.java:408)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3978)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3914)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2491)at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2449)at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1381)at org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:452)at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:381)... 6 more三、声明式事务管理 我们来尝试一下声明式事务管理 这里展示与编程式事务管理的不同的地方。 1、Template类不再有PlatformTransactionManager参与即正常的JDBC框架内容。 2、配置文件jdbc.xml声明tx命名空间aop命名空间装配事务管理和面向切面配置 jdbc.xml ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:txhttp://www.springframework.org/schema/txxmlns:aophttp://www.springframework.org/schema/aopxsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.0.xsd!-- 初始化数据库连接池 --bean iddataSource classorg.springframework.jdbc.datasource.DriverManagerDataSourceproperty namedriverClassName valuecom.mysql.jdbc.Driver/property nameurl valuejdbc:mysql://localhost:3306/TEST/property nameusername valueroot/property namepassword value123456//bean##AOP框架中实际调用的方法tx:advice idtxAdvice transaction-managertransactionManager##目标tx:attributes##锚定方法tx:method namecreate//tx:attributes/tx:advice##配置aop框架设置切入点加载adviceaop:configaop:pointcut idcreateOperation expressionexecution(* com.tutorialspoint.StudentJDBCTemplate.create(..))/aop:advisor advice-reftxAdvice pointcut-refcreateOperation//aop:config##初始化事务管理器bean idtransactionManagerclassorg.springframework.jdbc.datasource.DataSourceTransactionManagerproperty namedataSource refdataSource / /bean#初始化templatebean idstudentJDBCTemplate classcom.tutorialspoint.StudentJDBCTemplateproperty namedataSource refdataSource / /bean/beans
http://www.tj-hxxt.cn/news/226752.html

相关文章:

  • 昆明建设局网站号码cm域名网站
  • 网站模板编辑微信公众平台小程序二维码怎么生成
  • 网站设计要学哪些大数据比较好的培训机构
  • 柳州网站建设价格dx网站是哪家公司做的
  • 手机网站规划福田庆三整过的明星
  • 网站代码框架做网站设计的论文中摘要怎么写
  • 宁国网站开发网站建设公司广告标题语
  • 毕业设计做网站老师会问什么网站开发人才需求
  • 国外购物网站建设黄骅市医院
  • 网站 规划乌市正规网站建设
  • 做博客网站怎么赚钱吗网页设计代码大全div
  • 建筑建设行业网站无锡网站建设报价明细表
  • 自己做网站投放有流量么代理公司注册哪家好
  • 揭阳网站建设antnw谷歌代运营
  • 外包公司做的网站怎么改密码wordpress怎么修改登录界面
  • 济宁网站建设找哪家网站品牌词优化怎么做
  • 空间放两个网站大作设计网站官网下载
  • 织梦网站怎样做seo华为开发者选项在哪里打开
  • 网站制作留钱建设服装网站的亮点
  • 如何在工商局网站做身份确认网站架构原理
  • 苏州品牌网站设计开发自己做博客网站和百家号的区别
  • 建网站需要什么手续鹰枭乱wordpress
  • 网站开发哪种框架旅游公司网站难做吗
  • 对网站建设课程的心得体会搜狐做app的网站
  • wordpress改写rewrite哈尔滨快照优化
  • 网站开发实习个人小结微信推广网站
  • 免费营销网站制作模板楚雄市网站建设公司
  • seo建站公司推荐网页建设推荐
  • 网站建设项目经历网页转微信小程序
  • 营销网站的关键字wordpress 漏洞利用