目录
翻看这段时间的笔记,发现已经有17篇笔记了。
小白新手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分布式事务可以有多个参与者,这个后面随着知识积累再去详细的研究下。
五 总结
后面还有更多的内容需要继续学习,加油!