【SSM】MyBatis(四.MyBatis在web中的应用)
创始人
2025-06-01 18:24:58
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");}}
}

相关内容

热门资讯

最新或2023(历届)小学生防... 导语:小学生参加游泳应结伴集体活动,不可单独游泳,最好要有成人的带领。下面太阳教育网为你送上小学生防...
最新或2023(历届)防溺水黑... 导语:游泳应在有安全保障区的游泳区内进行,严禁在非游泳区内游泳。下面太阳教育网为你送上防溺水黑板报。...
最新或2023(历届)小学防溺... 导语:不会游泳的人,千万不要单独在水边玩耍;没有大人的监护,不要和伙伴们玩水。下面太阳教育网为你送上...
最新或2023(历届)小学防溺... 导语:预防溺水,不要让水变成亲人的眼泪!下面太阳教育网为你送上小学防溺水黑板报。  水,是生命之源,...
最新或2023(历届)小学防溺... 导语:珍爱生命,关爱为先,切实做好防溺水工作。珍爱生命,远离危险水域。下面太阳教育网为你送上防溺水黑...
最新或2023(历届)关于国庆...   祖国,那雄壮的山河,英姿的风貌,可爱的人类,汇成了一曲美妙的乐章。祖国我为你骄傲,我为你自豪。回...
最新或2023(历届)十一国庆...   有一种情意,使人心心相印;有一种情意,让人牵肠挂肚;有一种情意,将人紧密联系。这样的情意,是绿叶...
最新或2023(历届)关于国庆...   明朗朗的国庆,乐呵呵的你,贴心的问候送给你;清爽爽的金秋,笑盈盈的你,美好的生活等着你;喜庆庆的...
最新或2023(历届)小学生国...   朋友不一定经常联系,但一定放在心里,时时会关心,刻刻会牵挂,分分会问候,秒秒会思念,只因“朋友”...
最新或2023(历届)小学生国...   国庆节来临了,大街上一片热闹的景象。人们三五成群、喜气洋洋的来到市中心广场,在烟花炮烛之夜、张灯...
最新或2023(历届)最好的国...   一把黄土塑成千万个你我,静脉是长城,动脉是黄河;黑眼睛,黄皮肤,我们拥有一个共同的名字-中国。亲...
最新或2023(历届)简单的国...   1949年,中华人民共和国成立了!饱经战争沧桑与落后苦难的中国人民终于重新站起来了!中国像一只巨...
最新或2023(历届)庆祝国庆... 500 - 内部服务器错误。服务器错误500 - 内部服务器错误。您查找的资源存在问题,因而无法显示...
最新或2023(历届)简单的国...   亲爱的朋友们,期待已久,国庆假日终于来临了,心脏狂跳不受控制呢,这为什么呢,嘻嘻,自然是明天我想...
最新或2023(历届)最好的国... 500 - 内部服务器错误。服务器错误500 - 内部服务器错误。您查找的资源存在问题,因而无法显示...
最新或2023(历届)小学生国...   亲爱的小朋友们, 国庆假期拿起快乐的画笔,装饰笑容的美丽;舞动浪漫的裙底,吹走烦恼的沙砾;收获...
最新或2023(历届)庆祝国庆...   又是一年金秋好时节,繁花似锦,欢歌如潮。亲朋好友相聚,情人恋人相聚,你我他相聚,大家一起为明天更...
最新或2023(历届)十一国庆...   朋友不一定经常联系,但一定放在心里,时时会关心,刻刻会牵挂,分分会问候,秒秒会思念,只因“朋友”...
最新或2023(历届)最好的国...   明朗朗的国庆,乐呵呵的你,贴心的问候送给你;清爽爽的金秋,笑盈盈的你,美好的生活等着你;喜庆庆的...
最新或2023(历届)小学生国...   “千门万户瞳瞳日,总把旧桃换新符。”一元复始,万象更新。俗话说:年年岁岁花相似,岁岁年年人不同。...