概念

本文是根据Jsp以及Servlet课程,结合MyBatis框架的综合运用,开发一个小项目网站,使用MVC+三层架构的项目搭建方式来编写本文文章。

1.数据库的创建

本文使用MySQL数据搭建数据库的平台,开发软件使用Navicat软件。打开软件后,创建数据库名称为mydb,在该数据库中创建表account,表的字段为:

请阅读者根据该图创建数据库表,并添加模拟数据

2.搭建网站项目配置环境以及创建MVC架构

打开idea开发软件,新建动态网站项目,并将mybatis框架的配置文件导入项目,将所需要的架包放入lib文件夹,该过程如果有初学者还未掌握的,请查看

【MyBatis】第一课 MyBatis的框架的搭建和使用_笔触狂放的博客-CSDN博客

本篇文章进行搭建好项目。

然后将项目按照MVC+三层架构的方式搭建项目

3.完成首页jsp文件

在web文件夹下,新建index.jsp文件,如果存在该文件,则不需再创建。在该文件中编写html代码,完成简单的html页面。

index.jsp代码如下


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>首页</title></head><body><%--快捷键tab,代码自动补全--%><div align="center"><h1>银行账户管理系统</h1><a href="addAccount.jsp">开户</a>&nbsp;&nbsp;<a href="AccountListServlet">查询</a></div></body>
</html>

将项目进行初步运行,部署在tomcat服务器上,配置tomcat的运行步骤,初学者如果还未掌握请查阅【Java】Idea软件配置tomcat以及创建web项目步骤_笔触狂放的博客-CSDN博客_tomcat怎么添加web项目

本篇文章的介绍。

4.新增账户信息

在controoler控制层中 新建Servlet类AccountServlet,因Servlet属于tomcat服务器的api架包,需先导入jsp-api.jar,servlet-api.jar包才能使用。

即AccountServlet代码如下:

package com.account.controller;import com.account.service.AccountServiceImp;
import com.account.service.IAccountService;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;
import java.util.Map;@WebServlet(urlPatterns = "/AccountServlet")
public class AccountServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("application/json");response.setCharacterEncoding("UTF-8");request.setCharacterEncoding("UTF-8");//接收浏览器提交了六个数据Map<String, String[]> infos = request.getParameterMap();//把数据提交给业务逻辑层做处理IAccountService service=new AccountServiceImp();int i = service.addAccount(infos);if (i>0){//说明新增了一个账户,跳转回首页response.sendRedirect("index.jsp");}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}

该控制层需要访问业务逻辑层,接口文件为IAccountService,实现类为AccountServiceImp

IAccountService.java

package com.account.service;import java.util.List;
import java.util.Map;/*** 业务逻辑层*/
public interface IAccountService {//添加账户int addAccount(Map<String,String[]> map);}

AccountServiceImp.java

package com.account.service;import com.account.dao.IAccountDao;
import com.account.util.DBUtil;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 业务逻辑层,对数据进行处理和加工*/
public class AccountServiceImp implements IAccountService {//alt+enter@Overridepublic int addAccount(Map<String, String[]> map) {Map<String,Object> m=new HashMap<>();for (Map.Entry<String,String[]> e:map.entrySet()) {m.put(e.getKey(),e.getValue()[0]);}int i = DBUtil.dao.add(m);//做事务的提交DBUtil.sqlSession.commit();return i;}}

工具类代码如下:

DBUtils.java

package com.account.util;import com.account.dao.IAccountDao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;public class DBUtil {public static SqlSession sqlSession=null;public static IAccountDao dao=null;static {//要加载MyBatis框架//1.将主配置文件转换成输入流try {InputStream is = Resources.getResourceAsStream("mybatis-config.xml");sqlSession = new SqlSessionFactoryBuilder().build(is).openSession();dao = sqlSession.getMapper(IAccountDao.class);} catch (IOException e) {e.printStackTrace();}}
}

在dao层中新建IAccountDao

IAccountDao.java代码如下

package com.account.dao;import org.apache.ibatis.annotations.*;import java.util.List;
import java.util.Map;/*** 使用MyBatis框架作为dao层,用于操作sql语句做增删改查*/
public interface IAccountDao {//执行添加账户的操作@Insert("insert into account values(#{id},#{password},#{name},#{personid},#{balance},#{opendate})")int add(Map<String,Object> map);}

打开主配置文件mybatis-config.xml,将dao层中的java注解的mybatis的接口文件完整包的路径加入主配置文件

接着可以运行项目至tomcat服务器上

最后能回到首页,说明添加成功了,可以刷新数据库表中的数据,观察是否数据已添加成功。

5.查询账户信息功能

通过点击首页的查询超链接,向AccountListServlet发送get请求,

AccountListServlet收到请求后,向业务逻辑层发送执行任务,并将返回值存储起来

package com.account.controller;import com.account.service.AccountServiceImp;
import com.account.service.IAccountService;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;
import java.util.List;
import java.util.Map;@WebServlet(urlPatterns = "/AccountListServlet")
public class AccountListServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("application/json");response.setCharacterEncoding("UTF-8");request.setCharacterEncoding("UTF-8");//收到浏览器的请求,完成获得数据库中所有账户信息IAccountService service=new AccountServiceImp();List<Map<String, Object>> accounts = service.getAccounts();//将查询出来的所有账户信息存储起来request.getSession().setAttribute("accounts",accounts);//跳转至展示列表信息的页面response.sendRedirect("showList.jsp");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}

业务逻辑层中IAccountService代码如下:

//获得所有账户信息List<Map<String,Object>> getAccounts();

业务逻辑层中AccountServiceImp代码如下:

 @Overridepublic List<Map<String, Object>> getAccounts() {return DBUtil.dao.getAccounts();}

数据访问层中IAccountDao代码如下:

//查询所有账户信息@Select("select * from account")List<Map<String,Object>> getAccounts();

在控制层接收到查询的数据后,发送到页面上进行展示在表格上

<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>账户信息列表</title>
</head>
<body>
<%--获得所有账户信息--%>
<% List<Map<String,Object>> accounts=(List<Map<String,Object>>)session.getAttribute("accounts");%>
<div align="center"><table border="1" style="border-collapse: collapse;text-align: center;width: 1000px;"><tr><th>账号</th><th>密码</th><th>姓名</th><th>身份证号</th><th>余额</th><th>开户日期</th><th>操作</th></tr><% for (int i = 0; i <accounts.size() ; i++) {%><tr><td><%=accounts.get(i).get("id")%></td><td><%=accounts.get(i).get("password")%></td><td><%=accounts.get(i).get("name")%></td><td><%=accounts.get(i).get("personid")%></td><td ><%=accounts.get(i).get("balance").toString()%></td><td><%=accounts.get(i).get("opendate")%></td><td><a href="updateAccount.jsp?index=<%=i%>">修改</a>&nbsp;<a href="DeleteServlet?id=<%=accounts.get(i).get("id")%>">删除</a></td></tr><%}%></table>
</div>
</body>
</html>

显示效果如下:

6.完成修改账户信息功能

通过点击账户信息列表上的修改超链接,将当期那要修改的账户信息对应的下标发送到修改页面,并在修改页面上获得下标值,以及从session中获得列表数据信息,根据下标从列表集合中获得要修改的账户信息,展示在修改页面上。

updateAccount.jsp代码如下:
<%@ page import="java.util.Map" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>更新账户</title>
</head>
<body>
<%--获得要修改的账户信息对应的下标--%>
<% int index=Integer.parseInt(request.getParameter("index"));%>
<%--从session中获得所有账户信息--%>
<% List<Map<String,Object>> accounts=(List<Map<String,Object>>)session.getAttribute("accounts");%><div align="center"><form action="UpdateServlet" method="post"><table border="1" style="text-align: center;border-collapse: collapse"><tr><td colspan="2"><h3>修改账户</h3></td></tr><tr><td>账号</td><td><input type="text" name="id" value="<%=accounts.get(index).get("id")%>"></td></tr><tr><td>密码</td><td><input type="password" name="password" value="<%=accounts.get(index).get("password")%>"></td></tr><tr><td>姓名</td><td><input type="text" name="name" value="<%=accounts.get(index).get("name")%>"></td></tr><tr><td>身份证号</td><td><input type="text" name="personid" value="<%=accounts.get(index).get("personid")%>"></td></tr><tr><td>余额</td><td><input type="number" name="balance" value="<%=accounts.get(index).get("balance")%>"></td></tr><tr><td>开户日期</td><td><input type="text" name="opendate" value="<%=accounts.get(index).get("opendate")%>"></td></tr><tr><td colspan="2"><input type="submit" value="修改"></td></tr></table></form></div>
</body>
</html>

效果图如下:

当用户修改信息后,将修改后的数据进行提交给控制层的UpdateServlet,在修改中账号不能被修改,账号作为主键id,是唯一的,也是修改执行的判断条件。

UpdateServlet代码如下:

package com.account.controller;import com.account.service.AccountServiceImp;
import com.account.service.IAccountService;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;
import java.util.Map;@WebServlet(urlPatterns = "/UpdateServlet")
public class UpdateServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("application/json");response.setCharacterEncoding("UTF-8");request.setCharacterEncoding("UTF-8");Map<String, String[]> parameterMap = request.getParameterMap();//发送给业务逻辑层IAccountService service=new AccountServiceImp();int i = service.update(parameterMap);if (i>0){//修改成功,同步刷新浏览器response.sendRedirect("AccountListServlet");}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}

UpdateServlet将接收到浏览器提交的修改的数据后,一并封装发送给业务逻辑层进行处理

IAccountService代码如下:
//修改账户信息int update(Map<String,String[]> map);
AccountServiceImp代码如下:
@Overridepublic int update(Map<String, String[]> map) {Map<String,Object> m=new HashMap<>();for (Map.Entry<String,String[]> e:map.entrySet()) {m.put(e.getKey(),e.getValue()[0]);}int i = DBUtil.dao.update(m);DBUtil.sqlSession.commit();return i;}

数据访问层中IAccountDao对应的执行的方法如下:

//修改账户信息@Update("update account set password=#{password},name=#{name}," +"personid=#{personid},balance=#{balance}," +"opendate=#{opendate} where id=#{id}")int update(Map<String,Object> map);

在修改成功之后,控制层将跳转调度至账户信息列表页面,显示修改后的数据信息。

7.完成删除账户信息功能

点击账户信息列表中的“删除”超链接,将要删除的账户信息的账号作为删除的条件发送给控制层DeleteServlet,控制层接收到数据后,将数据发送给业务逻辑层进行处理

package com.account.controller;import com.account.service.AccountServiceImp;
import com.account.service.IAccountService;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(urlPatterns = "/DeleteServlet")
public class DeleteServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("application/json");response.setCharacterEncoding("UTF-8");request.setCharacterEncoding("UTF-8");//获得浏览器通过点击删除,发送过来的账户账号String id = request.getParameter("id");//传给业务逻辑层,要求业务逻辑层完成删除功能IAccountService service=new AccountServiceImp();int i = service.delete(Integer.parseInt(id));if (i>0){//删除成功,刷新浏览器页面response.sendRedirect("AccountListServlet");}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}
 IAccountService代码如下:
//删除账户int delete(int id);
AccountServiceImp代码如下:
 @Overridepublic int delete(int id) {int i = DBUtil.dao.delete(id);DBUtil.sqlSession.commit();return i;}

数据访问层中IAccountDao对应的执行的方法如下:

//删除账户@Delete("delete from account where id=#{id}")int delete(@Param("id")int id);

在执行完成之后,控制层判断是否执行删除成功,删除成功后,账户信息列表页面应同步刷新。

总结

本篇文章使用Java注解的方式配置MyBatis框架作为持久层操作数据库连接,以MVC三层架构的方式搭建项目环境,配合Jsp+Servlet的方式完成了整个项目简单的增删改查的功能,对于初学者来说是一个非常适合的综合练习的案例,欢迎读者进行访问和学习,熟练掌握技术,把眼前的路铺平,远处的路才能走的更稳。

【MyBatis】第五课 银行账户管理系统网站开发相关推荐

  1. 项目名称:Bank Account Management System 银行账户管理系统 简称BAM

    有兴趣的高手可以发表一下代码   供我们初级者借鉴借鉴 项目名称:Bank Account Management System 银行账户管理系统 简称BAM 项目描述:这是一个银行账户管理系统,用户可 ...

  2. 设计一个银行账户管理系统

    **欢迎使用小辉辉建设银行** 银行账户 注册账号 登录 请选择你要执行的银行业务 银行账户管理系统,使用HashMap函数做出来要比较容易一些,而我没有用到哈哈,这个系统开始搞的时候,还没有学到ha ...

  3. 银行账户管理系统c语言链表,课程设计银行储蓄管理系统Word版

    <课程设计银行储蓄管理系统Word版>由会员分享,可在线阅读,更多相关<课程设计银行储蓄管理系统Word版(22页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文档 ...

  4. 课程设计-银行账户管理系统

    编程实现:(仔细业务之间的包含关系,并完成以下编程需求,要适当提高代码的可复用性.) 用户:账号(int:系统随机产生8位数字).姓名(str).密码(int:6位数字).地址.存款余额(int).开 ...

  5. 基于Java的银行账户管理系统

    一.项目介绍 基于Java GUI的银行账户信息管理系统,可直接启动演示.包含账户查询.开户.销户.存款.取款.账户统计等功能.适合作为课程设计.大作业.毕业设计项目. 二.技术介绍: Java;Sp ...

  6. 第五课 Python Web企业门户网站-常用的扩展功能

    目录 5.1 基本框架 5.2 信号触发器的使用 5.2.1 招聘信息发布 5.2.2 基于模型表单的应聘信息上传 5.2.3 信号触发器的使用 5.3 发送邮件 5.4 资料下载 5.4.1 创建资 ...

  7. 个人银行账户管理系统

    #include <bits/stdc++.h> #include <iostream> #include <cstring> #include <cstdl ...

  8. 银行账户管理系统(一)

    一个活期储蓄帐户包括账号(id),余额(balance),年利率(rate)等信息,还包括显示账户信息(show),存款(desposit),取款(withdraw),结算利息(settle)等操作. ...

  9. 【Java】银行账户管理系统

    系统实现: 开发语言是Java,开发平台是eclipse,通过文件储存数据,借助Java的GUI来实现交互.自己来写界面的话当然比较烦,于是我用的eclipse的插件WindowBuilder,通过可 ...

最新文章

  1. python和java和scala_有没有与python3相当的scala/java收藏。国家
  2. 网络爬虫(一):配置selenium、pycharm(windows平台)
  3. boost::connected_components用法的测试程序
  4. setjmp和longjmp
  5. 定时器控件timer winform 114869229
  6. 解决 unity 2d 中人物碰撞后抖动旋转问题
  7. How to increase sales, in addition to manufacturing different phones
  8. Winform分页控件支持表头全选操作实现之最优方法
  9. 【系统分析师之路】2012年上系统分析师下午论文真题
  10. 【BLE MIDI】MIDI 文件格式分析 ( MIDI 文件头解析 | MIDI 文件头标识 | MIDI 文件头长度 | MIDI 文件格式 | MIDI 轨道个数 | 基本时间 )
  11. 一个泛型句柄类--C++模板和泛型编程--c++ primer
  12. 阿里云移动推送 - 异常记录
  13. [na]win7系统安装在t450s
  14. Mac电脑C盘空间不足怎么办?
  15. 【Gamemaker】YYC1.4编译的程序研究
  16. 【算法讲20:Dsu on Tree】树上数颜色 | Lomsat gelral
  17. [健康]肾的保健按摩
  18. 数据结构中的有序和无序
  19. 博士申请 | 美国范德堡大学NDS实验室招收数据挖掘/机器学习全奖博士生
  20. Android project依赖project配置说明

热门文章

  1. PT100温度阻值对照表
  2. ISAR基本成像原理
  3. EMI/RFI (开关电源外壳带高压?)
  4. Web Worker,Service Worker,Web Worker
  5. C# Cookie操作类
  6. 变形监测基准点稳定性分析的必要性与方法?变形监测成果资料整理的内容和方法?3、变形分析与预测方法?
  7. 我的utool使用体验~
  8. 张小龙的优秀产品经理设计思路
  9. 嵌入式系统设计师学习笔记①:数的进制转换
  10. 狂潮微课小红书推广引流教程