java+mybatis实现一个简单的银行系统,实现存取款与账户查询
先创建数据库和表,使用的是MySQL数据库。
create database mybatis;
use mybatis;
CREATE TABLE `accountdo` (
`id` varchar(255) NOT NULL COMMENT '账户',
`name` varchar(255) DEFAULT NULL COMMENT '用户姓名',
`sex` varchar(255) DEFAULT NULL COMMENT '性别',
`tele` varchar(255) DEFAULT NULL COMMENT '电话',
`address` varchar(255) DEFAULT NULL COMMENT '住址',
`balance` double DEFAULT NULL COMMENT '账户余额',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
新建一个Java项目,项目下新建一个lib文件夹,放入mysql-connector-java和mybatis的jar包,build path一下。
src目录下创建一个conf.xml和一个db.properties,
db.properties的内容如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
name=root
password=root
password填写自己的密码。
编写一个mybatis工具类,代码如下:
package utils; import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBatisUtil { /**
* 获取SqlSessionFactory
* @return SqlSessionFactory
*/
public static SqlSessionFactory getSqlSessionFactory() {
String resource = "conf.xml";
InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
return factory;
} /**
* 获取SqlSession
* @return SqlSession
*/
public static SqlSession getSqlSession() {
return getSqlSessionFactory().openSession();
} /**
* 获取SqlSession
* @param isAutoCommit
* true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务
* false 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务
* @return SqlSession
*/
public static SqlSession getSqlSession(boolean isAutoCommit) {
return getSqlSessionFactory().openSession(isAutoCommit);
}
}
编写账户实体类,将setId方法改为private,代码如下:
package bank.d; /**
* 账户实体类
*
* @author xmj
*
*/
public class AccountDO { private String id;// 账户的号码
private String name;// 账户姓名
private String sex;// 性别
private String tele;// 电话
private String address;// 地址
private double balance = 0;// 账户的余额,默认为0 public String getId() {
return id;
} @SuppressWarnings("unused")
private void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public String getTele() {
return tele;
} public void setTele(String tele) {
this.tele = tele;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} public double getBalance() {
return balance;
} public void setBalance(double balance) {
this.balance = balance;
} @Override
public String toString() {
return "\n账号:" + id + " \n姓名:" + name + "\n余额:" + balance;
} }
定义sql映射的接口,代码如下:
package bank.i; import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import bank.d.AccountDO; public interface IAccountMapper { // 使用@Insert注解指明add方法要执行的SQL
@Insert("insert into AccountDO(id, name,sex,tele,address,balance) values(concat('BANK',DATE_FORMAT(now(),'%Y%m%d%H%i%s'),floor(1000+rand()*8999)), #{name}, #{sex}, #{tele}, #{address}, #{balance})")
public int add(AccountDO user); // 使用@Delete注解指明deleteById方法要执行的SQL
@Delete("delete from AccountDO where id=#{id}")
public int deleteById(String id); // 使用@Update注解指明update方法要执行的SQL
@Update("update AccountDO set name=#{name},sex=#{sex} ,tele=#{tele},address=#{address},balance=#{balance} where id=#{id}")
public int update(AccountDO user); // 使用@Select注解指明getById方法要执行的SQL
@Select("select * from AccountDO where id=#{id}")
public AccountDO getById(String id); // 使用@Select注解指明getAll方法要执行的SQL
@Select("select * from AccountDO")
public List<AccountDO> getAll(); }
在conf.xml文件中注册这个映射接口,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration> <!-- 引用db.properties配置文件 -->
<properties resource="db.properties" /> <!-- development : 开发模式 work : 工作模式 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${name}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments> <mappers> <!-- 注册IAccountMapper映射接口 -->
<mapper class="bank.i.IAccountMapper" /> </mappers> </configuration>
编写一个实现类,封装上面的映射接口里的方法,代码如下:
package bank.s; import java.util.List;
import org.apache.ibatis.session.SqlSession;
import bank.d.AccountDO;
import bank.i.IAccountMapper;
import utils.MyBatisUtil; public class AccountMapperImpl { /**
* 判断字符串是否为空
*
* @param str
* @return
*/
public static boolean isEmpty(String str) {
if (str == null || "".equals(str))
return true;
return false;
} /**
* 添加用户
*
* @param aggdo
*/
public static void add(AccountDO aggdo) {
if (aggdo == null)
return;
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
IAccountMapper mapper = sqlSession.getMapper(IAccountMapper.class);
int add = mapper.add(aggdo);
sqlSession.close();
System.out.println("有【" + add + "】条数据发生了改变");
} /**
* 修改
*
* @param aggdo
*/
public static void update(AccountDO aggdo) {
if (aggdo == null)
return;
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
IAccountMapper mapper = sqlSession.getMapper(IAccountMapper.class);
@SuppressWarnings("unused")
int add = mapper.update(aggdo);
// System.out.println("有【" + add + "】条数据发生了改变");
sqlSession.close();
} /**
* 修改用户余额
*
* @param balance
* @param id
*/
public static void updateBalance(double balance, String id) {
if (isEmpty(id))
return;
AccountDO user = getById(id);
if (user == null) {
System.out.println("无法通过【" + id + "】查到该用户信息");
return;
}
user.setBalance(balance);
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
IAccountMapper mapper = sqlSession.getMapper(IAccountMapper.class);
@SuppressWarnings("unused")
int add = mapper.update(user);
sqlSession.close();
// System.out.println("有【" + add + "】条数据发生了改变");
} /**
* 通过账号查询用户信息
*
* @param id
* @return
*/
public static AccountDO getById(String id) {
if (isEmpty(id))
return null;
SqlSession sqlSession = MyBatisUtil.getSqlSession();
IAccountMapper mapper = sqlSession.getMapper(IAccountMapper.class);
AccountDO lstUsers = mapper.getById(id);
sqlSession.close();
return lstUsers;
} /**
* 获取所有用户信息
*
* @return
*/
public static List<AccountDO> getAll() {
SqlSession sqlSession = MyBatisUtil.getSqlSession();
IAccountMapper mapper = sqlSession.getMapper(IAccountMapper.class);
List<AccountDO> lstUsers = mapper.getAll();
sqlSession.close();
return lstUsers;
} }
编写银行系统类,实现对账户的查询和存取款操作,代码如下:
package bank.bp; import java.util.Scanner;
import bank.d.AccountDO;
import bank.s.AccountMapperImpl; /**
* 银行系统
*
* @author xmj
*
*/
public class BankSystem { private AccountDO user;// 当前账户
private double balance;// 余额 /**
* 银行操作系统。原存取款都对数据库的数据进行修改,现改成退出系统时才对数据库进行修改
*/
public void system(String id) {
this.user = AccountMapperImpl.getById(id);
if (user == null) {
System.out.println("无【" + id + "】此账户");
return;
}
this.balance = user.getBalance();
double unchang = balance;// 用户刚登陆系统时账户的余额,用来与操作后的balance比较,看余额是否发生改变
System.out.println("------银行账户操作系统-------- ");
System.out.println("----------1取款操作------------");
System.out.println("----------2存款操作------------");
System.out.println("----------3账户信息------------");
System.out.println("----------4退出系统------------");
boolean go_on = true;
while (go_on) {
@SuppressWarnings("resource")
Scanner num = new Scanner(System.in);
System.out.println("请输入您的选择:");
int choice = num.nextInt();
switch (choice) {
case 1:
System.out.println("-----正在进行【取款】操作------");
this.withDrawal();
break;
case 2:
System.out.println("-----正在进行【存款】操作------");
this.deposit();
break;
case 3:
System.out.println("-----账户信息------");
this.info();
break;
case 4:
if (unchang != balance)
AccountMapperImpl.updateBalance(balance, user.getId());
System.out.println("------退出系统,欢迎下次光临------");
go_on = false;
break;
default:
System.out.println("您的选择有误!");
break;
}
}
} /**
* 账户信息
*/
private void info() {
System.out.println("账号:" + user.getId() + "\n姓名:" + user.getName() + "\n余额:" + this.balance);
} /**
* 存款
*/
private void deposit() {
@SuppressWarnings("resource")
Scanner balance1 = new Scanner(System.in);
System.out.println("请输入您要存入的金额:");
double money = balance1.nextDouble();
balance = balance + money;
// AccountMapperImpl.updateBalance(balance, user.getId());
System.out.println("余额:" + balance);
} /**
* 取款
*/
private void withDrawal() {
@SuppressWarnings("resource")
Scanner balance1 = new Scanner(System.in);
System.out.println("请输入您要提取的金额:");
double money = balance1.nextDouble();
if (money > balance)
System.out.println("您的余额不足");
else {
balance = (balance - money);
// AccountMapperImpl.updateBalance(balance, user.getId());
}
System.out.println("余额:" + balance);
} }
编写测试类,代码如下:
package bank; import bank.bp.BankSystem;
import bank.d.AccountDO;
import bank.s.AccountMapperImpl; public class BankTest { public static void main(String[] args) {
BankSystem s = new BankSystem();
s.system("BANK202103151039575919");
// add();
} public static void add() {
AccountDO a = new AccountDO();
a.setName("小马驹");
a.setSex("男");
a.setTele("12345678901");
a.setAddress("武汉市");
AccountMapperImpl.add(a);
} }
整个项目的结构如图:

第一次写博客。。。
java+mybatis实现一个简单的银行系统,实现存取款与账户查询的更多相关文章
- JAVA课程设计——一个简单的教务人事管理系统
大三上学期期末总结,没错,上学期,写在下学期新学期开始,哈哈哈. 上学期学习了面向对象程序设计,课程设计的题目使用JAVA语言完成一个简单的教务人事管理系统,能够实现访问数据库的登录验证,分别按部门和 ...
- 使用JAVA实现的一个简单IOC注入实例
https://blog.csdn.net/echoshinian100/article/details/77977823 欲登高而望远,勿筑台于流沙 RSS订阅 原 使用JAVA实现的一个简单IOC ...
- 使用 jquery 的 上传文件插件 uploadify 3.1 配合 java 来做一个简单的文件上次功能。并且在界面上有radio 的选择内容也要上传
使用 jquery 的 上传文件插件 uploadify 3.1 配合 java 来做一个简单的文件上次功能.并且在界面上有radio 的选择内容也要上传 uploadify 插件的 下载和文档地址 ...
- Java RMI 实现一个简单的GFS(谷歌文件系统)——介绍篇
本系列主要是使用Java RMI实现一个简单的GFS(谷歌文件系统,google file system),首先整体简单介绍下该项目. [为了更好的阅读以及查看其他篇章,请查看原文:https://w ...
- Java RMI 实现一个简单的GFS(谷歌文件系统)——背景与设计篇
目录 背景 系统设计 1. 系统功能 2. Master组件 2.1 命名空间 2.2 心跳机制 2.3 故障恢复和容错机制 3. ChunkServer组件 3.1 本地存储 3.2 内存命中机制 ...
- Java Swing实现一个简单而优美的记事本( 较详细注释 )
Java Swing实现具有基本功能的记事本 目前实现了: 文件 新建 打开 保存 退出前保存询问 编辑 剪切 复制 粘贴 清除 撤销 格式 字体选择 字体颜色选择 帮助 关于 (样式采用了css与h ...
- 【Java】 实现一个简单文件浏览器(1)
学习Java的Swing的时候写的一个超简单文件浏览器 效果如图: 项目结构: 这里面主要用了两个控件,JTree和JTable 下面先说下左侧的文件树如何实现: 首先是FileTree类,继承于JT ...
- 使用新浪云 Java 环境搭建一个简单的微信处理后台
前一段时间,写了一篇在新浪云上搭建自己的网站的教程,通过简单构建了一个 maven 的项目,展示部署的整个流程,具体的操作可以参看这里. 新浪云服务器除了可以搭建自己的网站以外,也非常的适合作为微信公 ...
- Java开发的一个简单截屏工具
//源代码 import java.awt.*;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transfe ...
随机推荐
- 动手动脑3&课堂作业(四则运算与继承)
先上结果 Java程序会先把所有的静态模块提取出来优先执行 四则运算主程序代码 1 import java.util.Scanner; 2 3 4 public class main { 5 publ ...
- Codeforces Round #752 (Div. 2) A B C
Problem - A - Codeforces Problem - B - Codeforces Problem - C - Codeforces A. Era 每个a[i] - i 表示的是当前a ...
- 关于python中selenium一些知识点
selenium几种元素操纵方法 切换iframe层 #切换至xx iframe层 driver.switch_to.frame("name and id") # 切回主HTML层 ...
- 攻防世界-MISC:pure_color
这是攻防世界高手进阶区的第六题,题目如下: 点击下载附件一,得到一张空白的png图片 用StegSolve打开,然后点击箭头(如下图所示) 多点击几次,即可得到flag 所以,这道题的flag如下: ...
- Java-GUI 编程之 Swing
Swing概述 实际使用 Java 开发图形界面程序时 ,很少使用 AWT 组件,绝大部分时候都是用 Swing 组件开发的 . Swing是由100%纯 Java实现的,不再依赖于本地平台的 GU ...
- Linux发行版--发行版之间的关系--哲学思想--目录的命名规则及用途
作业2 点此链接查看centos7安装 点此链接查看Ubuntu安装 点此链接查看作业3.5 点此链接查看作业7.8.9 作业1.4.6 Linux发行版--发行版之间的关系 1.Linux是什么 L ...
- Shell 脚本编程最佳实践
前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看.而且当我在看其他人写的脚本的时候,总觉得难以阅读.毕竟shell脚本这个东 ...
- 超越OpenCV速度的MorphologyEx函数实现(特别是对于二值图,速度是CV的4倍左右)。
最近研究了一下opencv的 MorphologyEx这个函数的替代功能, 他主要的特点是支持任意形状的腐蚀膨胀,对于灰度图,速度基本和CV的一致,但是 CV没有针对二值图做特殊处理,因此,这个函数对 ...
- 01C语言基础(二)
Day07 笔记 指针和函数: 栈 帧: 当函数调用时,系统会在 stack 空间上申请一块内存区域,用来供函数调用,主要存放 形参 和 局部变量(定义在函数内部). 当函数调用结束,这块内存区域自动 ...
- MySql笔记Ⅱ
MySql笔记2: part3:(table相关的操作) 数据的增删改 create table t1( id int primary key auto_increment, username cha ...