做一家开发网站的公司简介,网站如何做后台,广告投放数据分析报告,网站建设所需基本资料文章目录 数据库表的设计和准备数据环境搭建前端页面编写后端代码实现后端代码目录dao层servicewebpojoUtils 数据库表的设计和准备数据 环境搭建
在pom.xml中配置依赖#xff08;logback、mybatis、mysql、servlet#xff09; 注意引入tomcat
前端页面编写
!DOCTYPE … 文章目录 数据库表的设计和准备数据环境搭建前端页面编写后端代码实现后端代码目录dao层servicewebpojoUtils 数据库表的设计和准备数据 环境搭建
在pom.xml中配置依赖logback、mybatis、mysql、servlet 注意引入tomcat
前端页面编写
!DOCTYPE html
html langen
headmeta charsetUTF-8meta http-equivX-UA-Compatible contentIEedgemeta nameviewport contentwidthdevice-width, initial-scale1.0title银行账户转账/title
/head
bodyform action/bank/transfer methodpost转出账户input typetext namefromActnobr转入账号input typetext nametoActnobr转账金额input typetext namemoneybrinput typesubmit value转账/form
/body
/html后端代码实现
后端代码目录 dao层
//AccountDaoImpl
package com.example.bank.dao.impl;import com.example.bank.dao.AccountDao;
import com.example.bank.pojo.Account;
import com.example.bank.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;public class AccountDaoImpl implements AccountDao {Overridepublic Account selectByActno(String actno) {SqlSession sqlSession SqlSessionUtil.openSession();Account account (Account) sqlSession.selectOne(account.selectByActno, actno);sqlSession.close();return account;}Overridepublic int updateByActno(Account act) {SqlSession sqlSession SqlSessionUtil.openSession();int count sqlSession.update(account.updateByActno,act);sqlSession.commit();sqlSession.close();return count;}
}package com.example.bank.dao;import com.example.bank.pojo.Account;//dao对象中的任何一个方法和业务不挂钩没有任何业务逻辑在里面
//DAO中的方法就是做CRUD的
public interface AccountDao {//根据账号查询账户信息Account selectByActno(String actno);//更新账户信息int updateByActno(Account act);
}dao层是三层架构的最底层是数据访问层主要是连接MySQL并做数据的CRUD不包含任何的逻辑 service
//AccountServiceImpl
package com.example.bank.service.impl;import com.example.bank.dao.AccountDao;
import com.example.bank.dao.impl.AccountDaoImpl;
import com.example.bank.exceptions.MoneyNotEnoughException;
import com.example.bank.exceptions.TransferException;
import com.example.bank.pojo.Account;
import com.example.bank.service.AccountService;public class AccountServiceImpl implements AccountService {private AccountDao accountDao new AccountDaoImpl();Overridepublic void transfer(String fromActno, String toActno, double money) throws MoneyNotEnoughException, TransferException {//1、判断转出账户的余额是否充足Account fromAct accountDao.selectByActno(fromActno);if (fromAct.getBalance() money){//2、如果转出账户余额不足提示用户throw new MoneyNotEnoughException(对不起您的余额不足);}//3、如果转出账户余额充足更新转出账户余额update//先更新内存中java对象account的余额Account toAct accountDao.selectByActno(toActno);fromAct.setBalance(fromAct.getBalance() - money);toAct.setBalance(toAct.getBalance() money);int count accountDao.updateByActno(fromAct);//4、更新转入账户余额updatecount accountDao.updateByActno(toAct);if (count ! 2){throw new TransferException(转账异常未知原因);}}}//AccountService
package com.example.bank.service;import com.example.bank.exceptions.MoneyNotEnoughException;
import com.example.bank.exceptions.TransferException;public interface AccountService {
// param fromActno 转出账号
// param toActno 转入账号
// param money 转账金额void transfer(String fromActno, String toActno, double money) throws MoneyNotEnoughException, TransferException;
}service层是业务逻辑层主要是对数据进行逻辑的处理页面的改变等。这里的逻辑主要就是对余额先进行能否转移的判断其次是对账户余额的转移改变最后就是对不同错误的出现返回不同的错误类型 web
//AccountServlet
package com.example.bank.web;import com.example.bank.exceptions.MoneyNotEnoughException;
import com.example.bank.exceptions.TransferException;
import com.example.bank.service.AccountService;
import com.example.bank.service.impl.AccountServiceImpl;import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
WebServlet(/transfer)
public class AccountServlet extends HttpServlet {//为了让这个对象在其他方法中也可以用private AccountService accountService new AccountServiceImpl();Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws IOException{//获取表单数据String fromActno request.getParameter(fromActno);String toActno request.getParameter(toActno);double money Double.parseDouble(request.getParameter(money));try {//调用servlet的转账方法完成转账。调业务层accountService.transfer(fromActno,toActno,money);//程序能够走到这里表示转账一定成功了//调用view完成展示结果response.sendRedirect(request.getContextPath() /success.html);} catch (MoneyNotEnoughException e) {response.sendRedirect(request.getContextPath() /error1.html);} catch (TransferException e) {response.sendRedirect(request.getContextPath() /error2.html);}}
}展示层获取表单数据以及针对不同情况错误的出现展示不同的页面信息。 pojo
pojo是封装类账号的类型里面有的相关数据一方面能在java中进行数据操作另一方面对接MySQL的账户信息方便CRUD。
package com.example.bank.web;import com.example.bank.exceptions.MoneyNotEnoughException;
import com.example.bank.exceptions.TransferException;
import com.example.bank.service.AccountService;
import com.example.bank.service.impl.AccountServiceImpl;import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
WebServlet(/transfer)
public class AccountServlet extends HttpServlet {//为了让这个对象在其他方法中也可以用private AccountService accountService new AccountServiceImpl();Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws IOException{//获取表单数据String fromActno request.getParameter(fromActno);String toActno request.getParameter(toActno);double money Double.parseDouble(request.getParameter(money));try {//调用servlet的转账方法完成转账。调业务层accountService.transfer(fromActno,toActno,money);//程序能够走到这里表示转账一定成功了//调用view完成展示结果response.sendRedirect(request.getContextPath() /success.html);} catch (MoneyNotEnoughException e) {response.sendRedirect(request.getContextPath() /error1.html);} catch (TransferException e) {response.sendRedirect(request.getContextPath() /error2.html);}}
}Utils
package com.example.bank.utils;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;public class SqlSessionUtil {private SqlSessionUtil(){}private static SqlSessionFactory sqlSessionFactory;static {try {sqlSessionFactory new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream(mybatis-config.xml));} catch (IOException e) {throw new RuntimeException(e);}}public static SqlSession openSession(){return sqlSessionFactory.openSession();}}写好的工具类方便在dao层获取sqlsession对象。 银行转账小功能