本文只要使用mvc分层思想完成转账操作。一旦转账之后,汇款人和收款人的金额发生变化。因此,过程中必须采用事务管理。

1.MVC思想

1.1 发展历程

1.1.1 servlet

缺点:生成html内容太麻烦

1.1.2 jsp

缺点:阅读起来不方便,维护比较困难

1.1.3 jsp+javabean

这种模式又称为jsp的model1,其中

jsp:接受请求,展示数据

javabean:处理数据

1.1.4 jsp+javabean+servlet

该种模式又称为jsp的model2

jsp:展示数据

javabean:处理数据

servlet:接受请求,处理业务逻辑

该种模式就是mvc思想的体现。

1.2 MVC思想

MVC思想就是将业务逻辑、代码和显示相分离的一种思想。其中

M:model 作用:主要是封装数据,封装对数据的访问

V:view 作用:主要是用来展示数据,一般是jsp担任

C:control作用:接受请求,找到相应的javabean完成业务逻辑

2. 反射

完整的一个反射需要如下几个步骤

2.1 获取class对象

方式一

Class clazz = Class.forName("全限定名")

方式二

Class clazz = 类名.class;

方式三

Class clazz = 对象.getClass;

通过反射的方式,可以获取类的所有构造方法。

2.2 获取对应类的构造方法

格式为

Constructor con = clazz.getConstructor(class .. paramClass);

Person p = (Person) con.newInstance(参数);

实例如下,创建一个person对象

另外再创建一个demo对象,该对象中直接利用反射原理获取person对象的方法

public class Demo {

@Test

public void f1() throws Exception {

//获取class对象

Class clazz = Class.forName("com.itcast.domain.Person");

//获取构造器

Constructor con = clazz.getConstructor();

Person p = (Person) con.newInstance();

//获取有参构造器

Constructor con2 = clazz.getConstructor(String.class,String.class);

Person p2 = (Person) con2.newInstance("tom","123");

System.out.println(p.getPassword());

}

}

2.3 可通过clazz创建一个对象

格式为

clazz.newInstance();

该段代码相当于调用的无参构造器

2.4 可以通过clazz获取所有的字段

clazz.getField();

2.5 可以通过clazz获取所有的方法

格式为

1.只可以用来获取公共方法

Method m1 = clazz.getMethod("eat");

2.可用来获取私有以及公共方法

Method m2 = clazz.getDeclaredMethod("sleep");

若是存在私有方法,必须让该方法可以访问

m2.setAccessible(true);

因此,当person中具有私有方法sleep时,且方法执行无须返回参数时,demo对象需要产生如下变化:

@Test

public void f3() throws Exception {

//获取class对象

Class clazz = Class.forName("com.itcast.domain.Person");

Person p = (Person) clazz.newInstance();

//2.获取方法

//2.1只可以用来获取公共方法

Method m1 = clazz.getMethod("eat");

//2.2可用来获取私有以及公共方法

Method m2 = clazz.getDeclaredMethod("sleep");

//2.3 若是私有方法,必须将其设置为可访问

m2.setAccessible(true);

//执行方法

m1.invoke(p);

m2.invoke(p);

}

2.6 执行方法返回参数

Method对象的invoke是有返回值的,返回值为目标方法执行的返回值。

@Test

public void f4() throws Exception {

//获取class对象

Class clazz = Class .forName("com.itcast.domain.Person");

Person p = (Person) clazz.newInstance();

//获取方法

Method m = clazz.getDeclaredMethod("sleep", String.class);

//设置方法可以进行访问

m.setAccessible(true);

//执行方法

String result = (String) m.invoke(p, "tom");

System.out.println(result);

}

3. javabean在model2中使用

BeanUtils可以看成封装数据的一个工具类,其使用步骤为:

1.带入响应的jar包;

2.使用BeanUtils.populate(Object bean,Map map),将map集合转换为bean对象。

4.javaee的三层架构

4.1 web层

web层作用

jsp作用:展示数据

servlet作用:

接受请求;

找到相应的bean对象(service),调用方法,完成逻辑操作;

信息生成或者页面跳转。

4.2 service

业务层作用:完成业务操作,调用dao

4.3 dao

dao(Data access object),数据访问对象,实现对数据库的增删查改操作。

下图为银行转账过程中三个分层之间关系图:

5.事务

5.1 mysql中的事务

mysql中事务默认是自动提交,一条sql语句就是一个事务。一旦项目中要求开启手动事务方式,需要如下两种方式

方式一:关闭自动事务;

set autocommit=off/1;

方式二:手动开启一个事务;

开启一个事务:

start transaction;

事务提交:

commit;

事务回滚(全部回到事务之前的操作):

rollback;

但是在oracle数据库中,事务默认是手动的,必须手动提交才可以。

5.2 java中的事务

java中的事务主要依靠connection接口的api实现:

setAutoCommit(false):手动开启事务;

commit();事务提交

rollback():事务回滚

设置回滚位置

SavePoint setSavepoint():设置还原点

void roolback(Savepoint savepoint):还原到设置好的还原点位置

5.3 事务的特性

事务的特性主要包含如下四个,简称ACID。

1.原子性:食物里面的操作单元不可分割,要么全部成功,要么全部失败;

2.一致性:事务执行前后,业务状态和其他业务状态保持一致,比如说转账前后,两人的财产总和保持不变。

3.隔离性:一旦事务执行的时候最好不要受到其他事务的影响;

4.持久性:一旦事务提交或者回滚,这个状态都要持久化到数据库中。

5.4 不考虑隔离性出现的读问题

如果不考虑隔离性会出现以下三种读问题,分别为:

1.脏读:在一个事务中读取到另一个事务没有提交的数据;

2.不可重复读:在一个事务中,两次查询的结果不一致(针对的是update操作);

3.虚读(幻读):在一个事务中,两次查询的结果不一致(针对的是insert操作);

5.5 隔离级别

为了解决读问题,可以通过设置数据库的隔离级别。

1.read uncommited:读未提交,上面的三个读问题都会出现;

2.read commited:读已提交,可以避免脏读的发生;

3.repeatable read:可重复读,可以避免脏读和不可重复读的发生;

4.serializable:串行化,可以避免所有的问题。

6.步骤分析

1.数据库和表;

2.新建一个项目;

3.导入jar包和工具类,包括

驱动 jdbcUtils

c3p0及其配置文件和工具类

dbutils

4.新建一个account.jsp,采用表单形式将内容显示;

5.创建accountServlet文件,实现:

1)接受三个参数;

2)调用accountService.account方法完成转账操作;

3)打印消息;

6.创建accountService,生成account方法,实现:

1)使用jdbc不考虑事务;

2)调用dao完成转出操作;

3)调用dao完成转入操作;

7.dao层完成对数据库的操作

7.案例实现

7.1 数据库和表

create datebase day13;

use day13;

create table account(

name varchar(20),

money int

);

insert into account values('aa','1000');

insert into account values('bb','1000');

7.2 新建项目进行配置

导入jar包

c3p0-0.9.2.1.jar

commons-dbutils-1.7.jar

jstl-1.2.jar

mysql-connector-java-5.1.46-bin.jar

standard-1.1.2.jar

创建包以及各种文件

web.servlet包:

AccountServlet文件

service包:

AccountService文件

dao包:

AccountDao文件

utils包:

DataSourceUtils文件

JdbcUtils文件

配置文件

c3p0-config.xml文件

jdbc.properties文件

7.3 创建account.jsp

转出方
转入方
转账金额

java mysql分层_java学习(十三)采用MVC分层思想实现转账功能相关推荐

  1. 学习java的步骤_java学习的基本步骤

    Java是一个通用的编程语言,其实可以干很多事,怎么学Java就看怎么用了.但有一些基本的步骤: 熟悉一种文本编辑器, 比如:Vim, Emacs, Notepad++, TextMate等.知道哪些 ...

  2. java创建树结构_Java学习之XML-017

    如果想快速有效的学习,思想核心是"以建立知识体系为核心",具体方法是"守破离".反复练习直到熟练.----百战程序员 1.0 XML 1.1 XML 简介 XM ...

  3. java mysql 事物_java基础之MySQL事务和视图

    第三节 事务和视图 3.1事务 事务是用来维护数据库完整性的,它能够保证一系列的MySQL操作要么全部执行,要么全不执行.举一个例子来进行说明,例如转账操作:A账户要转账给B账户,那么A账户上减少的钱 ...

  4. android xml java混合编程_Java学习中注解与多线程,网络编程与XML技术

    本部分内容主要有集合框架及泛型,实用类,输入和输出处理,注解与多线程,网络编程与XML技术.初次学习这部分会感觉很难,主要是概念难于理解,最好是多看看例子,多练习.下面是个人的总结 拉勾IT课小编为大 ...

  5. java 知识积累_java学习知识积累-spring常用注解

    java学习知识积累-spring常用注解 类的分层注解,由于我们后台开发都是分为三层进行开发的,所以Spring框架提供了三种对于不同层的注解方式: 控制层:@Controller 服务层:@Ser ...

  6. java课程体系_Java学习课程体系

    最近一直在忙项目和课程,每每当这个时候就会发现自己一直在忙,而在此过程中没有什么积累和沉淀,所以最近总结了一下,对于Java开发过程中所需要用到的技术点,后面有时间的话,会一一进行相应的课程录制,希望 ...

  7. java分布式架构_Java学习五分钟系列:从单体架构转向分布式架构的难点

    Java学习五分钟系列,目的是为让大家在短时间内搞清楚一项技术的概念.优缺点和适用场景,想要深入的了解,还需要投入更多的时间. 分布式架构和单体应用架构相比,可以充分利用多机器的性能优势,提高了系统的 ...

  8. java mysql工具_Java开源数据库管理工具

    SQuirreL SQL Client SQuirreL SQL Client 是一个用 Java 编写的程序,它允许您查看数据库的内容.发出 SQL 命令,以及如您将看到的,执行许多其他功能.构建该 ...

  9. java session缓存_Java服务端采用Session的缓存oauth2.0授权用户信息

    前面有讲到session和cookie的一些简单的区别和比较,我们继续为java在服务端如何对session的操作留下笔记,这里以用户的登陆和退出操作为实用场景,简单讲解session的建立.清空等操 ...

最新文章

  1. python分治算法_python算法实现-分治法
  2. AVL的LL,RR,LR,RL调整
  3. [SUCTF2018]babyre [ACTF新生赛2020]fungame
  4. report things that go wrong
  5. IT从业者(程序员等)之强身健体-武术
  6. 前端开发工程化探讨--基础篇(长文)
  7. django入门记录 2
  8. Algorithm I assignment Collinear
  9. two+few+arguments+php,PHP5.5 ~ PHP7.2 新特性整理
  10. 如何修改magento产品详细页面的栏目
  11. linux系统如何管理文件
  12. spring awre的理解
  13. controlleradvice 参数_Spring mvc中@ModelAttribute和@ControllerAdvice使用
  14. 计算机ip地址查询精确的位置,本机ip地址查询精确的位置 简单两步轻松搞定
  15. Windows 中剪贴板的操作
  16. xml建模包括以下_我们的服务|无人机倾斜摄影三维建模
  17. 时钟系统(NTP子母钟系统)如何为高铁系统保驾护航
  18. 浅记一下伽卡他卡被全屏控制时脱离控制
  19. 广告系统,业务与架构细节
  20. 能转PDF格式用的在线软件

热门文章

  1. 我和妹妹的“大富翁计划”
  2. php常用的数组相关的函数及面向对象
  3. Apple Watch耗电快?5个技巧让你的苹果手表超省电
  4. 面试精讲(guigu)
  5. 安装MeadCo ScriptX的ActiveX控件
  6. 8月8日科技快讯:库比蒂诺想修超级高铁,市长点名要苹果掏钱
  7. d3js 实现水球图
  8. php文件如何转音频,如何转换音频文件,mp3格式转换器,音频格式转换器,
  9. 市值超阿迪达斯,安踏四次“豪赌”的底层方法论
  10. Android应用启动之从Launcher拉起APP(二)