Spring 程序式事务管理

– Start
点击此处观看本系列配套视频。


package shangbo.spring.transaction.jdbc.programmatic;

public class Job {
	private String jobId;
	private String jobTitle;
	private Integer minSalary;
	private Integer maxSalary;

	public String getJobId() {
		return jobId;
	}

	public void setJobId(String jobId) {
		this.jobId = jobId;
	}

	public String getJobTitle() {
		return jobTitle;
	}

	public void setJobTitle(String jobTitle) {
		this.jobTitle = jobTitle;
	}

	public Integer getMinSalary() {
		return minSalary;
	}

	public void setMinSalary(Integer minSalary) {
		this.minSalary = minSalary;
	}

	public Integer getMaxSalary() {
		return maxSalary;
	}

	public void setMaxSalary(Integer maxSalary) {
		this.maxSalary = maxSalary;
	}

	public String toString() {
		return "Job[jobId=" + jobId + ", jobTitle=" + jobTitle + ", minSalary=" + minSalary + ", maxSalary=" + maxSalary + "]";
	}
}

package shangbo.spring.transaction.jdbc.programmatic;

import javax.sql.DataSource;

import org.springframework.transaction.PlatformTransactionManager;

public interface BusinessService {
	Job getJob(String jobId);

	void insertJob(Job job);

	void updateJob(Job job);

	void setDataSource(DataSource dataSource);

	void setTransactionManager(PlatformTransactionManager transactionManager);
}


package shangbo.spring.transaction.jdbc.programmatic;

import javax.sql.DataSource;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;

public class DefaultBusinessService implements BusinessService {
	private TransactionTemplate transactionTemplate;
	private JdbcTemplate jdbcTemplate;

	public Job getJob(String jobId) {
		String sql = "SELECT * FROM HR.JOBS WHERE JOB_ID = ?";
		return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Job>(Job.class), jobId);
	}

	public void updateJob(final Job job) {
		final String sql = "UPDATE HR.JOBS SET JOB_TITLE=?, MIN_SALARY = ?, MAX_SALARY = ? WHERE JOB_ID = ?";

		// 手动控制事务,没有返回值使用 TransactionCallbackWithoutResult
		transactionTemplate.execute(new TransactionCallbackWithoutResult() {
			protected void doInTransactionWithoutResult(TransactionStatus status) {
				jdbcTemplate.update(sql, job.getJobTitle(), job.getMinSalary(), job.getMaxSalary(), job.getJobId());
			}
		});
	}

	public void insertJob(final Job job) {
		final String sql = "INSERT INTO HR.JOBS VALUES (?, ?, ?, ?)";

		// 手动控制事务,有返回值使用 TransactionCallback
		transactionTemplate.execute(new TransactionCallback<Integer>() {
			public Integer doInTransaction(TransactionStatus status) {
				return jdbcTemplate.update(sql, job.getJobId(), job.getJobTitle(), job.getMinSalary(), job.getMaxSalary());
			}
		});
	}

	public void setDataSource(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}

	public void setTransactionManager(PlatformTransactionManager transactionManager) {
		this.transactionTemplate = new TransactionTemplate(transactionManager);
	}

}


package shangbo.spring.transaction.jdbc.programmatic;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement // 开启事务管理
public class AppConfig {

	@Bean
	public BasicDataSource dataSource() {
		BasicDataSource dataSource = new BasicDataSource();
		dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");
		dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
		dataSource.setUsername("hr");
		dataSource.setPassword("123456");

		return dataSource;
	}

	@Bean
	public PlatformTransactionManager transactionManager(DataSource dataSource) {
		DataSourceTransactionManager txManager = new DataSourceTransactionManager();
		txManager.setDataSource(dataSource);

		return txManager;
	}

	@Bean
	public BusinessService businessService(DataSource dataSource, PlatformTransactionManager transactionManager) {
		BusinessService businessService = new DefaultBusinessService();
		businessService.setDataSource(dataSource);
		businessService.setTransactionManager(transactionManager);

		return businessService;
	}

}


package shangbo.spring.transaction.jdbc.programmatic;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class App {

	public static void main(String[] args) throws Exception {
		// 实例化 Spring IoC 容器
		ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

		// 从容器中获得 BusinessService 的实例
		BusinessService service = context.getBean(BusinessService.class);

		// 使用 BusinessService
		// 插入 job
		Job job = newJob();
		// service.insertJob(job);

		// 更新 job
		service.updateJob(job);

		// 查询 job
		System.out.println(service.getJob("IT"));
	}

	private static Job newJob() {
		Job job = new Job();
		job.setJobId("IT");
		job.setJobTitle("IT Engineer");
		job.setMinSalary(3);
		job.setMaxSalary(100000);

		return job;
	}
}

更多参见:Spring Framework 精萃
– 声 明:转载请注明出处
– Last Updated on 2017-06-13
– Written by ShangBo on 2017-06-13
– End

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值