spingboot银行案例

2023-11-09 12:59
文章标签 案例 银行 spingboot

本文主要是介绍spingboot银行案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.搭建环境

在这里插入图片描述

2.common

在这里插入图片描述

Account

public class Account implements Serializable {private Long id;private String cardno;private String password;private Double balance;private Long status;

Record

public class Record implements Serializable {private long id;private String cardno;private String transactiondate;private double expense;private double income;private double balance;private String transactiontype;private String remark;private String starttime;private String endtime;

AccountService

public interface AccountService {//1.登录Map<String,Object> login(Account account);//2.根据卡号查询余额Double findBalance(Account account);//3.修改密码String updatePWd(Account account);
}

RecordService

public interface RecordService {//1.转账String transferAccounts(String currentCardNo,String targetCardNo,Double money);//2.分页查询PageInfo<Map<String,Object>> showPage(Integer pageno, Record record);
}
3.provider结构

在这里插入图片描述

AccountMapper
public interface AccountMapper {//1.查询账号详情:根据卡号查,根据卡号密码查,根据卡号查余额Account findAccountInfo(Account account);//2.修改密码@Update("update account set password=#{password} where cardno#{cardno}")int updatePassword(Account account);//3.修改账号余额@Update("update account set balance=#{balance} where cardno#{cardno}")int updateBalance(Account account);
}
RecordMapper
public interface RecordMapper {//1.添加转出的交易记录@Insert("insert into record(cardno,transactiondate,expense,income,balance,transactiontype) values(#{cardno},now(),#{expense},0.0,#{balance},'转出')")int addExpenseRecord(Record record);//2.添加转入的交易记录@Insert("insert into record(cardno,transactiondate,expense,income,balance,transactiontype) values(#{cardno},now(),#{income},0.0,#{balance},'转入')")int addIncomeRecord(Record record);//3.根据交易日期分页查询,按照日期升序排列List<Map<String,Object>> showData(Record record);
}

AccountServiceImpl

@Service
@Transactional
public class AccountServiceImpl implements AccountService {@Autowiredprivate AccountMapper accountMapper;//登录@Overridepublic Map<String, Object> login(Account account) {Map<String, Object> map = new HashMap<String, Object>();//根据卡号查询Account loginuser = accountMapper.findAccountInfo(account);//判断卡号是否存在if (loginuser == null) {map.put("msg", "登录失败,你输入卡号不存在!");return map;}if(loginuser!=null){//判断密码是否正确if (!loginuser.getPassword().equals(account.getPassword())){map.put("msg","登录失败,您输入的密码不正确!");return map;}//判断账号是否被冻结if (loginuser.getStatus()==0){map.put("msg","登录失败,您的账号已冻结!");return map;}}//登录成功map.put("loginuser",loginuser);return map;}//查询余额@Overridepublic Double findBalance(Account account) {//根据卡号查询return accountMapper.findAccountInfo(account).getBalance();}//修改密码@Overridepublic String updatePWd(Account account) {String pwd = accountMapper.findAccountInfo(account).getPassword();if (!pwd.equals(account.getPassword())){return "旧密码输入错误!";}//修改accountMapper.updatePassword(account);return "success";}
}

RecordServiceImpl

public class RecordServiceImpl implements RecordService {@Autowiredprivate RecordMapper recordMapper;@Autowiredprivate AccountMapper accountMapper;//转账public String transferAccounts(String currentCardNo, String targetCardNo, Double money) {//查询目标账号Account targetAccount=accountMapper.findAccountInfo(new Account(targetCardNo,null,null));//判断目标卡号是否存在if(targetAccount==null){return "转账失败,目标账号不存在!";}//判断目标账号是否冻结if (targetAccount!=null && targetAccount.getStatus()==0){return "转账失败,目标账号已冻结";}//查询当前账号Account currentAccount=accountMapper.findAccountInfo(new Account(currentCardNo,null,null));//判断当前账号余额是否 >= 转账金额if (currentAccount!=null){if (currentAccount.getBalance()<money){return "转账失败,转出账号余额不足!";}}//当前账号余额减少currentAccount.setBalance(currentAccount.getBalance()-money);accountMapper.updateBalance(targetAccount);//目标账号余额增加targetAccount.setBalance(targetAccount.getBalance()+money);accountMapper.updateBalance(targetAccount);//当前账号转出交易记录Record currentAccountRecord=new Record(currentCardNo,money,null,currentAccount.getBalance());recordMapper.addExpenseRecord(currentAccountRecord);//目标账号转入交易记录Record targetAccountRecord=new Record(targetCardNo,null,money,targetAccount.getBalance());recordMapper.addIncomeRecord(targetAccountRecord);return "success";}//分页@Overridepublic PageInfo<Map<String, Object>> showPage(Integer pageno, Record record) {PageHelper.startPage(pageno,3);List<Map<String,Object>> list=recordMapper.showData(record);return new PageInfo<Map<String,Object>>(list);}
}

ProviderApplication

@MapperScan("cn.kgc.mapper")
@ImportResource("classpath:spring-provider.xml")
resource>mapper

AccountMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.kgc.mapper.AccountMapper"><select id="findAccountInfo" resultType="Account" parameterType="Account">SELECT * FROM account WHERE cardno=#{cardno}<if test="password!=null">AND password=#{password}</if></select>
</mapper>

RecordMapper.xml

<mapper namespace="cn.kgc.mapper.RecordMapper"><select id="showData" parameterType="Record" resultType="map">SELECT * from record WHERE cardno=#{cardno}<if test="starttime!=null and endtime!=nulll">AND transactiondate BETWEEN #{starttime} AND #{endtime}</if>ORDER BY transactiondate ASC</select>
</mapper>

application.properties

server.port=9090spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/bankonline
spring.datasource.username=root
spring.datasource.password=123.mybatis.type-aliases-package=cn.kgc.vomybatis.mapper-locations=mapper/*.xmlpagehelper.helper-dialect=mysql

spring-provider.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:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!-- 提供方应用信息,用于计算依赖关系 --><dubbo:application name="myprovider" /><!-- 使用zookeeper注册中心暴露服务地址,我的zookeeper是架在本地的 --><dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" timeout="60000"/><!-- 用dubbo协议在20880端口暴露服务 --><dubbo:protocol name="dubbo" port="20880" /><!-- 用户服务接口 --><dubbo:service interface="cn.kgc.service.AccountService" ref="accountService"/><bean id="accountService" class="cn.kgc.service.AccountServiceImpl"/><dubbo:service interface="cn.kgc.service.RecordService" ref="recordService"/><bean id="recordService" class="cn.kgc.service.RecordServiceImpl"/>
</beans>

4.consumer

CenterController

@RestController
public class CenterController {@Autowiredprivate AccountService accountService;@Autowiredprivate RecordService recordService;//登录@RequestMapping("/login.do")public Map<String,Object> login(Account account){return accountService.login(account);}//查询余额@RequestMapping("/balance.do")public Double findBalance(Account account){return accountService.findBalance(account);}//修改密码@RequestMapping("/pwd.do")public String updatePWd(Account account){return accountService.updatePWd(account);}//转账@RequestMapping("/ta.do")public String transferAccounts(String currentCardNo,String targetCardNo,Double money){return recordService.transferAccounts(currentCardNo,targetCardNo,money);}//分页@RequestMapping("/page.do")public PageInfo<Map<String,Object>> showPage(Integer pageno, Record record){return recordService.showPage(pageno,record);}
}

ConsumerApplication

@ImportResource("classpath:spring-consumer.xml")

rvice.transferAccounts(currentCardNo,targetCardNo,money);
}
//分页
@RequestMapping("/page.do")
public PageInfo<Map<String,Object>> showPage(Integer pageno, Record record){
return recordService.showPage(pageno,record);
}
}


ConsumerApplication```java
@ImportResource("classpath:spring-consumer.xml")

这篇关于spingboot银行案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/376237

相关文章

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

SpringBoot实现动态插拔的AOP的完整案例

《SpringBoot实现动态插拔的AOP的完整案例》在现代软件开发中,面向切面编程(AOP)是一种非常重要的技术,能够有效实现日志记录、安全控制、性能监控等横切关注点的分离,在传统的AOP实现中,切... 目录引言一、AOP 概述1.1 什么是 AOP1.2 AOP 的典型应用场景1.3 为什么需要动态插

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。