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

概念

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

1.数据库的创建

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

【MyBatis】第五课 银行账户管理系统网站开发_第1张图片

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

【MyBatis】第五课 银行账户管理系统网站开发_第2张图片

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

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

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

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

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

【MyBatis】第五课 银行账户管理系统网站开发_第3张图片

 【MyBatis】第五课 银行账户管理系统网站开发_第4张图片

3.完成首页jsp文件

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

【MyBatis】第五课 银行账户管理系统网站开发_第5张图片

index.jsp代码如下


<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    首页
  
  
  <%--快捷键tab,代码自动补全--%>
  

银行账户管理系统

开户  查询

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

本篇文章的介绍。

4.新增账户信息

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

【MyBatis】第五课 银行账户管理系统网站开发_第6张图片

【MyBatis】第五课 银行账户管理系统网站开发_第7张图片

【MyBatis】第五课 银行账户管理系统网站开发_第8张图片

【MyBatis】第五课 银行账户管理系统网站开发_第9张图片

【MyBatis】第五课 银行账户管理系统网站开发_第10张图片

即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 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 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 map) {
        Map m=new HashMap<>();
        for (Map.Entry 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 map);


}

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

【MyBatis】第五课 银行账户管理系统网站开发_第11张图片

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

【MyBatis】第五课 银行账户管理系统网站开发_第12张图片

【MyBatis】第五课 银行账户管理系统网站开发_第13张图片

【MyBatis】第五课 银行账户管理系统网站开发_第14张图片

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

5.查询账户信息功能

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

【MyBatis】第五课 银行账户管理系统网站开发_第15张图片

 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> 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> getAccounts();

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

 @Override
    public List> getAccounts() {
        return DBUtil.dao.getAccounts();
    }

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

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

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

<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    账户信息列表


<%--获得所有账户信息--%>
<% List> accounts=(List>)session.getAttribute("accounts");%>
<% for (int i = 0; i <%}%>
账号 密码 姓名 身份证号 余额 开户日期 操作
<%=accounts.get(i).get("id")%> <%=accounts.get(i).get("password")%> <%=accounts.get(i).get("name")%> <%=accounts.get(i).get("personid")%> <%=accounts.get(i).get("balance").toString()%> <%=accounts.get(i).get("opendate")%> 修改 ">删除

显示效果如下:

【MyBatis】第五课 银行账户管理系统网站开发_第16张图片

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

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

updateAccount.jsp代码如下:
<%@ page import="java.util.Map" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    更新账户


<%--获得要修改的账户信息对应的下标--%>
<% int index=Integer.parseInt(request.getParameter("index"));%>
<%--从session中获得所有账户信息--%>
<% List> accounts=(List>)session.getAttribute("accounts");%>
    

修改账户

账号 ">
密码 ">
姓名 ">
身份证号 ">
余额 ">
开户日期 ">

效果图如下:

【MyBatis】第五课 银行账户管理系统网站开发_第17张图片

 当用户修改信息后,将修改后的数据进行提交给控制层的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 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 map);
AccountServiceImp代码如下:
@Override
    public int update(Map map) {
        Map m=new HashMap<>();
        for (Map.Entry 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 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的方式完成了整个项目简单的增删改查的功能,对于初学者来说是一个非常适合的综合练习的案例,欢迎读者进行访问和学习,熟练掌握技术,把眼前的路铺平,远处的路才能走的更稳。

你可能感兴趣的:(SSM框架技术,java,Mybatis,MVC,项目)