【MyBatis】第五课 银行账户管理系统网站开发
概念
本文是根据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> <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> <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】第五课 银行账户管理系统网站开发相关推荐
- 项目名称:Bank Account Management System 银行账户管理系统 简称BAM
有兴趣的高手可以发表一下代码 供我们初级者借鉴借鉴 项目名称:Bank Account Management System 银行账户管理系统 简称BAM 项目描述:这是一个银行账户管理系统,用户可 ...
- 设计一个银行账户管理系统
**欢迎使用小辉辉建设银行** 银行账户 注册账号 登录 请选择你要执行的银行业务 银行账户管理系统,使用HashMap函数做出来要比较容易一些,而我没有用到哈哈,这个系统开始搞的时候,还没有学到ha ...
- 银行账户管理系统c语言链表,课程设计银行储蓄管理系统Word版
<课程设计银行储蓄管理系统Word版>由会员分享,可在线阅读,更多相关<课程设计银行储蓄管理系统Word版(22页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文档 ...
- 课程设计-银行账户管理系统
编程实现:(仔细业务之间的包含关系,并完成以下编程需求,要适当提高代码的可复用性.) 用户:账号(int:系统随机产生8位数字).姓名(str).密码(int:6位数字).地址.存款余额(int).开 ...
- 基于Java的银行账户管理系统
一.项目介绍 基于Java GUI的银行账户信息管理系统,可直接启动演示.包含账户查询.开户.销户.存款.取款.账户统计等功能.适合作为课程设计.大作业.毕业设计项目. 二.技术介绍: Java;Sp ...
- 第五课 Python Web企业门户网站-常用的扩展功能
目录 5.1 基本框架 5.2 信号触发器的使用 5.2.1 招聘信息发布 5.2.2 基于模型表单的应聘信息上传 5.2.3 信号触发器的使用 5.3 发送邮件 5.4 资料下载 5.4.1 创建资 ...
- 个人银行账户管理系统
#include <bits/stdc++.h> #include <iostream> #include <cstring> #include <cstdl ...
- 银行账户管理系统(一)
一个活期储蓄帐户包括账号(id),余额(balance),年利率(rate)等信息,还包括显示账户信息(show),存款(desposit),取款(withdraw),结算利息(settle)等操作. ...
- 【Java】银行账户管理系统
系统实现: 开发语言是Java,开发平台是eclipse,通过文件储存数据,借助Java的GUI来实现交互.自己来写界面的话当然比较烦,于是我用的eclipse的插件WindowBuilder,通过可 ...
最新文章
- python和java和scala_有没有与python3相当的scala/java收藏。国家
- 网络爬虫(一):配置selenium、pycharm(windows平台)
- boost::connected_components用法的测试程序
- setjmp和longjmp
- 定时器控件timer winform 114869229
- 解决 unity 2d 中人物碰撞后抖动旋转问题
- How to increase sales, in addition to manufacturing different phones
- Winform分页控件支持表头全选操作实现之最优方法
- 【系统分析师之路】2012年上系统分析师下午论文真题
- 【BLE MIDI】MIDI 文件格式分析 ( MIDI 文件头解析 | MIDI 文件头标识 | MIDI 文件头长度 | MIDI 文件格式 | MIDI 轨道个数 | 基本时间 )
- 一个泛型句柄类--C++模板和泛型编程--c++ primer
- 阿里云移动推送 - 异常记录
- [na]win7系统安装在t450s
- Mac电脑C盘空间不足怎么办?
- 【Gamemaker】YYC1.4编译的程序研究
- 【算法讲20:Dsu on Tree】树上数颜色 | Lomsat gelral
- [健康]肾的保健按摩
- 数据结构中的有序和无序
- 博士申请 | 美国范德堡大学NDS实验室招收数据挖掘/机器学习全奖博士生
- Android project依赖project配置说明