博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring 程序式事务管理
阅读量:4050 次
发布时间:2019-05-25

本文共 5452 字,大约阅读时间需要 18 分钟。

– 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.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
() { 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;	}}

– 声 明:转载请注明出处
– Last Updated on 2017-06-13
– Written by ShangBo on 2017-06-13
– End

你可能感兴趣的文章
GCD小结
查看>>
IOS 第三方库介绍
查看>>
iPhone架构xmpp聊天工具 -xmpp协议初识《一》
查看>>
iOS提交后申请加急审核
查看>>
iOS7单元测试
查看>>
ios framework 通用库的制作
查看>>
出现( linker command failed with exit code 1)错误总结
查看>>
iOS开发中一些常见的并行处理
查看>>
iOS获取手机的Mac地址
查看>>
ios7.1发布企业证书测试包的问题
查看>>
如何自定义iOS中的控件
查看>>
iOS 开发百问
查看>>
Mac环境下svn的使用
查看>>
github简单使用教程
查看>>
如何高效利用GitHub
查看>>
GitHub详细教程
查看>>
Swift概览
查看>>
iOS系统方法进行AES对称加密
查看>>
程序内下载App,不用跳转到AppStore
查看>>
iOS应用崩溃日志分析
查看>>