Spring实现模拟转账(未考虑事务版)

2022/05/22

模拟转账

导入依赖

<!--Spring整合JDBC-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.0.2.RELEASE</version>
</dependency>
<!--Spring操作事务-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.0.2.RELEASE</version>
</dependency>

dao中主要做数据库最基本的操作,增删改查,其他的循环语句、如判断余额是否充足等都是service的

1.业务层实现类

public class AccountServiceImpl implements AccountService {
    private AccountDao accountDao;

    public void setAccountDao(AccountDao accountDao) {
        this.accountDao = accountDao;
    }

    /**
     * 转账
     * @param out 付款人
     * @param in 收款人
     * @param Money 金额
     */
    @Override
    public void pay(String out, String in, Double Money) {
        accountDao.outMoney(out,Money);
        accountDao.inMoney(in, Money);
    }
}

2.持久层实现类

public class AccountDaoImpl implements AccountDao {
    private JdbcTemplate jdbcTemplate;

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

    /**
     * 付款
     * @param out 付款人
     * @param money 金额
     */
    @Override
    public void outMoney(String out, Double money) {
        jdbcTemplate.update("update account set money = money - ? where name = ?", money, out);
    }

    /**
     * 收款
     * @param in 收款人
     * @param money 金额
     */
    @Override
    public void inMoney(String in, Double money) {
        jdbcTemplate.update("update account set money = money + ? where name = ?", money, in);
    }
}

3.配置文件

<!--    加载数据库属性配置文件-->
    <context:property-placeholder location="jdbc.properties"/>

<!--    配置连接池对象-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

<!--    配置jdbc模板对象-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

<!--    配置dao-->
    <bean id="accountDao" class="com.qcby.dao.impl.AccountDaoImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate"/>
    </bean>

<!--    配置service-->
    <bean class="com.qcby.service.impl.AccountServiceImpl">
        <property name="accountDao" ref="accountDao"/>
     </bean>

4.测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class AccountTest {
    @Autowired
    private AccountService accountService;
    @Test
    public void run() {
        accountService.pay("老王","小王", 200.00);
    }
}

改进

以后可能会有很多的dao层,dao层有很多的实现类,有很多的表(如AccountDaoImpl、TeacherDaoImpl、StudentDaoImpl等),都会涉及数据库,都需要依赖注入jdbcTemplate模板,下述代码每个类中都要写

private JdbcTemplate jdbcTemplate;

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

很繁琐,因此spring中提供了一个父类,即所有的dao层类都可以有一个父类,将JdbcTemplate相关属性放到这个父类身上,只在父类中写一遍,以后哪个子类想要使用此方法只需要继承调用父类的方法即可

继承JdbcDaoSupport对象

继承此类的目的:是因为JdbcDaoSupport中包含jdbcTemplate以及相应的set、get方法,同时也提供了设置dataSource连接池的方法

即继承了之后就不用再放jdbcTemplate模板对象了

故持久层实现类改为

public class AccountDaoJdbcParentImpl extends JdbcDaoSupport implements AccountDao {
    @Override
    public void outMoney(String out, Double money) {
        getJdbcTemplate().update("update account set money = money - ? where name = ?", money, out);
    }

    @Override
    public void inMoney(String in, Double money) {
        getJdbcTemplate().update("update account set money = money + ? where name = ?", money, in);
    }
}

配置文件修改为

<!--    加载数据库属性配置文件-->
    <context:property-placeholder location="jdbc.properties"/>

<!--    配置连接池对象-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    
<bean id="accountDaoJdbc" class="com.qcby.dao.impl.AccountDaoJdbcParentImpl">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <bean class="com.qcby.service.impl.AccountServiceImpl">
        <property name="accountDao" ref="accountDaoJdbc"/>
    </bean>

配置文件省略了jdbcTemplate相关配置,doa层实现类也省略了jdbcTemplate相关注入和set方法

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值