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

西安门户网站网页链接怎么转换成pdf

西安门户网站,网页链接怎么转换成pdf,网页制作视频教程哪个网址好,wordpress 小论坛一、事务管理 一个数据库事务是一个被视为单一的工作单元操作序列。 事务管理有四个原则,被成为ACID: Atomicity 原子性—— 事务作为独立单元进行操作,整个序列是一体的,操作全都成功或失败。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.jar
  • mysql-connector.jar
  • transaction.jar

pom.xml

		<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.23</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.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 List<User> listUsers();
}

步骤四:创建Mapper层

UserMapper.java

public class UserMapper implements RowMapper<User> {@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 List<User> listUsers() {sql = "select * from user u,marks m where u.id = m.sid";return jdbcTemplate.query(sql,new UserMapper());}}

步骤六:bean配置

jdbc.xml

<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/test?useSSL=false"/><property name="username" value="root"/><property name="password" value="123456"/></bean><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><bean id="userJDBCTemplate" class="org.example.Template.UserJdbcTemplate"><property name="dataSource" ref="dataSource" /><property name="platform" ref="transactionManager" /></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 version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://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 id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/TEST"/><property name="username" value="root"/><property name="password" value="123456"/></bean>##AOP框架中实际调用的方法<tx:advice id="txAdvice"  transaction-manager="transactionManager">##目标<tx:attributes>##锚定方法<tx:method name="create"/></tx:attributes></tx:advice>##配置aop框架,设置切入点,加载advice<aop:config><aop:pointcut id="createOperation" expression="execution(* com.tutorialspoint.StudentJDBCTemplate.create(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="createOperation"/></aop:config>##初始化事务管理器<bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource"  ref="dataSource" />    </bean>#初始化template<bean id="studentJDBCTemplate"  class="com.tutorialspoint.StudentJDBCTemplate"><property name="dataSource"  ref="dataSource" />  </bean></beans>
http://www.yayakq.cn/news/295681/

相关文章:

  • 熊掌号做网站推广的注意事项百度推广系统营销平台
  • 网站建设的作用和意义抖音代运营协议书范本
  • 手机网站免费模板下载酷家乐在线设计官网
  • 做网站如何寻找客源网站的搜索功能一般怎么做
  • 建设银行e房通网站客户crm管理系统
  • 贵阳金阳网站建设公司什么是外包
  • 怎样向网站上传照片域名有了怎么做网站
  • html个人网页制作源代码中小型企业网站优化
  • 网站版式类型吉林省建设厅网站
  • 404做的好的网站seo排名优化app
  • 中国建设部网站官网网店详情页面设计
  • 广州网站建设网络推广直播网站建设需要什么软件
  • 建设众筹类网站江西旺达建设工程有限公司网站
  • 关于做网站流程大型在线网站建设
  • 用php做网站视频2018年做网站
  • 做网站所需要的代码6网站开发的编程语言有哪些
  • 嘉兴市建设局网站wordpress yilia主题
  • 新手做网站怎么上传系统营销策划公司职位
  • 医药网站怎么做网站建设基础筹备
  • 网站源码 下载附近广告公司联系电话
  • 网站图片被盗连怎么办大连网站建设制作
  • wordpress手机底部菜单杭州seo关键词优化哪家好
  • 中国各大网站名称高唐网站
  • 专业的上海网站建设公司哪家好网站建设上线问题
  • 台州网站建设方案推广专业网站建设联系
  • 网站建设与管理 自考那个网站做系统好
  • 设置网站域名wordpress 缩略图 截取
  • 做职业规划的网站苏州十大广告公司
  • 一家做土产网站wordpress add_post_meta
  • 众创空间网站建设方案宁波建设工程有限公司