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;
}
}
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);
// }
}
}