实体类:

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. 使用requests实现人人网登录,并做cookie维持

    import requests import re,time s = requests.Session() def doLogin(): login_url = 'http://www.renren. ...

  2. day8-函数

    ---def test(x): # def:定义函数的关键字,test:函数名, x相当于以前函数中的自变量使用函数的好处:1.代码重用2.保持一致性,易于维护3.可扩展性 def test(x): ...

  3. day7-format字符串格式化

    tpl = "i am {name}, age {age}, really {name}".format(name="seven", age=18) print ...

  4. WebSocket插件

    ;!(function(window){ "use strict"; let Event = { wsMesEvent:function(message){ console.log ...

  5. nyoj 822-画图 (*)

    822-画图 内存限制:64MB 时间限制:1000ms 特判: No 通过数:133 提交数:187 难度:0 题目描述: 计算机画图也挺有趣的哈!那我们就来用计算机画幅图吧... 输入描述: 输入 ...

  6. python:0

    if __name__ == '__main__': r = Rectangle() 79 def __str__(self): 80 return "address:(%d, %d)&qu ...

  7. vim查询替换

    查询: 在民令模式输入/或者? n/N 替换:

  8. 【algo&ds】7.最短路径问题

    单源最短路径问题:从某固定源点出发,求其到所有其他顶点的最短路径 (有向)无权图:BFS (有向)有权图:Dijkstra算法 多源最短路径问题:求任意两顶点间的最短路径 直接将单源最短路算法调用|V ...

  9. MyEclipse使用总结

    0.快捷键 ================================================================================ 编辑: Ctrl+Shif ...

  10. Docker (一) 安装 Oracle18c

    通过Docker 安装 Oracle18c 1.拉取 oracle18c 镜像 docker pull registry.cn-hangzhou.aliyuncs.com/zhengqing/orac ...