Jdbc 简单的Alipay

本文介绍了一个基于Java的支付宝用户模块的设计与实现过程。主要包括用户实体类与账户流水实体类的设计,以及针对用户存款、取款、转账等功能的具体实现方式。通过DAO层接口与实现类,展示了如何进行数据库操作,确保数据的一致性和事务的完整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >





entity


package com.oracle.entity;

import java.util.List;

public class AlipayUser {
	private int id;
	private String username;
	private String pass;
	private int money;
	private int creditValue;

	private List<AlipayAccount> account;

	@Override
	public String toString() {
		return "AlipayUser [id=" + id + ", username=" + username + ", pass=" + pass + ", money=" + money
				+ ", creditValue=" + creditValue + "]";
	}

	public List<AlipayAccount> getAccount() {
		return account;
	}

	public void setAccount(List<AlipayAccount> account) {
		this.account = account;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPass() {
		return pass;
	}

	public void setPass(String pass) {
		this.pass = pass;
	}

	public int getMoney() {
		return money;
	}

	public void setMoney(int money) {
		this.money = money;
	}

	public int getCreditValue() {
		return creditValue;
	}

	public void setCreditValue(int creditValue) {
		this.creditValue = creditValue;
	}

}


package com.oracle.entity;

import java.sql.Timestamp;

public class AlipayAccount {
	@Override
	public String toString() {
		return "AlipayAccount [id=" + id + ", num=" + num + ", operateTime=" + operateTime + ", userId=" + userId
				+ ", otherId=" + otherId + ", operateTyte=" + operateTyte + "]";
	}

	private int id;
	private int num;
	private Timestamp operateTime;
	private int userId;
	private int otherId;
	private int operateTyte;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public Timestamp getOperateTime() {
		return operateTime;
	}

	public void setOperateTime(Timestamp timestamp) {
		this.operateTime = timestamp;
	}

	public int getUserId() {
		return userId;
	}

	public void setUserId(int userId) {
		this.userId = userId;
	}

	public int getOtherId() {
		return otherId;
	}

	public void setOtherId(int otherId) {
		this.otherId = otherId;
	}

	public int getOperateTyte() {
		return operateTyte;
	}

	public void setOperateTyte(int operateTyte) {
		this.operateTyte = operateTyte;
	}

}



Dao

package com.oracle.dao;

import com.oracle.entity.AlipayUser;

public interface  AlipayUserDao {
	
    /**
     * 存钱
     * @param username 用户名
     * @param num 存钱数量
     * @return 余额
     */
     Integer saveMoney(String username,int num);
     
     /**
      *  取钱
      * @param username 用户名
      * @param num 取钱数量
      * @return 余额
      */
     Integer drawMoney(String username,int num );
     
     /**
      * 转账
      * @param username 转出人
      * @param toName 转入人
      * @param money 钱数
      * @return 转出人余额
      */
    Integer transferMoney(String username,String toName,int money);
    
    /**
     * 获得用户和他的流水信息
     * @param username 用户名
     * @return 用户信息
     */
    AlipayUser getAllImf(String username);
}
DaoImpl


package com.oracle.daoImpl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


import java.util.ArrayList;
import java.util.List;

import com.oracle.dao.AlipayUserDao;
import com.oracle.entity.AlipayAccount;
import com.oracle.entity.AlipayUser;
import com.oracle.util.ConnectionTool;

public class AlipayUserDaoImpl  implements AlipayUserDao{
    private Connection conn;
    private PreparedStatement ps;
    private ResultSet rs;
    
//	@Override
//	public Integer saveMoney(String username, int num) {
//		Integer result=null;
//		conn=ConnectionTool.getConnection();
//		String sql="update alipay_user set money=money+? where username=?";
//		String sqlInsert="insert into alipay_account (user_id,operate_time,operate_type,num) values ((select id from alipay_user where username=?),now(),1,?)";
//		//String sqlSelect="select money from alipay_user where username=?";
//		try {
//			conn.setAutoCommit(false);
//			ps=conn.prepareStatement(sql);
//			ps.setInt(1,num);
//			ps.setString(2,username);
//			int i=ps.executeUpdate();
//			ps=conn.prepareStatement(sqlInsert);
//			ps.setString(1,username);
//			ps.setInt(2,num);
//			ps.executeUpdate();
////			ps=conn.prepareStatement(sqlSelect);
////			ps.setString(1, username);
////			rs=ps.executeQuery();
////			if(rs.next()){
////				result=rs.getInt(1);
////			}
//			result=this.getBalance(username);
//			
//			conn.commit();
//		} catch (SQLException e) {
//			try {
//				conn.rollback();
//			} catch (SQLException e1) {
//				e1.printStackTrace();
//			}
//			e.printStackTrace();
//		}finally{
//			ConnectionTool.close(rs, ps, conn);
//		}
//		return result;
//	}
    
    
	/**
	 * 操作的工具方法
	 * @param name
	 * @param num
	 * @param flag  true 存钱   false 取钱 
	 */
	private void operateAccount(String name,int num , boolean flag){
		conn=ConnectionTool.getConnection();
		String sql="update alipay_user set money=money+? where username=?";
		String sqlInsert="insert into alipay_account (user_id,operate_time,operate_type,num)"
				+ " values "
				+ "((select id from alipay_user where username=?),now(),"+(flag?"1":"2")+",?)";
		try {
			conn.setAutoCommit(false);
			ps=conn.prepareStatement(sql);
			num=flag?num:-num;// 处理存钱还是取钱 确定num的正负 问题
			ps.setInt(1,num);
			ps.setString(2,name);
			int i=ps.executeUpdate();
			
			ps=conn.prepareStatement(sqlInsert);
			ps.setString(1,name);
			ps.setInt(2,num);
			ps.executeUpdate();
			conn.commit();
		} catch (SQLException e) {
			try {
				conn.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		}finally{
			ConnectionTool.close(rs, ps, conn);
		}
	}
	
	
	
	@Override
	public Integer saveMoney(String username, int num) {
		Integer result=null;
		this.operateAccount(username, num,true);
		result=this.getBalance(username);
		return result;
	}
	
	@Override
	public Integer drawMoney(String username, int num) {
		Integer result=null;
		if(!this.judgeMoney(username, num)){
			return result;
		}
		this.operateAccount(username, num,false);
		result=this.getBalance(username);
		return result;
	}
	
	
	
	/**
	 * 获得余额
	 * @param username 
	 * @return 余额
	 */
	private Integer  getBalance(String username){
		Integer result =null;
		String sqlSelect="select money from alipay_user where username=?";
		conn=ConnectionTool.getConnection();
		try {
			ps=conn.prepareStatement(sqlSelect);
			ps.setString(1, username);
			rs=ps.executeQuery();
			if(rs.next()){
				result=rs.getInt(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return result;
	}
    
	private boolean judgeMoney(String username,int num){
		boolean result=false;
		if(this.getBalance(username)>=num){
			result=true;
		}
		return result;
	}
	
	
	@Override	
	public Integer transferMoney(String username, String toName, int money) {
          // 验证 余额 
		  Integer result=null;
		  if(!this.judgeMoney(username, money)){
			   return result;
		  }
		
		
		  conn=ConnectionTool.getConnection();
		
		  String sql="update alipay_user set money=money+? where username=?";
		  String sqlInsert="insert into alipay_account(user_id, other_id,num,operate_type,operate_time)"
		  		+ " values ((select id from alipay_user where username=?),(select id from alipay_user where username=?),?,3,now())";
		  try {
		    conn.setAutoCommit(false);
			ps=conn.prepareStatement(sql);
			ps.setInt(1,-money);
			ps.setString(2,username);
			ps.executeUpdate();// 修改转出账户余额
			
			
			ps.setInt(1,money);
            ps.setString(2,toName);			
			ps.executeUpdate();// 修改转入账户余额 
			
			
			ps=conn.prepareStatement(sqlInsert);
			ps.setString(1,username);
            ps.setString(2,toName);
            ps.setInt(3,-money);
            ps.executeUpdate();// 添加 转出账户流水 
            
        	ps.setString(1,toName);
            ps.setString(2,username);
            ps.setInt(3,money);
            ps.executeUpdate();// 添加 转入账户流水 
            
            
			conn.commit();
		} catch (SQLException e) {
			try {
				conn.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		}finally{
			ConnectionTool.close(rs, ps, conn);
		}
		result=this.getBalance(username);
		return result;
	}


	/**
	 * 查询个人的信息
	 * @param username
	 * @return
	 */
	public AlipayUser getUser(String username){
		
		AlipayUser user=null;
		String sqlSelect="select * from alipay_user where username=?";
		conn=ConnectionTool.getConnection();
		try {
			ps=conn.prepareStatement(sqlSelect);
			ps.setString(1, username);
			rs=ps.executeQuery();
			if(rs.next()){
				user=new AlipayUser();
				user.setId(rs.getInt("id"));
				user.setUsername(rs.getString("username"));
				user.setPass(rs.getString("pass"));
				user.setMoney(rs.getInt("money"));
				user.setCreditValue(rs.getInt("creditValue"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return user;
	}
	
	/**
	 * 返回个人流水信息
	 * @param username
	 * @return
	 */

	public List<AlipayAccount> getAccount(String username){
		List<AlipayAccount> list=new ArrayList<>();
		String sql="select * from alipay_account where user_id="
				+ "(select id from alipay_user where username=?)";
		conn=ConnectionTool.getConnection();
		try {
			ps=conn.prepareStatement(sql);
			ps.setString(1, username);
			rs=ps.executeQuery();
			while(rs.next()){
				AlipayAccount acc=new AlipayAccount();
				acc.setId(rs.getInt("id"));
				acc.setNum(rs.getInt("num"));			
				acc.setOperateTime(rs.getTimestamp("operate_time"));
				//String s=rs.getDate("operate_time")+" "+rs.getTime("operate_time");
				acc.setOperateTyte(rs.getInt("operate_type"));
				acc.setUserId(rs.getInt("user_id"));
				acc.setOtherId(rs.getInt("other_id"));
				list.add(acc);			
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return list;
		
	}
	
	@Override
	public AlipayUser getAllImf(String username) {
		AlipayUser user =this.getUser(username);
		List<AlipayAccount> account=this.getAccount(username);
		user.setAccount(account);		
		return user;
	}
}

Test

package com.oracle.test;

import java.util.ArrayList;
import java.util.List;

import com.oracle.dao.AlipayUserDao;
import com.oracle.daoImpl.AlipayUserDaoImpl;
import com.oracle.entity.AlipayAccount;
import com.oracle.entity.AlipayUser;

public class TestAlipay {

	public static void main(String[] args) {
         AlipayUserDao ad=new AlipayUserDaoImpl();
        // System.out.println(ad.saveMoney("haha", 1000));
        // System.out.println(ad.drawMoney("haha",50));
         System.out.println(ad.transferMoney("haha", "heihei", 200));
//         List<AlipayAccount> list=new ArrayList<>();
//         AlipayUser user=new AlipayUser();
//         user=ad.getAllImf("haha");
//         System.out.println(user);
//         list=user.getAccount();
//         for(AlipayAccount ac:list){
//        	 System.out.println(ac);
//         }
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值