– 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