第一步:准备数据库表
第二步:IDEA中创建一个模块,并引入依赖
4.0.0 org.example spring6-011-sm 1.0-SNAPSHOT jar org.springframework spring-context 6.0.2 org.springframework spring-jdbc 6.0.2 mysql mysql-connector-java 8.0.30 org.mybatis mybatis 3.5.10 org.mybatis mybatis-spring 3.0.1 com.alibaba druid 1.2.13 junit junit 4.13.2 test 17 17
第三步:基于三层架构实现,所以提前创建好所有的包
第四步:编写pojo
package com.powernode.bank.pojo;/*** 银行账户类*/
public class Account {private String actno;private Double balance;// 省略构造方法,get、set方法,toString方法
第五步:编写mapper接口
package com.powernode.bank.mapper;import com.powernode.bank.pojo.Account;import java.util.List;public interface AccountMapper {/*** 新增账户* @param account* @return*/int insert(Account account);/*** 根据账号删除账户* @param actno* @return*/int deleteByActno(String actno);/*** 修改账户* @param account* @return*/int update(Account account);/*** 根据账号查询账户* @param actno* @return*/Account selectByActno(String actno);/*** 查询所有账户* @return*/List selectAll();
}
第六步:编写mapper配置文件
insert into t_act values(#{actno}, #{balance}) delete from t_act where actno = #{actno} update t_act set balance = #{balance} where actno = #{actno};
第七步:编写service接口和service接口实现类
package com.powernode.bank.service;import com.powernode.bank.pojo.Account;import java.util.List;public interface AccountService {/*** 添加账户* @param account* @return*/int save(Account account);/*** 删除账户* @param actno* @return*/int deleteByActno(String actno);/*** 修改账户* @param account* @return*/int modify(Account account);/*** 通过账号查询账户* @param actno* @return*/Account getByActno(String actno);/*** 查询所有账户* @return*/List getAll();/*** 转账方法* @param fromActno* @param toActno* @param money*/void transfer(String fromActno, String toActno, double money);}
package com.powernode.bank.service.impl;import com.powernode.bank.mapper.AccountMapper;
import com.powernode.bank.pojo.Account;
import com.powernode.bank.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;
@Transactional
@Service("accountService")
public class AccountServiceImpl implements AccountService {@Autowiredprivate AccountMapper accountMapper;@Overridepublic int save(Account account) {return accountMapper.insert(account);}@Overridepublic int deleteByActno(String actno) {return accountMapper.deleteByActno(actno);}@Overridepublic int modify(Account account) {return accountMapper.update(account);}@Overridepublic Account getByActno(String actno) {return accountMapper.selectByActno(actno);}@Overridepublic List getAll() {return accountMapper.selectAll();}@Overridepublic void transfer(String fromActno, String toActno, double money) {Account fromAct = accountMapper.selectByActno(fromActno);if (fromAct.getBalance() < money) {throw new RuntimeException("余额不足");}Account toAct = accountMapper.selectByActno(toActno);fromAct.setBalance(fromAct.getBalance() - money);toAct.setBalance(toAct.getBalance() + money);int count = accountMapper.update(fromAct);count += accountMapper.update(toAct);if (count != 2) {throw new RuntimeException("转账失败");}}
}
第八步:编写jdbc.properties配置文件
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring6
jdbc.username=root
jdbc.password=root
第九步:编写mybatis-config.xml配置文件
第十步:编写spring.xml配置文件
第十一步:编写测试程序,并添加事务,进行测试
package com.powernode.spring6.test;import com.powernode.bank.service.AccountService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class SMTest {@Testpublic void testSM(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");AccountService accountService = applicationContext.getBean("accountService", AccountService.class);try {accountService.transfer("act-001","act-002",10000);System.out.println("转账成功");}catch (Exception e){e.printStackTrace();}}
}
上一篇:详解vite原理