B/S分层
分层介绍
dto层
大概就是 MVC 中的 model 层,主要是用来写与 数据库相对应的实体类的,并且需要有 get/set 方法
dao层
dao 层的文件习惯用 Mapper 来表示 dao 层会调用 dto层 ,并且在这一层主要就是 crud 操作
service层
service层会调用dao层和dto层,service层也会对数据进行一定的处理,比如条件判断和数据筛选等等;
controller层
最后,是controller层,controller层会调用前面三层,controller层一般会和前台的js文件进行数据的交互, controller层是前台数据的接收器,后台处理好的数据也是通过controller层传递到前台显示的。
SpringBoot中的分层
SpringBoot 分为四层:controller层、service层、dao层、entity层。
entity层:
和 model 层一样,存放的是实体类,属性值与数据库值保持一致,实现 setter 和 getter 方法。
dao层:
即 mapper层,对数据库进行持久化操作,他的方法使针对数据库操作的,基本上用的就是增删改查,他就是个接口,只有方法名,具体实现在mapper.xml中实现。
service层:
业务层,存放业务逻辑处理,不直接对数据库进行操作,有接口和接口实现类,提供 controller 层调用方法。
controller层:
控制层,导入 service层,调用你service方法,controller通过接受前端传来的参数进行业务操作,在返回一个制定的路径或数据表。
各层介绍
model层
- model层即数据库实体层,也被称为entity层,pojo层。
- 一般数据库一张表对应一个实体类,类属性同表字段一一对应。
dao层
- dao层即数据持久层,也被称为mapper层。
- dao层的作用为访问数据库,向数据库发送sql语句,完成数据的增删改查任务。
service层
- service层即业务逻辑层。
- service层的作用为完成功能设计。
- service层调用dao层接口,接收dao层返回的数据,完成项目的基本功能设计。
controller层
- controller层即控制层。
- controller层的功能为请求和响应控制。
- controller层负责前后端交互,接受前端请求,调用service层,接收service层返回的数据,最后返回具体的页面和数据到客户端。
各模块简介
-
Java
-
bean 实体类,对应数据库中的表(model)
-
构造方法
-
属性
-
getter setter
-
toString()
-
-
dao 持久层 数据库增删改查
-
service 业务层
-
controller 控制层 跳转哪里
-
resources
- mapper dao实现类
- applicationContext.xml Spring的配置文
- db.properties 数据库连接信息
- log4j.properties 日志配置文件
- springmvc.xml 配置springmvc
-
webapp
- jsp等页面
- web-inf
- web.xml 加载过滤器 拦截
-
各种命名介绍
PO
(persistant object) 持久对象
在 o/r 映射的时候出现的概念,如果没有 o/r 映射,没有这个概念存在了。通常对应数据模型 ( 数据库 ), 本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的 java 对象。最简单的 PO 就是对应数据库中某个表中的一条记录,多个记录可以用 PO 的集合。 PO 中应该不包含任何对数据库的操作。
DO
(Domain Object)领域对象
就是从现实世界中抽象出来的有形或无形的业务实体。
TO
(Transfer Object) ,数据传输对象
在应用程序不同 tie( 关系 ) 之间传输的对象
DTO
(Data Transfer Object)数据传输对象
这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。
VO
(value object) 值对象
通常用于业务层之间的数据传递,和 PO 一样也是仅仅包含数据而已。但应是抽象出的业务对象 , 可以和表对应 , 也可以不 , 这根据业务的需要 。用 new 关键字创建,由 GC 回收的。
BO
(business object) 业务对象
从业务模型的角度看 , 见 UML 元件领域模型中的领域对象。封装业务逻辑的 java 对象 , 通过调用 DAO 方法 , 结合 PO,VO 进行业务操作。 business object: 业务对象 主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。 比如一个简历,有教育经历、工作经历、社会关系等等。 我们可以把教育经历对应一个 PO ,工作经历对应一个 PO ,社会关系对应一个 PO 。 建立一个对应简历的 BO 对象处理简历,每个 BO 包含这些 PO 。 这样处理业务逻辑时,我们就可以针对 BO 去处理。
POJO
(plain ordinary java object) 简单无规则 java 对象
纯的传统意义的 java 对象。就是说在一些 Object/Relation Mapping 工具中,能够做到维护数据库表记录的 persisent object 完全是一个符合 Java Bean 规范的纯 Java 对象,没有增加别的属性和方法。我的理解就是最基本的 Java Bean ,只有属性字段及 setter 和 getter 方法!。
DAO
(data access object) 数据访问对象
是一个 sun 的一个标准 j2ee 设计模式, 这个模式中有个接口就是 DAO ,它负持久层的操作。为业务层提供接口。此对象用于访问数据库。通常和 PO 结合使用, DAO 中包含了各种数据库的操作方法。通过它的方法 , 结合 PO 对数据库进行相关的操作。夹在业务逻辑与数据库资源中间。配合 VO, 提供数据库的 CRUD 操作.
VO
vo就是我们在web的controller层返回的Object, 在接口中这个VO都会被转成Json对象输出,view object。
DO
DO就是一个业务实体对象
DTO
DTO就是一个复合的DO对象,由于业务需要我们需要调用业务A查询数据得到业务对象A,再调用业务B查询数据得到业务对象B然后一系列封装转化得到复合的对象C此时他就是一个DTO,data transfer object 它是一个服务层和服务层以上之间转换的对象。
PO
po持久化对象 一般放在domain 或者 Entry中是一个与数据库表关联的对象,每一个属性都是表中的一个字段。 当业务过于简单时,po ,do,dto,vo并没有什么区别的时候我们也可以直接复用PO
model = dto
dao = mapper
controller = 除了上面两个所有的
Model是模型一般而言,会有人分的更细,VO,DTO 等等。我并不推荐分的更细,这个Model常常和持久化的数据一一对应,如Mysql和MongoDB。
Service的概念很大,它的重点是在于提供一个服务。这个服务可能包括一系列的数据处理,也有可能会调用多个Util,或者是调用别的服务。总归一句话,就是,有什么事情,你来找我。
Dao一般而言,都是用来和底层数据库通信,负责对数据库的增删改查。Dao最好都是要独立出来。到现在为止,最佳实践就是一个Service只对应一个Dao。Service会做一些额外的检查,如货物是否损坏,入库单是否完整,等等等等。
SpringBoot 集成MyBatis 中的@MapperScan注解
在SpringBoot中集成MyBatis,可以在mapper接口上添加@Mapper注解,将mapper注入到Spring,但是如果每一给mapper都添加@mapper注解会很麻烦,这时可以使用@MapperScan注解来扫描包。
经测试发现,@MapperScan注解只会扫描包中的接口,不会扫描类,所以可以在包中写Provider类。
@MapperScan(“com.demo.mapper”):扫描指定包中的接口
@MapperScan(“com.demo..mapper”):一个代表任意字符串,但只代表一级包,比如可以扫到com.demo.aaa.mapper,不能扫到com.demo.aaa.bbb.mapper
@MapperScan(“com.demo.**.mapper”):两个*代表任意个包,比如可以扫到com.demo.aaa.mapper,也可以扫到com.demo.aaa.bbb.mapper
可以扫描到跨模块的包