本文共 5452 字,大约阅读时间需要 18 分钟。
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