spring纯注解的account案例
2024-10-04 06:58:04
dao层:
package cn.mepu.dao.imp; import cn.mepu.dao.IAccountDao; import cn.mepu.domain.Account; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; import java.util.List; /** * @author shkstart * @create 2019-11-10 16:09 */ @Repository("accountDao") public class AccountDaoImp implements IAccountDao { @Autowired private JdbcTemplate jdbcTemplate; 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); } 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); } public void updateAccount(Account account) { jdbcTemplate.update("update account set name=?,money=? where id=?",account.getName(),account.getMoney(),account.getId()); } }
service层:
package cn.mepu.service.impl; import cn.mepu.dao.IAccountDao; import cn.mepu.domain.Account; import cn.mepu.service.IAccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** * @author shkstart * @create 2019-11-11 8:43 */ @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)//只读配置 public void transfer(String sourceName, String targetName, float money) { //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); } }
配置文件:
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/javaee jdbc.username=root jdbc.password=root
spring配置类:
package cn.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.PropertySource; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * @author shkstart * @create 2019-11-11 10:52 * spring的配置类 */ @Configuration @ComponentScan("cn.mepu") @Import({JdbcConfig.class,TransactionConfig.class}) @PropertySource("jdbcConfig.properties") @EnableTransactionManagement public class SpringConfiguration { }
事务相关配置类;
package cn.config; import org.springframework.context.annotation.Bean; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import javax.sql.DataSource; /** * @author shkstart * @create 2019-11-11 11:12 * 和事务相关的配置类 */ public class TransactionConfig { /** * 创建事务管理器对象 * @param dataSource * @return */ @Bean("transactionManager") public PlatformTransactionManager createTransactionManager(DataSource dataSource){ return new DataSourceTransactionManager(dataSource); } }
连接数据库相关的配置类:
package cn.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource; import javax.sql.DataSource; /** * @author shkstart * @create 2019-11-11 10:55 * 连接数据库相关的配置类 */ 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; /** * 创建jdbcTemplat容器 * @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; } }
测试类:
package cn.mepu; import cn.config.SpringConfiguration; import cn.mepu.service.IAccountService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * @author shkstart * @create 2019-11-11 8:51 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SpringConfiguration.class) public class TestAccount { @Autowired private IAccountService as; @Test public void testTransfer(){ as.transfer("aaa","bbb",100f); } }
最新文章
- Android开发之---AIDL
- Java学习笔记(十九)——Java 日志记录 AND log4j
- Upgrade Bioconductor
- python_Day1_基础知识开篇
- spm中头动绘图的理解,自带数据集
- (转)unity开发相关环境(vs、MonoDevelop)windows平台编码问题
- Altium Designer打印设置
- php中Maximum execution time of 120 seconds exceeded时间超时错误解决方案
- Smail语法
- 03标准对象-02-RegExp 正则表达式
- 尝试Spring Data Jpa--告别CRUD
- H5本地存储详细使用教程(localStorage + JSON数据存储应用框架)
- 远程桌面服务当前正忙,因此无法完成您尝试执行的任务-win2008R2
- [openjudge-搜索]深度优先搜索之马走日
- Spring数据库开发
- bzoj5017: [Snoi2017]炸弹
- ASP.Net MVC OA项目笔记<;六>;
- cookie相关的函数
- (原创)如何使用boost.asio写一个简单的通信程序(二)
- 查找数据库表中重复的 Image 类型值
热门文章
- SqlServer 行转列 查询 并 导出 到 Excel 中 自动换行
- Python之计算当前月份的日期范围(calendar、datetime)
- mac系统下安装和启动nginx
- win32程序使用CString
- java的BigDecimal比较大小
- php 安装zip模块
- js手机端图片弹出方法
- php操作redis--生存时间篇
- com.alibaba.fastjson.JSON.parseObject
- 开放融合 | “引擎级”深度对接!POLARDB与SuperMap联合构建首个云原生时空平台