java mysql分层_java学习(十三)采用MVC分层思想实现转账功能
本文只要使用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分层思想实现转账功能相关推荐
- 学习java的步骤_java学习的基本步骤
Java是一个通用的编程语言,其实可以干很多事,怎么学Java就看怎么用了.但有一些基本的步骤: 熟悉一种文本编辑器, 比如:Vim, Emacs, Notepad++, TextMate等.知道哪些 ...
- java创建树结构_Java学习之XML-017
如果想快速有效的学习,思想核心是"以建立知识体系为核心",具体方法是"守破离".反复练习直到熟练.----百战程序员 1.0 XML 1.1 XML 简介 XM ...
- java mysql 事物_java基础之MySQL事务和视图
第三节 事务和视图 3.1事务 事务是用来维护数据库完整性的,它能够保证一系列的MySQL操作要么全部执行,要么全不执行.举一个例子来进行说明,例如转账操作:A账户要转账给B账户,那么A账户上减少的钱 ...
- android xml java混合编程_Java学习中注解与多线程,网络编程与XML技术
本部分内容主要有集合框架及泛型,实用类,输入和输出处理,注解与多线程,网络编程与XML技术.初次学习这部分会感觉很难,主要是概念难于理解,最好是多看看例子,多练习.下面是个人的总结 拉勾IT课小编为大 ...
- java 知识积累_java学习知识积累-spring常用注解
java学习知识积累-spring常用注解 类的分层注解,由于我们后台开发都是分为三层进行开发的,所以Spring框架提供了三种对于不同层的注解方式: 控制层:@Controller 服务层:@Ser ...
- java课程体系_Java学习课程体系
最近一直在忙项目和课程,每每当这个时候就会发现自己一直在忙,而在此过程中没有什么积累和沉淀,所以最近总结了一下,对于Java开发过程中所需要用到的技术点,后面有时间的话,会一一进行相应的课程录制,希望 ...
- java分布式架构_Java学习五分钟系列:从单体架构转向分布式架构的难点
Java学习五分钟系列,目的是为让大家在短时间内搞清楚一项技术的概念.优缺点和适用场景,想要深入的了解,还需要投入更多的时间. 分布式架构和单体应用架构相比,可以充分利用多机器的性能优势,提高了系统的 ...
- java mysql工具_Java开源数据库管理工具
SQuirreL SQL Client SQuirreL SQL Client 是一个用 Java 编写的程序,它允许您查看数据库的内容.发出 SQL 命令,以及如您将看到的,执行许多其他功能.构建该 ...
- java session缓存_Java服务端采用Session的缓存oauth2.0授权用户信息
前面有讲到session和cookie的一些简单的区别和比较,我们继续为java在服务端如何对session的操作留下笔记,这里以用户的登陆和退出操作为实用场景,简单讲解session的建立.清空等操 ...
最新文章
- python分治算法_python算法实现-分治法
- AVL的LL,RR,LR,RL调整
- [SUCTF2018]babyre [ACTF新生赛2020]fungame
- report things that go wrong
- IT从业者(程序员等)之强身健体-武术
- 前端开发工程化探讨--基础篇(长文)
- django入门记录 2
- Algorithm I assignment Collinear
- two+few+arguments+php,PHP5.5 ~ PHP7.2 新特性整理
- 如何修改magento产品详细页面的栏目
- linux系统如何管理文件
- spring awre的理解
- controlleradvice 参数_Spring mvc中@ModelAttribute和@ControllerAdvice使用
- 计算机ip地址查询精确的位置,本机ip地址查询精确的位置 简单两步轻松搞定
- Windows 中剪贴板的操作
- xml建模包括以下_我们的服务|无人机倾斜摄影三维建模
- 时钟系统(NTP子母钟系统)如何为高铁系统保驾护航
- 浅记一下伽卡他卡被全屏控制时脱离控制
- 广告系统,业务与架构细节
- 能转PDF格式用的在线软件
热门文章
- 我和妹妹的“大富翁计划”
- php常用的数组相关的函数及面向对象
- Apple Watch耗电快?5个技巧让你的苹果手表超省电
- 面试精讲(guigu)
- 安装MeadCo ScriptX的ActiveX控件
- 8月8日科技快讯:库比蒂诺想修超级高铁,市长点名要苹果掏钱
- d3js 实现水球图
- php文件如何转音频,如何转换音频文件,mp3格式转换器,音频格式转换器,
- 市值超阿迪达斯,安踏四次“豪赌”的底层方法论
- Android应用启动之从Launcher拉起APP(二)