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

南山网站建设深圳信科优化网站平台

南山网站建设深圳信科,优化网站平台,长沙市做网站公司排名,程序开发用什么笔记本一、事务管理 一个数据库事务是一个被视为单一的工作单元操作序列。 事务管理有四个原则#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.hkea.cn/news/14526779/

相关文章:

  • 网站模板html5营销培训计划
  • 修改散文网站wordpress新建404页面
  • 网站首页设计过程查找网站注册时间
  • 苏州网站建设新手网站是自己做还是让别人仿
  • 个人网站有商业内容备案长沙高端网站建设品牌
  • wordpress中的角色优化网站公司外包
  • 体检中心 网站建设方案贵阳建设厅网站
  • 网站建设设计报价网站管理登录
  • 自定义网站建站公司南京公司网站建设费用
  • 桂林市网站设计wordpress宗旨是什么
  • wordpress网站不显示系列宁波专业网站搭建地址
  • 医药类网站建设评价手机端网站建设哪家好
  • 新东方广州门户网站网站线下推广方式
  • 中国建设银行的网站首页网站维护需要关闭网站么
  • 宁波网站推广优化中企动力科技股份有限公司成都分公司
  • 北京网站建设公司网络营销外包网络建站报价重庆网站建设哪个好
  • 关键词优化软件排行seo技术培训教程
  • 合肥市公司网站建设网站后台权限管理
  • 南京建设工程质量监督站网站阳江市房产网
  • 网站官网现在建设的网站有什么劣势
  • 建设网站制作公司淘宝客网站搭建
  • 宣武富阳网站建设网站建设网络宣传
  • 网站建设执行力网站模块图
  • php网站怎么样鄂尔多斯市住房和城乡建设厅网站
  • 怎么做阿里巴巴国际网站首页wordpress怎么使用固定连接
  • 公司网站设计的公司雅布设计有多牛
  • 滨州聊城网站建设怎样开发网站建设
  • 广州网站推广模板怎么做网站写书
  • 湖南省建设局官方网站百度首页的ip地址
  • 百度小说百度seo快速排名优化