spring6测试银行转账业务(动力节点老杜Spring6)

Sprin6模拟银行转账系统(非web项目)

  • 添加依赖

  • pom.xml
    <dependencies>
           <!--mybatis依赖-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.10</version>
            </dependency>
           <!--spring-context依赖-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>6.0.6</version>
            </dependency>
           <!--spring-aspects依赖-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>6.0.6</version>
            </dependency>
          <!--mysql驱动依赖-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.29</version>
            </dependency>
           <!--jdbc连接依赖-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>6.0.6</version>
            </dependency>
           <!--mybatis-spring依赖-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>3.0.1</version>
            </dependency>
           <!--德鲁伊连接池依赖-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.2.16</version>
            </dependency>
           <!--测试单元依赖-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13.2</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
  • 创建文件夹

  • com.xju.bank.mapper
  • com.xju.bank.pojo
  • com.xju.bank.servlet
  • com.xju.bank.servlet.Impl
  • 编写相关类和接口

  • 数据封装(pojo)
    • Account.java

      package com.xju.bank.pojo;
      
      public class Account {
          private Long id;
          private String actNo;
          private Double balance;
      
          public Account() {
          }
      
          public Account(Long id, String actNo, Double balance) {
              this.id = id;
              this.actNo = actNo;
              this.balance = balance;
          }
      
          @Override
          public String toString() {
              return "Account{" +
                      "id=" + id +
                      ", actNo='" + actNo + '\'' +
                      ", balance=" + balance +
                      '}';
          }
      
          public Long getId() {
              return id;
          }
      
          public void setId(Long id) {
              this.id = id;
          }
      
          public String getActNo() {
              return actNo;
          }
      
          public void setActNo(String actNo) {
              this.actNo = actNo;
          }
      
          public Double getBalance() {
              return balance;
          }
      
          public void setBalance(Double balance) {
              this.balance = balance;
          }
      }
      
      
  • 编写mapper
    • AccountMapper.java

    • 编写接口,通过mybatis来实现接口

      package com.xju.bank.mapper;
      
      import com.xju.bank.pojo.Account;
      
      import java.util.List;
      
      public interface AccountMapper {
          /**
           * 更新账户
           * @return
           */
          int update(Account account);
      
          /**
           * 删除账户
           * @return
           */
          int deleteByActNo(String actNo);
      
          /**
           * 插入账户
           * @return
           */
          int insert(Account account);
      
          /**
           * 根据账户查询账户信息
           * @return
           */
          Account selectByActNo(String actNo);
      
          /**
           * 查询所有账户
           * @return
           */
          List<Account> selectAll();
      }
      
      
  • 编写servlet接口
    • AccountService.java

      package com.xju.bank.service;
      
      import com.xju.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<Account> getAll();
      
          /**
           * 用户转账
           * @param fromAct
           * @param toAct
           * @param money
           */
          public void transform(String fromAct,String toAct,double money);
      }
      
      
  • 编写servlet实现类
    • AccountServiceImpl

    • 添加注解将service纳入spring容器管理,将属性自动注入

      package com.xju.bank.service.Impl;
      
      import com.xju.bank.mapper.AccountMapper;
      import com.xju.bank.pojo.Account;
      import com.xju.bank.service.AccountService;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Service;
      
      import java.util.List;
      @Service("accountService")
      public class AccountServiceImpl implements AccountService {
          @Autowired
          private AccountMapper accountMapper;
          @Override
          public int save(Account account) {
              return accountMapper.insert(account) ;
          }
      
          @Override
          public int deleteByActNo(String actNo) {
              return accountMapper.deleteByActNo(actNo);
          }
      
          @Override
          public int modify(Account account) {
              return accountMapper.update(account);
          }
      
          @Override
          public Account getByActNo(String actNo) {
              return accountMapper.selectByActNo(actNo);
          }
      
          @Override
          public List<Account> getAll() {
              return accountMapper.selectAll();
          }
      
          @Override
          public void transform(String fromAct, String toAct, double money) {
              Account fromAccount = accountMapper.selectByActNo(fromAct);
              if (fromAccount.getBalance()<money) {
                  throw new RuntimeException("账户余额不足");
              }
              Account toAccount = accountMapper.selectByActNo(toAct);
              fromAccount.setBalance(fromAccount.getBalance()-money);
              toAccount.setBalance(toAccount.getBalance()+money);
              int count = accountMapper.update(fromAccount);
              count+=accountMapper.update(toAccount);
              if (count!=2) {
                  throw new RuntimeException("转账失败");
              }
          }
      }
      
      
  • 在根目录(resources)下编写配置文件

  • 创建目录(和mapper文件路径相同):com/xju/bank/mapper
    • AccountMapper.xml

    • 实现mapper接口

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
      <mapper namespace="com.xju.bank.mapper.AccountMapper">
          <select id="selectByActNo" resultType="com.xju.bank.pojo.Account">
              select * from t_act where actNo=#{actNo}
          </select>
          <insert id="insert">
              insert into t_act values(#{actNo},#{balance})
          </insert>
          <update id="update">
              update t_act set balance=#{balance} where actNo=#{actNo}
          </update>
          <select id="selectAll" resultType="com.xju.bank.pojo.Account">
              select * from t_act
          </select>
          <delete id="deleteByActNo">
              delete from t_act where actNo=#{actNo}
          </delete>
      </mapper>
      
  • mybatis核心配置文件
    • mybatis_config.xml

    • 只需配置日志文件,来查看输出内容

    • 其他配置在spring中集成

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE configuration
              PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
              "https://mybatis.org/dtd/mybatis-3-config.dtd">
      <configuration>
          <settings>
              <setting name="logImpl" value="STDOUT_LOGGING"/>
          </settings>
      </configuration>
      
  • jdbc配置文件
    • jdbc.properties

      jdbc.driver=com.mysql.cj.jdbc.Driver
      jdbc.url=jdbc:mysql://localhost:3306/mvc
      jdbc.username=root
      jdbc.password=xjulcy401220
      
  • spring配置文件
    • spring.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
          <!--组建扫描-->
          <context:component-scan base-package="com.xju.bank"/>
          <!--引入外部配置文件-->
          <context:property-placeholder location="jdbc.properties"/>
          <!--数据源-->
          <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
              <property name="driverClassName" value="${jdbc.driver}"/>
              <property name="url" value="${jdbc.url}"/>
              <property name="username" value="${jdbc.username}"/>
              <property name="password" value="${jdbc.password}"/>
          </bean>
          <!--配置SqlSessionFactoryBean-->
          <bean class="org.mybatis.spring.SqlSessionFactoryBean">
              <!--注入数据源-->
              <property name="dataSource" ref="dataSource"/>
              <!--引入mybatis核心配置文件-->
              <property name="configLocation" value="mybatis_config.xml"/>
          </bean>
          <!--mapper扫描配置器,扫描mapper接口,生成代理类-->
          <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
              <property name="basePackage" value="com.xju.bank.mapper"/>
          </bean>
          <!--事务管理器-->
          <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
              <property name="dataSource" ref="dataSource"/>
          </bean>
          <!--启用事务注解-->
          <tx:annotation-driven transaction-manager="txManager"/>
      </beans>
      
  • 编写测试程序

  • 在test下创建com.xju.bank.test
    • AccountTest.java

    • 这里仅测试转账是否成功

      package com.xju.bank.test;
      
      import com.xju.bank.service.AccountService;
      import org.junit.Test;
      import org.springframework.context.ApplicationContext;
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      
      public class AccountTest {
          @Test
          public void testAccount(){
              ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
              AccountService accountService = applicationContext.getBean("accountService", AccountService.class);
              try{
                  accountService.transform("act001","act002",1000);
                  System.out.println("转账成功");
              }catch (Exception e){
                  e.printStackTrace();
      
              }
          }
      }
      
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值