栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring JDBC与事务管理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring JDBC与事务管理

文章目录
  • 一、Spring JDBC是什么?
  • 二、Spring JDBC配置过程
  • 三、JdbcTemplate的数据查询方法
  • 四、JdbcTemplate数据写入
  • 五、编程式事务
  • 六、声明式事务
    • 1.事务传播行为
  • 七、注解配置声明式事务


一、Spring JDBC是什么?


二、Spring JDBC配置过程

applicationContext.xml



    
        
        
        
        
    

    
    
        
    

    
        
    


EmployeeDao.class

public class EmployeeDao {
    private JdbcTemplate jdbcTemplate;

    public Employee findById(Integer eno){
        String sql = "select * from employee where eno=?";
        Employee employee = jdbcTemplate.queryForObject(sql, new Object[]{eno}, new BeanPropertyRowMapper(Employee.class));
        return employee;
    }

    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
}

SpringApplication.class

public class SpringApplication {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        EmployeeDao employeeDao = context.getBean("employeeDao", EmployeeDao.class);
        Employee employee = employeeDao.findById(3308);
        System.out.println(employee);
    }
}
三、JdbcTemplate的数据查询方法

EmployeeDao.class

public class EmployeeDao {
    private JdbcTemplate jdbcTemplate;

    public Employee findById(Integer eno){
        String sql = "select * from employee where eno=?";
        Employee employee = jdbcTemplate.queryForObject(sql, new Object[]{eno}, new BeanPropertyRowMapper(Employee.class));
        return employee;
    }

    public List findByDname(String dname){
        String sql = "select * from employee where dname = ?";
        List list = jdbcTemplate.query(sql, new Object[]{dname}, new BeanPropertyRowMapper(Employee.class));
        return list;
    }

    public List> findMapByDname(String dname){
        String sql = "select eno as empno, salary as s from employee where dname=?";
        List> maps = jdbcTemplate.queryForList(sql, new Object[]{dname});
        return maps;
    }


    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
}

Test

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class JdbcTemplateTestor {
    @Resource
    private EmployeeDao employeeDao;

    @Test
    public void testFindById(){
        Employee employee = employeeDao.findById(3308);
        System.out.println(employee);
    }

    @Test
    public void testFindByDname(){
        System.out.println(employeeDao.findByDname("市场部"));
    }

    @Test
    public void testFindMapByDname(){
        System.out.println(employeeDao.findMapByDname("研发部"));
    }
}
四、JdbcTemplate数据写入

EmployeeDao.class

public class EmployeeDao {
    private JdbcTemplate jdbcTemplate;

    public Employee findById(Integer eno){
        String sql = "select * from employee where eno=?";
        Employee employee = jdbcTemplate.queryForObject(sql, new Object[]{eno}, new BeanPropertyRowMapper(Employee.class));
        return employee;
    }

    public List findByDname(String dname){
        String sql = "select * from employee where dname = ?";
        List list = jdbcTemplate.query(sql, new Object[]{dname}, new BeanPropertyRowMapper(Employee.class));
        return list;
    }

    public List> findMapByDname(String dname){
        String sql = "select eno as empno, salary as s from employee where dname=?";
        List> maps = jdbcTemplate.queryForList(sql, new Object[]{dname});
        return maps;
    }

    public void insert(Employee employee){
        String sql = "insert into employee(eno,ename,salary,dname,hiredate) values(?,?,?,?,?)";
        jdbcTemplate.update(sql,new Object[]{
           employee.getEno(),employee.getEname(),employee.getSalary(),employee.getDname(),employee.getHiredate()
        });

    }

    public int update(Employee employee){
        String sql = "UPDATE employee SET ename=?,salary=?,dname=?,hiredate=? where eno = ?";
        int count = jdbcTemplate.update(sql, new Object[]{
                employee.getEname(), employee.getSalary(), employee.getDname(), employee.getHiredate(), employee.getEno()
        });
        return count;
    }

    public int delete(Integer eno){
        String sql = "delete from employee where eno = ?";
        int update = jdbcTemplate.update(sql, new Object[]{eno});
        return update;
    }

    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
}
五、编程式事务


public void batchimport(){
        //定义了事务默认的标准配置
        TransactionDefinition definition = new DefaultTransactionDefinition();
        //开始一个事务
        TransactionStatus status = transactionManager.getTransaction(definition);
        try {
            for(int i=1;i<=10;i++){
                Employee employee = new Employee();
                employee.setEno(8000+i);
                employee.setEname("员工"+i);
                employee.setSalary(4000f);
                employee.setDname("市场部");
                employee.setHiredate(new Date());
                employeeDao.insert(employee);
            }
            //提交事务
            transactionManager.commit(status);
        } catch (TransactionException e) {
            transactionManager.rollback(status);
            e.printStackTrace();
        }
    }


    
        
        
        
        
    

    
    
        
    

    
        
    

    
        
        
    

    
    
        
    

六、声明式事务




    
    
        
        
        
        
    
    
    
        
    

    
        
        
    

    
        
    

    
    
        
    

    
    
        
            
            
            
            
            
            
            
        
    

    
    
        
        
    

1.事务传播行为



七、注解配置声明式事务

applicationContext.xml配置



    
    
        
        
        
        
    

    
        
    

    
        
    

    

@Service

//声明式事务核心注解
//放在类上,将声明式事务配置应用于当前类的所有方法,默认事务传播为REQUIRED
@Transactional(propagation = Propagation.REQUIRED)
public class EmployeeService {
    @Resource
    private EmployeeDao employeeDao;
    @Resource
    private BatchService batchService;
	
	@Transactional(propagation = Propagation.NOT_SUPPORTED,readonly = true)
    public Employee findById(Integer eno){
        return employeeDao.findById(eno);
    }

    public void batchimport() {
        for (int i = 1; i <= 10; i++) {
            if(i==3){
                throw new RuntimeException("意料之外的异常");
            }
            Employee employee = new Employee();
            employee.setEno(8000 + i);
            employee.setEname("员工" + i);
            employee.setSalary(4000f);
            employee.setDname("市场部");
            employee.setHiredate(new Date());
            employeeDao.insert(employee);
        }
    }

    public void startimportJob(){
        batchService.importJob1();
        if(1==1){
            throw new RuntimeException("意料之外的异常");
        }
        batchService.importJob2();
        System.out.println("批量导入成功");
    }

    public EmployeeDao getEmployeeDao() {
        return employeeDao;
    }

    public void setEmployeeDao(EmployeeDao employeeDao) {
        this.employeeDao = employeeDao;
    }

    public BatchService getBatchService() {
        return batchService;
    }

    public void setBatchService(BatchService batchService) {
        this.batchService = batchService;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/445957.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号