目录
项目简介
金钱对于我们每个人来说都很重要,存钱取钱不能说一点不会出错,但是在一定程度上还是比较安全的,但是如何做到安全转账,下面就简单介绍一下转账功能的实现
项目逻辑
该项目通过三层架构来完成转账:
1,在web层通过request请求获取相关属性值然后传递到service层,由于在service层不需要进行复杂的业务处理,进一步将数据传递到dao层
2,在dao层完成相应的逻辑处理,要分别对收账人和转账人的存款金额进行处理,转账人的金额要有相应的金额减少而对应的收账人的金额要有所增加
3,在完成转账金额的逻辑处理中要先开启事务,接下来对相应的业务逻辑进行处理,如果转账过程中没有出现错误,则通过commit方法完成转账操作并提示用户转账成功,相应的数据库中的值也要发生相应的改变,否则要进行事务的回滚处理并给出用户转账失败的信息,同时要确保数据库中的数据不发生改变
转账前数据库效果展示
注意:完成此项目要导入相应的jar包和相应的工具类否则会出现错误
转账前端页面实现
效果展示
转账功能实现
web层
主要实现获取参数和传递参数功能
package pdsu.edu.web;
import java.io.IOException;
import java.sql.SQLException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import pdsu.edu.service.ZhuanzhangService;
/**
* Servlet implementation class ZhuanzhangServlet
*/
public class ZhuanzhangServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-genunerated method stub
String name1 = request.getParameter("name1");
String name2 = request.getParameter("name2");
String moneystr = request.getParameter("money");
int money = Integer.parseInt(moneystr);
ZhuanzhangService zz=new ZhuanzhangService();
boolean is;
try {
is = zz.Out(name1,name2,money);
if(is) {
System.out.println("转账成功!");
}else {
System.out.println("转账失败!");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}}
service层
该部分主要完成事务的开启操作以及对于不同情况对于传递参数的回应信息,并向dao层传递参数
package pdsu.edu.service;
import java.sql.SQLException;
import pdsu.edu.dao.ZhuanzhangDao;
public class ZhuanzhangService {
public boolean Out(String name1, String name2, int money) {
// TODO Auto-generated method stub
ZhuanzhangDao dd=new ZhuanzhangDao();
boolean transferSuccess=true;
try {
pdsu.edu.utils.MyDataSourceUtils.startTransaction();//开启事务
dd.out(name1,money);
dd.in(name2,money);
} catch (SQLException e) {
// TODO Auto-generated catch block
transferSuccess=false;
try {
pdsu.edu.utils.MyDataSourceUtils.rollback();//事务回滚
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}finally {
try {
pdsu.edu.utils.MyDataSourceUtils.commit();//事务提交
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return transferSuccess;
}}
dao层
package pdsu.edu.dao;
import java.sql.Connection;
import java.sql.SQLException;import javax.management.Query;
import org.apache.commons.dbutils.QueryRunner;
import pdsu.edu.utils.DataSourceUtils;
import pdsu.edu.utils.MyDataSourceUtils;public class ZhuanzhangDao {
//转账放数据操作的实现
public void out(String name1, int money) {
// TODO Auto-generated method stub
QueryRunner qr = new QueryRunner();
try {
Connection conn = MyDataSourceUtils.getCurrentConnection();
String sql = "update zhuanzhang set money=money-? where name=?";
qr.update(conn, sql, money,name1);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}//收款方数据操作的实现
public void in(String name2, int money) {
// TODO Auto-generated method stub
QueryRunner qr = new QueryRunner();
Connection conn;
try {
conn = MyDataSourceUtils.getCurrentConnection();
String sql = "update zhuanzhang set money=money+? where name=?";
qr.update(conn, sql, money,name2);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}