【SSM】MyBatis(四.MyBatis在web中的应用)
创始人
2025-06-01 18:10:32
0

文章目录

  • 1.实现一个银行转账
  • 2 实现步骤
    • 2.1环境搭建
    • 2.2 准备页面
    • 2.3创建包
  • 3.完整代码
    • 3.1dao(数据持久层)
    • 3.2 service (业务处理层)
    • 3.3web(表现层)

1.实现一个银行转账

准备数据库和数据库中的数据:
在这里插入图片描述
在这里插入图片描述

2 实现步骤

2.1环境搭建

(1)IDEA中创建Maven WEB应用
在这里插入图片描述
在这里插入图片描述
(2)将web.xml配置为更高的版本
在这里插入图片描述
在这里插入图片描述
即将web.xml更换为:



 

(3)添加依赖

org.mybatismybatis3.5.10mysqlmysql-connector-java5.1.37ch.qos.logbacklogback-classic1.2.11javax.servletjavax.servlet-api4.0.1

(4)配置Tomcat服务器

在这里插入图片描述
在这里插入图片描述

(5)将之前的resources资源拷贝下来
在这里插入图片描述
在这里插入图片描述

(6)修改mybatis-config.xml为下面:





2.2 准备页面



银行账户转账


转出账户:
转入账户:
转出金额:

2.3创建包

在这里插入图片描述
pojo包中建Account

package com.sndu.bank.pojo;/*** 封装账户类** @author Beyong* @version 1.0* @since 1.0*/
public class Account {private Long id;private String actno;private Double balance;public Account() {}public Account(Long id, String actno, Double balance) {this.id = id;this.actno = actno;this.balance = balance;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getActno() {return actno;}public void setActno(String actno) {this.actno = actno;}public Double getBalance() {return balance;}public void setBalance(Double balance) {this.balance = balance;}@Overridepublic String toString() {return "Account{" +"id=" + id +", actno='" + actno + '\'' +", balance=" + balance +'}';}
}

utils包中新建SqlSessionUtil.java

package com.sndu.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;/*** mybatis工具类*/
public class SqlSessionUtil {private static SqlSessionFactory sqlSessionFactory;private SqlSessionUtil(){}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();}
}

exception包

package com.sndu.bank.exceptions;/*** 余额不足异常*/
public class MoneyNotEnoughException extends Exception{public MoneyNotEnoughException() {}public MoneyNotEnoughException(String msg) {super(msg);}
}
package com.sndu.bank.exceptions;public class TransferException extends Exception{public TransferException() {}public TransferException(String message) {super(message);}
}

3.完整代码

在这里插入图片描述

3.1dao(数据持久层)

AccountDao.java

package com.sndu.bank.dao;import com.sndu.bank.pojo.Account;/*** 账户的Dao对象,负责表中t_act的CRUD* @author Beyong* @version 1.0* @since 1.0*/
public interface AccountDao {/*** 根据账户查询账户信息* @param actno 账号* @return 账户信息*/Account selectByActno(String actno);/*** 更新账户信息* @param act 要更新的账户* @return 1表示更新成功,其它表示更新失败*/int updateByActno(Account act);
}

AccountDaoImpl.java

package com.sndu.bank.dao.impl;import com.sndu.bank.dao.AccountDao;
import com.sndu.bank.pojo.Account;
import com.sndu.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);return account;}@Overridepublic int updateByActno(Account act) {SqlSession sqlSession = SqlSessionUtil.openSession();int count = sqlSession.update("account.updateByActno", act);return count;}
}

3.2 service (业务处理层)

package com.sndu.bank.service;import com.sndu.bank.exceptions.MoneyNotEnoughException;
import com.sndu.bank.exceptions.TransferException;/*** 账户业务类* @author Beyong* @version 1.0* @since 1.0*/
public interface AccountService {/*** 转账* @param fromActno 转成账户* @param toActno 转让账户* @param money 转成金额*/void transfer(String fromActno, String toActno, double money) throws MoneyNotEnoughException, TransferException;
}
package com.sndu.bank.service.impl;import com.sndu.bank.dao.AccountDao;
import com.sndu.bank.dao.impl.AccountDaoImpl;
import com.sndu.bank.exceptions.MoneyNotEnoughException;
import com.sndu.bank.exceptions.TransferException;
import com.sndu.bank.pojo.Account;
import com.sndu.bank.service.AccountService;
import com.sndu.bank.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;public class AccountServiceImpl implements AccountService {private AccountDao accountDao = new AccountDaoImpl();@Overridepublic void transfer(String fromActno, String toActno, double money) throws MoneyNotEnoughException, TransferException {SqlSession sqlSession = SqlSessionUtil.openSession();//1.判断账户余额是否充足(select)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);//        //模拟空指针异常
//        String s = null;
//        s.toString();//4.更新转入账户余额count += accountDao.updateByActno(toAct);if(count != 2){throw new TransferException("转账异常");}//提交事务sqlSession.commit();//关闭事务SqlSessionUtil.close(sqlSession);}
}

3.3web(表现层)

package com.sndu.bank.web;import com.sndu.bank.exceptions.MoneyNotEnoughException;
import com.sndu.bank.exceptions.TransferException;
import com.sndu.bank.service.AccountService;
import com.sndu.bank.service.impl.AccountServiceImpl;import javax.servlet.ServletException;
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 ServletException, IOException {String fromActno = request.getParameter("fromActno");String toActno = request.getParameter("toActno");double money = Double.parseDouble(request.getParameter("money"));//调用service方法完成转账(调用业务层)try {accountService.transfer(fromActno, toActno, money);response.sendRedirect(request.getContextPath() + "/success.html");} catch (MoneyNotEnoughException e) {response.sendRedirect(request.getContextPath() + "/error1.html");} catch (TransferException e) {response.sendRedirect(request.getContextPath() + "/error2.html");} catch (Exception e){response.sendRedirect(request.getContextPath() + "/error2.html");}}
}

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...