Spring jdbctemplate和事务管理器 全注解配置 不使用xml

/** * spring的配置类,相当于bean.xml */@Configuration//@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的<beans>// 作用为:配置spring容器(应用上下文)@ComponentScan("com.zxh")//需要扫描的包@Import({JdbcConfig.class,TransactionConfig.class})//子配置类@PropertySource("jdbcConfig.properties")//数据源properties文件@EnableTransactionManagement//开启spring对事务注解的支持public class SpringConfiguration {}

//jdbc配置类
public class JdbcConfig {

    @Value("${jdbc.driver}")    private String driver;

    @Value("${jdbc.url}")    private String url;

    @Value("${jdbc.username}")    private String username;

    @Value("${jdbc.password}")    private String password;

    /**     * 创建JdbcTemplate     * @param dataSource     * @return     */    @Bean(name="jdbcTemplate")    public JdbcTemplate createJdbcTemplate(DataSource dataSource){        return new JdbcTemplate(dataSource);    }

    /**     * 创建数据源对象     * @return     */    @Bean(name="dataSource")    public DataSource createDataSource(){        DriverManagerDataSource ds = new DriverManagerDataSource();        ds.setDriverClassName(driver);        ds.setUrl(url);        ds.setUsername(username);        ds.setPassword(password);        return ds;    }}
//事务配置类


/** * 和事务相关的配置类 */public class TransactionConfig {

    /**     * 用于创建事务管理器对象     * @param dataSource     * @return     */    @Bean(name="transactionManager")    public PlatformTransactionManager createTransactionManager(DataSource dataSource){        return new DataSourceTransactionManager(dataSource);    }}

持久层和事务层实现类不变
@Repository("accountDao")public class AccountDaoImpl implements IAccountDao {
    @Autowired    private JdbcTemplate jdbcTemplate;

    @Override    public Account findAccountById(Integer accountId) {        List<Account> accounts = jdbcTemplate.query("select * from account where id = ?",new BeanPropertyRowMapper<Account>(Account.class),accountId);        return accounts.isEmpty()?null:accounts.get(0);    }

    @Override    public Account findAccountByName(String accountName) {        List<Account> accounts = jdbcTemplate.query("select * from account where name = ?",new BeanPropertyRowMapper<Account>(Account.class),accountName);        if(accounts.isEmpty()){            return null;        }        if(accounts.size()>1){            throw new RuntimeException("结果集不唯一");        }        return accounts.get(0);    }

    @Override    public void updateAccount(Account account) {        jdbcTemplate.update("update account set name=?,money=? where id=?",account.getName(),account.getMoney(),account.getId());    }}
 
 
@Service("accountService")@Transactional(propagation= Propagation.SUPPORTS,readOnly=true)//只读型事务的配置public class AccountServiceImpl implements IAccountService {

    @Autowired    private IAccountDao accountDao;

    @Override    public Account findAccountById(Integer accountId) {        return accountDao.findAccountById(accountId);

    }

    //需要的是读写型事务配置    @Transactional(propagation= Propagation.REQUIRED,readOnly=false)    @Override    public void transfer(String sourceName, String targetName, Float money) {        System.out.println("transfer....");            //2.1根据名称查询转出账户            Account source = accountDao.findAccountByName(sourceName);            //2.2根据名称查询转入账户            Account target = accountDao.findAccountByName(targetName);            //2.3转出账户减钱            source.setMoney(source.getMoney()-money);            //2.4转入账户加钱            target.setMoney(target.getMoney()+money);            //2.5更新转出账户            accountDao.updateAccount(source);

//            int i=1/0;

            //2.6更新转入账户            accountDao.updateAccount(target);    }}
//properties
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf8jdbc.username=rootjdbc.password=root

//test
@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes= SpringConfiguration.class)public class AccountServiceTest {

    @Autowired    private  IAccountService as;

    @Test    public  void testTransfer(){        as.transfer("aaa","bbb",100f);

    }

}


原文地址:https://www.cnblogs.com/yitaqiotouto/p/12607875.html

时间: 2024-10-14 18:26:42

Spring jdbctemplate和事务管理器 全注解配置 不使用xml的相关文章

Spring声明式事务管理(基于注解方式实现)

----------------------siwuxie095 Spring 声明式事务管理(基于注解方式实现) 以转账为例 1.导入相关 jar 包(共 10 个包) (1)导入核心 jar 包和日志相关的 jar 包 (2)导入 JdbcTemplate 的 jar 包 (3)导入 MySQL 的 JDBC 驱动包 mysql-connector-java 下载链接: https://dev.mysql.com/downloads/connector/j/ (4)导入 AOP 的 jar

Spring JdbcTemplate 与 事务管理 学习

Spring的JDBC框架能够承担资源管理和异常处理的工作,从而简化我们的JDBC代码, 让我们只需编写从数据库读写数据所必需的代码.Spring把数据访问的样板代码隐藏到模板类之下, 结合Spring的事务管理,可以大大简化我们的代码. Spring提供了3个模板类: JdbcTemplate:Spring里最基本的JDBC模板,利用JDBC和简单的索引参数查询提供对数据库的简单访问. NamedParameterJdbcTemplate:能够在执行查询时把值绑定到SQL里的命名参数,而不是使

spring mvc+hibernate 实现事务管理(全注解版)

为了方便项目变大配置文件变多,用注解代替 *.hbm.xml,<bean id="*dao" class="">,另外用反省实现dao操作,省去每个类一个dao,此处参考了鸵鸟的例子. 实现功能跟http://blog.csdn.net/waiwai4701/article/details/38270721这个项目是一样的,controller和页面就不再写 首先,jar包支持,为了方便jar包管理采用maven技术,服务器没有用tomcat用的jett

Spring JdbcTemplate 与 事务管理

Spring的JDBC框架能够承担资源管理和异常处理的工作,从而简化我们的JDBC代码, 让我们只需编写从数据库读写数据所必需的代码.Spring把数据访问的样板代码隐藏到模板类之下, 结合Spring的事务管理,可以大大简化我们的代码. Spring提供了3个模板类: JdbcTemplate:Spring里最基本的JDBC模板,利用JDBC和简单的索引参数查询提供对数据库的简单访问. NamedParameterJdbcTemplate:能够在执行查询时把值绑定到SQL里的命名参数,而不是使

Spring MVC全注解配置 - 无web.xml

Serlvet 3以后,我们可以使用注解来配置Servlet,对于像Spring这类的框架来说是一个很好的适应.Spring也对此特性加入了很多的新功能.本文就将简单的对之前的xml配置转换为java代码的配置.代码配置让程序员们觉得更加具有流程化,不像配置很多代码程序员们都不愿意look into. 接下来,进行替换我们之前的web.xml和spring-mvc.xml的配置.也就是在你的web工程里面看不到这两个配置文件了.(可能有的童鞋会说,这样配置可能对以后的修改不方便,无法达到只修改配

spring 声明式事务管理注解方式实现

使用注解实现Spring的声明式事务管理,更加简单! 步骤: 1) 必须引入Aop相关的jar文件 2) bean.xml中指定注解方式实现声明式事务管理以及应用的事务管理器类 3)在需要添加事务控制的地方,写上: @Transactional @Transactional注解: 1)应用事务的注解 2)定义到方法上: 当前方法应用spring的声明式事务 3)定义到类上:   当前类的所有的方法都应用Spring声明式事务管理; 4)定义到父类上: 当执行父类的方法时候应用事务. 案例: 1.

spring 配置事务管理器

在Spring中数据库事务是通过PlatformTransactionManager进行管理的,jdbcTemplate是不能支持事务的,而能够支持事务的是org.springframework.transaction.support.TransactionTemplate模板,它是Spring所提供的事务管理器的模板 •事务的创建.提交和回滚是通过PlatformTransactionManager接口来完成的. •当事务产生异常时会回滚事务,在默认的实现中所有的异常都会回滚.我们可以通过配置

spring的annotation-driven配置事务管理器详解

http://blog.sina.com.cn/s/blog_8f61307b0100ynfb.html 好吧,这个作者也是转载的 ———————————————————————————————————————————————————————————————————————————————————— 这篇文章是我从ITeye上复制来的,看了一遍,觉得很深刻,决定把他复制来,对原作者表示感谢. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Spring Boot的事务管理注解@EnableTransactionManagement的使用

Spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement 开启事务支持后,然后在访问数据库的Service方法上添加注解 @Transactional 便可. 关于事务管理器,不管是JPA还是JDBC等都实现自接口 PlatformTransactionManager 如果你添加的是 spring-boot-starter-jdbc 依赖,框架会默认注入 DataSourceTransactionManager 实例.如果你添加的是 spr