实体类:

package com.bjsxt.pojo;

import java.io.Serializable;

public class Account implements Serializable {

    private  int id;
private String cno;
private String pwd;
private int money; public Account(int id, String cno, String pwd, int money) {
this.id = id;
this.cno = cno;
this.pwd = pwd;
this.money = money;
} public Account(){}; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getCno() {
return cno;
} public void setCno(String cno) {
this.cno = cno;
} public String getPwd() {
return pwd;
} public void setPwd(String pwd) {
this.pwd = pwd;
} public int getMoney() {
return money;
} public void setMoney(int money) {
this.money = money;
} @Override
public String toString() {
return "Account{" +
"id=" + id +
", cno='" + cno + '\'' +
", pwd='" + pwd + '\'' +
", money=" + money +
'}';
} }

Mapper层:

接口:

package com.bjsxt.mapper;

import com.bjsxt.pojo.Account;
import org.apache.ibatis.annotations.Param; public interface AccountMapper {
Account selaccount(@Param("cno") String cno,@Param("pwd") String pwd,@Param("money") int money); int updateaccount(@Param("cno") String cno,@Param("money") int money); int updateaccount2(@Param("cno2") String cno2,@Param("money") int money);
}

Mapper.xml:(在判断前台数据时用ajax判断数据 我们需要用动态查询)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bjsxt.mapper.AccountMapper">
<select id="selaccount" resultType="Account" parameterType="Account">
select * from account
<where>
<if test="cno!=null and cno!=''">
cno=#{cno}
</if> <if test="pwd!=null and pwd!=''">
and pwd=#{pwd}
</if> <if test="money>0">
and money>=#{money}
</if>
</where>
</select> <update id="updateaccount" parameterType="Account">
update account set money=money-#{money} where cno=#{cno}
</update> <update id="updateaccount2" parameterType="Account">
update account set money=money+#{money} where cno=#{cno2}
</update>
</mapper>

Service接口:

package com.bjsxt.service;

import com.bjsxt.pojo.Account;

public interface AccountService {
public Account findaccout( String cno, String pwd, int money); int updateaccount(String cno, String cno2, int money); }

Service实现类

package com.bjsxt.service.impl;

import com.bjsxt.mapper.AccountMapper;
import com.bjsxt.pojo.Account;
import com.bjsxt.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; @Service("asi")
public class AccountServiceImpl implements AccountService { @Autowired
AccountMapper accountMapper; @Override
public Account findaccout(String cno, String pwd, int money) {
Account selaccount = accountMapper.selaccount(cno, pwd, money);
return selaccount;
} @Override
public int updateaccount(String cno, String cno2, int money) {
int updateaccount = accountMapper.updateaccount(cno, money);
int i = accountMapper.updateaccount2(cno2, money);
return updateaccount&i;
} }

Spring核心配置文件applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"> <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
<!--连接数据库-->
<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${driver1}"/>
<property name="url" value="${url1}"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean> <!--获得sqlsession-->
<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="ds"/>
<property name="typeAliasesPackage" value="com.bjsxt.pojo"/>
</bean> <!--扫描mapper文件-->
<bean id="mapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="factory"/>
<property name="basePackage" value="com.bjsxt.mapper"/>
</bean> <!--扫描业务层注解-->
<context:component-scan base-package="com.bjsxt.service.impl"></context:component-scan> </beans>

前台(用ajax发送请求数据,及数据流转)

<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2019/9/11
Time: 17:01
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>银行转账界面</title>
<script type="text/javascript" src="js/jquery-1.12.3.min.js"></script>
<script type="text/javascript">
$(function () {
$("#pwd").blur(function () {
//获得请求参数
var cno = $("#cno").val();
var pwd = $("#pwd").val(); //发起ajax请求
$.post("AccountServlet?method=CheckAccount","cno="+cno+"&pwd="+pwd,function (data1) {
if (data1){
$("#pwd_span").html("√ 汇款人信息正确").css("color","green");
}else {
$("#pwd_span").html("× 汇款人信息有误!!!").css("color","red");
}
},"json")
}) $("#money").blur(function () {
//获得请求参数
var cno = $("#cno").val();
var pwd = $("#pwd").val();
var money = $("#money").val();
//发起ajax请求
$.post("AccountServlet?method=CheckAccount","cno="+cno+"&pwd="+pwd+"&money="+money,function (data2) {
if (data2){
$("#money_span").html("√ 金额足够").css("color","green");
}else {
$("#money_span").html("× 金额不足!!!").css("color","red");
}
},"json")
}) $("#cno2").blur(function () {
var cno = $("#cno").val();
var cno2=$("#cno2").val();
if(cno==cno2){
alert("汇款人和收款人不能是同一个人!!!");
}else {
//发送ajax请求
$.post("AccountServlet?method=CheckAccount","cno="+cno2,function (data3) {
if (data3){
$("#cno2_span").html("√ 汇款人信息正确").css("color","green");
}else {
$("#cno2_span").html("× 汇款人信息有误!!!").css("color","red");
}
},"json")
}
}) }) </script>
</head>
<body>
<div>
<form action="AccountServlet?method=inOutMoney" method="post">
<p>
转账账号:<input type="text" name="cno" id="cno"/>
</p> <p>
转账密码:<input type="password" name="pwd" id="pwd"/>
<span id="pwd_span"></span>
</p> <p>
转账金额:<input type="text" name="money" id="money"/>
<span id="money_span"></span>
</p> <p>
收款账号:<input type="text" name="cno2" id="cno2"/>
<span id="cno2_span"></span>
</p> <p>
<input type="submit" value="转账"/>
</p>
</form>
</div>
</body>
</html>

实现结果:

Sring+mybatis模拟银行转账的更多相关文章

  1. MySQL_(Java)【连接池】使用DBCP简单模拟银行转账事物

    dbcp下载 传送门 Commons Pool下载 传送门 Commons log下载 传送门 MySQL_(Java)[事物操作]使用JDBC模拟银行转账向数据库发起修改请求 传送门 MySQL_( ...

  2. Spring中 使用注解+c3p0+事物 《模拟银行转账》

    使用注解的方式  模拟转账 要么都成功 要么都失败 !保持一致性! 准备工作: jar包:  需要的类:       UserDao: package com.hxzy.spring.c3p0.Dao ...

  3. MySQL_(Java)【事物操作】使用JDBC模拟银行转账向数据库发起修改请求

    MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC向数据库中插入(insert)数据 传送门 MySQL_(Java)使用JDBC向数据库中删除(d ...

  4. 【Spring】Spring的事务管理 - 2、声明式事务管理(实现基于XML、Annotation的方式。)

    声明式事务管理 文章目录 声明式事务管理 基于XML方式的声明式事务 基于Annotation方式的声明式事务 简单记录 - 简单记录-Java EE企业级应用开发教程(Spring+Spring M ...

  5. Spring企业级程序设计 • 【第4章 Spring持久化层和事务管理】

    全部章节   >>>> 本章目录 4.1 配置数据源资源 4.1.1 JdbcTemplate介绍 4.1.2通过ComboPooledDataSource创建数据源 4.1. ...

  6. Code First开发系列之管理并发和事务

    返回<8天掌握EF的Code First开发>总目录 本篇目录 理解并发 理解积极并发 理解消极并发 使用EF实现积极并发 EF的默认并发 设计处理字段级别的并发应用 实现RowVersi ...

  7. UnitOfWork以及其在ABP中的应用

    Unit Of Work(UoW)模式在企业应用架构中被广泛使用,它能够将Domain Model中对象状态的变化收集起来,并在适当的时候在同一数据库连接和事务处理上下文中一次性将对象的变更提交到数据 ...

  8. Code First开发系列之管理并发和事务(转)

    转自:http://www.cnblogs.com/farb/p/ConcurrencyAndTransctionManagement.html 返回<8天掌握EF的Code First开发&g ...

  9. Oracle基础 事务

    一.事务 事务就是业务上的一个逻辑单元,它能够保证其中对数据所有的操作,要么全部成功,要么全部失败. 二.事务的特性: 1.原子性:事务是SQL中的最小执行单位,不能再进行分割.要么全部执行,要么全部 ...

随机推荐

  1. vue cli3.0^版本处理文件下载的问题

    downloadFile(url, fileName) { axios.get(url, { responseType: 'blob' }) .then(({ data }) => { // 为 ...

  2. MySQL原生PHP操作-天龙八步

    <?php //1.第一步[建立连接] $conn = mysqli_connect('localhost','root','123456') or die('数据库连接失败!'); //2.第 ...

  3. go-micro+php+consul简单的微服实现

    首先我们用go-micro构建一个服务.(关于go-micro的使用可以参照官方实例或者文档) //新建一个微服务 micro new --type "srv" user-srv ...

  4. codeblocks 调试

    codeblocks 调试工具使用的注意事项: 1.codebloccks 调试,必须要在一个项目下才可以,也就是说“单独的文件是不能运行debug工具的” 2.项目的目录文件名必须是全英文,同时文件 ...

  5. nyoj 733-万圣节派对 (printf("%06d", i))

    733-万圣节派对 内存限制:64MB 时间限制:1000ms 特判: No 通过数:5 提交数:7 难度:1 题目描述: 万圣节有一个Party,XadillaX显然也要去凑热闹了.因为去凑热闹的人 ...

  6. 网络权重初始化方法总结(下):Lecun、Xavier与He Kaiming

    目录 权重初始化最佳实践 期望与方差的相关性质 全连接层方差分析 tanh下的初始化方法 Lecun 1998 Xavier 2010 ReLU/PReLU下的初始化方法 He 2015 for Re ...

  7. Linux入门之简介

    1.啥是linux? Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU的操作系统. 它能运行主要的Unix工具软件.应用程序 ...

  8. 力扣(LeetCode)求众数 个人题解

    给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: [3,2,3] 输出: 3 ...

  9. .NET资源泄露与处理方案

    .NET虽然拥有强大易用的垃圾回收机制,但并不是因为这样,你就可以对资源管理放任不管,其实在稍不注意的时候,可能就造成了资源泄露,甚至因此导致系统崩溃,到那时再来排查问题就已经是困难重重. 一.知识点 ...

  10. python:利用celery分布任务

    Celery是一个功能完备即插即用的任务队列.它使得我们不需要考虑复杂的问题,使用非常简单.celery看起来似乎很庞大.celery适用异步处理问题,当发送邮件.或者文件上传, 图像处理等等一些比较 ...