MyBatis第五课 银行账户管理系统网站开发
Posted 笔触狂放
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
@Override
public 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代码如下:
@Override
public 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代码如下:
@Override
public 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代码如下:
@Override
public 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第五课 银行账户管理系统网站开发的主要内容,如果未能解决你的问题,请参考以下文章
基于Spring MVC + Spring + MyBatis的银行账户信息管理系统