当前位置 : 主页 > 网络编程 > 其它编程 >

spring简易学习笔记四(jdbcTemplate和事务控制)

来源:互联网 收集:自由互联 发布时间:2023-07-02
一、jdbcTemplate1、概述JdbcTemplate是spring框架中提供的一对象对原始JdbcAPI对象进行了简单封装。spring框 一、jdbcTemplate 1、概述 JdbcTemplate是spring框架中提供的一对象对原始Jdbc API对象进行了简
一、jdbcTemplate1、概述JdbcTemplate是spring框架中提供的一对象对原始JdbcAPI对象进行了简单封装。spring框

一、jdbcTemplate

1、概述 JdbcTemplate是spring框架中提供的一对象对原始Jdbc API对象进行了简单封装。spring框架提供了多个操作模板类。如操作关系型数据的JdbcTemplate和HibernateTemplate操作nosql数据库的RedisTemplate操作消息队列的JmsTemplate等。 2、开发步骤 ①导入spring-jdbc和spring-tx坐标

4.0.0com.itheimaitheima_spring_jdbc1.0-SNAPSHOTwaritheima_spring_jdbc Maven Webapphttp://www.example.commysqlmysql-connector-java5.1.32c3p0c3p00.9.1.2com.alibabadruid1.1.10junitjunit4.12org.springframeworkspring-context5.0.5.RELEASEorg.springframeworkspring-test5.0.5.RELEASEorg.springframeworkspring-web5.0.5.RELEASEorg.springframeworkspring-webmvc5.0.5.RELEASEjavax.servletjavax.servlet-api3.0.1providedjavax.servlet.jspjavax.servlet.jsp-api2.2.1providedcom.fasterxml.jackson.corejackson-core2.9.0com.fasterxml.jackson.corejackson-databind2.9.0com.fasterxml.jackson.corejackson-annotations2.9.0commons-fileuploadcommons-fileupload1.3.1commons-iocommons-io2.3org.springframeworkspring-jdbc5.0.5.RELEASEorg.springframeworkspring-tx5.0.5.RELEASE

②创建数据库表和实体 在这里插入图片描述

package com.itheima.domain;public class Account {private String name;private double money;public String getNa me() {return name;}public void setName(String name) {this.name name;}public double getMoney() {return money;}public void setMoney(double money) {this.money money;}Overridepublic String toString() {return "Account{" "name" name \ ", money" money };}}

③创建JdbcTemplate对象

Test//测试JdbcTemplate开发步骤public void test1() throws PropertyVetoException {//创建数据源对象ComboPooledDataSource dataSource new ComboPooledDataSource();dataSource.setDriverClass("com.mysql.jdbc.Driver");dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");dataSource.setUser("root");dataSource.setPassword("root");JdbcTemplate jdbcTemplate new JdbcTemplate();//设置数据源对象 知道数据库在哪jdbcTemplate.setDataSource(dataSource);//执行操作int row jdbcTemplate.update("insert into account values(?,?)", "tom", 5000);System.out.println(row);}

④执行数据库操作

Test//测试JdbcTemplate开发步骤public void test1() throws PropertyVetoException {//创建数据源对象ComboPooledDataSource dataSource new ComboPooledDataSource();dataSource.setDriverClass("com.mysql.jdbc.Driver");dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");dataSource.setUser("root");dataSource.setPassword("root");JdbcTemplate jdbcTemplate new JdbcTemplate();//设置数据源对象 知道数据库在哪jdbcTemplate.setDataSource(dataSource);//执行操作更新数据库插入一条数据int row jdbcTemplate.update("insert into account values(?,?)", "tom", 5000);System.out.println(row);}

二、事务控制

1、事务隔离级别设置隔离级别可解决事务并发产生的问题如脏读、不可重复读和虚读

  • ISOLATION_DEFAULT 默认

  • ISOLATION_READ_UNCOMMITTED 读未提交

  • ISOLATION_READ_COMMITTED 读已提交

  • ISOLATION_REPEATABLE_READ 可重复读

  • ISOLATION_SERIALIZABLE 串行化

2、事务传播行为

  • REQUIRED如果当前没有事务就新建一个事务如果已经存在一个事务中加入到这个事务中。一般的选择默认值

  • SUPPORTS支持当前事务如果当前没有事务就以非事务方式执行没有事务

  • MANDATORY使用当前的事务如果当前没有事务就抛出异常

  • REQUERS_NEW新建事务如果当前在事务中把当前事务挂起。

  • NOT_SUPPORTED以非事务方式执行操作如果当前存在事务就把当前事务挂起

  • NEVER以非事务方式运行如果当前存在事务抛出异常

  • NESTED如果当前存在事务则在嵌套事务内执行。如果当前没有事务则执行 REQUIRED 类似的操作

  • timeout:超时时间,默认值是-1没有超时限制。如果有以秒为单位进行设置

  • read-only:是否只读,建议查询时设置为只读 3、声明式事务控制的实现(Spring 声明式事务控制底层就是AOP) 步骤基于xml ①引入tx命名空间

②配置事务增强

③配置事务 AOP 织入

④测试事务控制转账业务代码

Overridepublic void transfer(String outMan, String inMan, double money) {accountDao.out(outMan,money);int i 1/0;accountDao.in(inMan,money);}

步骤基于注解

  • 编写 AccoutDao
  • Repository("accountDao")public class AccountDaoImpl implements AccountDao {Autowiredprivate JdbcTemplate jdbcTemplate;public void out(String outMan, double money) {jdbcTemplate.update("update account set moneymoney-? where name?",money,outMan);}public void in(String inMan, double money) {jdbcTemplate.update("update account set moneymoney? where name?",money,inMan);}}

  • 编写 AccoutService
  • Service("accountService")Transactionalpublic class AccountServiceImpl implements AccountService {Autowiredprivate AccountDao accountDao;Transactional(isolation Isolation.READ_COMMITTED,propagation Propagation.REQUIRED)public void transfer(String outMan, String inMan, double money) {accountDao.out(outMan,money);int i 1/0;accountDao.in(inMan,money);}}

  • 编写 applicationContext.xml 配置文件
  • 其中

    ①使用 Transactional 在需要进行事务控制的类或是方法上修饰注解可用的属性同 xml 配置方式例如隔离级别、传播行为等。

    ②注解使用在类上那么该类下的所有方法都使用同一套注解参数配置。

    ③使用在方法上不同的方法可以采用不同的事务参数配置。

    ④Xml配置文件中要开启事务的注解驱动

    【转自:东台网站开发公司 http://www.1234xp.com/dongtai.html 欢迎留下您的宝贵建议】
    上一篇:此文献给想成为Web前台工程师的你!
    下一篇:没有了
    网友评论