小白新手web开发简单总结(十八)-阶段总结

目录

一 数据库访问层(DAO)

1.读写数据库

2.DataSource

二 业务逻辑层

1.业务逻辑类

2.Transaction

三 Web层

四 JTA

 五 总结


翻看这段时间的笔记,发现已经有17篇笔记了。

小白新手web开发简单总结(一)-什么是Tomcat

小白新手web开发简单总结(二)-什么是web.xml

小白新手web开发简单总结(三)-一个简单的Web开发项目

小白新手web开发简单总结(四)-web应用开发中的MVC

小白新手web开发简单总结(五)-JSP页面的四元素

小白新手web开发简单总结(六)-Spring的IoC容器

小白新手web开发简单总结(七)-数据库HSQLDB

小白新手web开发简单总结(八)-数据库HSQLDB实例

小白新手web开发简单总结(九)-ContextLoaderListener

小白新手web开发简单总结(十)-数据库HSQLDB实例问题总结

小白新手web开发简单总结(十一)-数据库连接的相关优化(数据源DataSource)

小白新手web开发简单总结(十二)-数据库连接的相关优化(事务管理)

小白新手web开发简单总结(十三)-数据库连接的相关优化( Hibernate的使用)

小白新手web开发简单总结(十四)-MySQL的安装与简单使用

小白新手web开发简单总结(十五)-数据库连接的相关优化( MyBatis的使用)

小白新手web开发简单总结(十六)-Web层优化(DispatcherServlet源码分析)

小白新手web开发简单总结(十七)-DispatcherServlet中的url-pattern的一点反思

这些笔记让自己对web开发有了一个初步的认识。简单的将这个流程进行总结了一下。

 

这个图最好是从后往前看,本来是保存了一个视频,但是发现不能上传视频文件,那就简单的通过这个示意图来说明下这段时间的一个积累。

一 数据库访问层(DAO)

1.读写数据库

  • 1.数据库是用来存储业务数据,一般都是各大数据库厂商提供,像Oracle、MySQL等。同时数据库厂商还会提供访问该数据库的驱动类,开发者通过该驱动类来访问数据库;
  • 2.一般数据库都是需要部署到服务器,那么就需要通过url(不同的数据库有不同的url规范)、用户名和密码来访问数据库。

  • 3.Java层在访问数据库有两种方式:一种JDBC,一种就是JTA;
  • 4.常用的JDBC访问数据库的方式有像Spring自带的JdbcTemplate,MyBatis框架、Hibernate框架等;
  • 5.JdbcTemplate是对Connection读写数据库整个过程的封装,包括对Connection的创建、资源管理和释放等等过程,开发者只需调用对应的query()等方法就可以完成相应的读写数据库操作;
  • 6.JdbcTemplate需要开发者自行将查询的数据转换成Java对象,配合RowMapper就是一个最原始的ORM。

  •  7.为了解决JdbcTemplate自行封装Java对象的过程,然后就有了一些ORM框架:一种是Hibernate为全自动的ORM框架,一种是MyBatis半自动的ORM框架;
  • 8.Hibernate是一个自动的ORM框架,可以自动将数据库的表映射成Java对象。通过Session来读写数据库,SessionFactory负责生产Session,而LocalSessionFactoryBean就是注册在Spring框架中的用来产生一个SessionFactory的Bean;
  • 9.Hibernate可执行SQL语句或者符合HQL语句;
  • 10.HibernateTemplate类似于JdbcTemplate,是对Session读写数据的整个过程的封装,包括从配置在Spring的SessionFactory的Bean中获取Session,以及Session读写过程以及资源管理和释放等过程,开发者只需要调用对应的load()等方法就可以完成相应的读写数据库操作和ORM。

  • 11. MyBatis是一个半自动的ORM框架。通过SqlSession来读写数据库,SqlSessionFactory负责生产SqlSession,而SqlSessionFactoryBean就是注册在Spring中用来产生一个SqlSessionFactory的Bean;
  • 12.在MyBatis有两种封装读写数据库操作过程的方式:一种就是SqlSessionManager、SqlSessionTemplate、SqlSessionDaoSupport为代表的方式;另一种就是MapperFactoryBean、MapperScannerConfigurer为代表的方式;
  • 13.像SqlSessionManager等这种方式,其实就是通过配置的SqlSessionFactory的Bean来完成读写数据库的过程。通过动态代理从SqlSessionFactory中获取SqlSession,并且增加该次操作的事务管理,完成读写数据库;需要按照Mapper接口的规范来手写操作数据库的语句。
  • 14.而MapperFactoryBean等这种方式,就是通过动态代理将Mapper接口自行转换成对应的操作数据库的语句,开发者只需调用对应的select()等语句完成对应的数据库操作和ORM。

 通过上面的过程已经完成了一个读写数据库的操作。


2.DataSource

如果单纯的通过上面的方式来创建读写数据的操作,会造成很大的系统开销。所以就有了一个DataSource(数据库连接池)的概念。这样就不用每次频繁的建立和断开数据库,每次只需要从数据库连接池中取,用完了放回去即可。(等同于线程池的概念)

  • 15. 常用的DataSource有DriverManagerDataSource、BasicDataSource、ComboPoolDataSource、DuridDataSource;除去DriverManagerDataSource每次只能产生一个数据库连接池,其他的都是可以设置连接池的数量;
  • 16.不管是Spring自带的JdbcTemplate还是Hibernate的HibernateTemplate或者MyBatis框架中的相关类都需要将DataSource实例配置到相应的Bean中。然后从DataSource中获取相应的数据库连接。

通过DataSource优化了数据库连接,节省系统的开销。 

在Spring中注册各框架的数据库操作类和DataSource,那么就实现了数据访问层(DAO)的对数据库操作的逻辑。


二 业务逻辑层

1.业务逻辑类

  • 17.业务逻辑类就是根据项目模块功能进行划分的一些类,一般都是将模块相关的内容放到一起。在这些类中都是调用在Spring中注册的JdbcTemplate的Bean、HibernateTemplate的Bean或者是MyBatis的如MapperFactoryBean的Bean,来实现对应的业务功能。如购物车的类,里面可能含有一些返回购物车商品列表的方法、返回修改购物车商品的方法等等,而这些方法中又会包括一些业务场景,例如在返回购物车商品列表的方法中,还有可能会包括一些查询商品促销的操作等。

2.Transaction

  • 18.事务管理就是将一系列的操作要么一起执行成功,要么其中有一个执行失败之后,就完全回退;是用来保证一系列操作的要么成功,要么失败;
  • 19.常见的事务管理有Spring中提供的DataSourceTransactionManager、Hibernate中自带的HibernateTransactionManager;
  • 20.我们可以直接在Spring中注册该事务管理,也可以通过@Transactional的方式。

通过对业务逻辑类中的所有方法添加事务管理,那么就可以将这些业务逻辑类对外提供服务。在web层就可以直接调用这些业务逻辑类进行业务处理。 


三 Web层

 在Web层通过引入Spring MVC对进行处理从浏览器接收过来的请求,并且对模块进行分离,松耦合,可以方便的更换每个模块。

  • 21.一般用.jsp文件用来做UI展示,通过@Controller来标记Spring MVC的控制器;
  • 22.通过DispatcherServlet来将浏览器发送过来的请求,分发给不同的控制器,控制器根据之前定义的匹配规则,找到对应的方法进行处理,最后在控制器将业务逻辑类处理完的结果封装成ModelAndView传给View层进行UI渲染。

四 JTA

在最右下角还有一个JTA(分布式事务)

  • 23.相对比于JDBC事务是被限定在一个单一的数据库连接,JTA分布式事务可以有多个参与者,这个后面随着知识积累再去详细的研究下。

 五 总结

后面还有更多的内容需要继续学习,加油!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值