SSM框架:转账功能,分页显示日志所记录的转账记录

第一步:实现转账业务

  1. 定义Account属性,id,accno(账号),password,banlance,name
  2. 在AccountMapper中,根据账号和密码查询转账账户的信息,根据账号和姓名查询收款账户信息,根据账户信息修改余额。
//根据账户信息修改余额
<update id="updBalanceByAccno" parameterType="com.bean.Account">
  update account set balance=balance+#{balance} where accno=#{accno}
 </update>
  1. 错误信息提示可以是int、String主要看你想返回什么信息。在AccountService中定义一个类似如下的常量。在AccountServiceImpl中可以直接调用。
  //账号和密码不匹配状态码
 public static final int ACCOUNT_PASSWORD_NOT_MATCH=1;
  1. 在AccountServiceImpl中,代码如下。要记得session.commit();
InputStream is= Resources.getResourceAsStream("mybatis.xml");
  SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
  SqlSession sqlSession=sqlSessionFactory.openSession();
  //先判断账户和密码是否正确
  Account accOutSelect=sqlSession.selectOne("com.mapper.accountMapper.selByAccnoPwd", accOut);
  //如果不为空,则账户密码正确
  if(accOutSelect !=null) {
   //判断转账金额是否大于余额
   if(accOutSelect.getBalance()>=accOut.getBalance()) {
   //判断收款账户是否正确 
   Account accInSelect =sqlSession.selectOne("com.mapper.accountMapper.selByAccnoName", accIn);
     if(accInSelect !=null){
      //设置收款金额
     accIn.setBalance(accOut.getBalance());
      //金额设置负值,则转账总金额减少
    accOut.setBalance(-accOut.getBalance());
    //更新收款、转账账户余额
    int index=sqlSession.update("com.mapper.accountMapper.updBalanceByAccno", accOut);
    index+=sqlSession.update("com.mapper.accountMapper.updBalanceByAccno",accIn);
    if(index==2) {
     //转账成功,向日志表中做记录
     Log log=new Log();
     log.setAccin(accIn.getAccno());
     log.setAccout(accOut.getAccno());
     log.setMoney(accIn.getBalance());
     sqlSession.insert("com.mapper.logMapper.addlog",log);
     
     //日志文件记录转账时间等信息
     Logger logger=Logger.getLogger(accountServiceImpl.class);
     logger.info(log.getAccout()+"给"+log.getAccin()+"在"+new Date().toLocaleString()+"转了"+log.getMoney());
     
     sqlSession.commit();
     sqlSession.close();
     return SUCCES;
    }else {
     //转账失败
     sqlSession.rollback();
     sqlSession.close();
     return ERROR;
    }
    }else {
    //收款账户不正确
     return ACCOUNT_NAME_NOT_MATCH;
    }
   }else {
    //余额不足
    return ACCOUNT_BALANCE_NOT_ENOUGH;
   }
  }else {
   //账户密码不正确
   return ACCOUNT_PASSWORD_NOT_MATCH;
  }

5.在AccountServlet中接收各种参数。若转账不成功,可能是中文乱码,设置相关参数。

//在AccountServlet中
req.setCharacterEncoding("UTF-8");
在mybatis.xml文件中
<property name="url" value="jdbc:mysql://localhost:3306/java?useUnicode=true&amp;characterEncoding=UTF-8"/>

第二步:日志记录转账记录,分页显示

  1. 定义Log属性,id,accOut(转账账户),accIn(收款账户),money
    定义PageInfo属性,pageSize(每页显示个数)、pageNumber(当前页数)、total(总页数)、list(当前页显示的数据)。private List<?> list;因为分页显示何种类型数据不清楚,所以用?代替。
  2. 在logMapper中,将转账记录记入到log中,查询每页显示数据,查询总共有多少数据。
pageStart为当前页从第几个开始
<select id="selByPage" parameterType="map" resultType="com.bean.Log">
  select * from log limit #{pageStart},#{pageSize}
 </select>
 
 <select id="selCount" resultType="long">
  select count(*) from log
 </select>

3.在logServiceImpl中,pageSize和pageNumber都是接收的数据。total和list需要计算。

  Map<String, Object> map=new HashMap<>();
   map.put("pageSize", pageSize);
   map.put("pageStart", pageSize*(pageNumber-1));
   pi.setList(sqlSession.selectList("com.mapper.studentMapper.selPage", map));
   
   long total=sqlSession.selectOne("com.mapper.studentMapper.selCount");
   pi.setTotal(total%pageSize==0?total/pageSize:total/pageSize+1);

4.在logServlet中。第一次访问,pageSize和pageNumber没有传递参数,要设置默认值。

String pageSizeStr=req.getParameter("pageSize");
  int pageSize=2;
  if(pageSizeStr !=null && !pageSizeStr.equals("")) {
   pageSize=Integer.parseInt(pageSizeStr);
  }
  
  String pageNumberStr=req.getParameter("pageNumber");
  int pageNumber=1;
  if(pageNumberStr !=null && !pageNumberStr.equals("")) {
   pageNumber=Integer.parseInt(pageNumberStr);
  }

5.在jsp页面中,对上一页和下一页的获取参数的获取,而且要判断当第一页时,点击无效,最后一页时,点击无效。

<!--判断当第一页和最后一页时,点击无效。
 <c:if test="${pageInfo.pageNumber<=1 }">onclick="javascript:return false;"</c:if>
   <c:if test="${pageInfo.pageNumber>=pageInfo.total }">onclick="javascript:return false;"</c:if>-->
   //show为servlet中@webservlet中的值。&中没有空格。
 <a href="show?pageSize=${pageInfo.pageSize }&pageNumber=${pageInfo.pageNumber-1}" >上一页</a>
 <a href="show?pageSize=${pageInfo.pageSize }&pageNumber=${pageInfo.pageNumber+1}" >下一页</a>

总结:功能简单,记录下来只是为了方便复习,不喜勿喷。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值