淘淘商城第二天-01

课程计划

目标:实现商品列表的查询(没有插入数据就可以查询吗,当然可以,我们可以模拟一点数据)

  1. 框架整合springmvc+spring+mybatis
  2. 创建数据库
  3. 使用mybatis的逆向工程生成代码
  4. 商品列表功能实现

创建数据库

使用Navicat for MySQL软件新建taotao数据库,然后运行SQL脚本文件,建立表。
在这里插入图片描述
在互联网行业的项目中尽可能的减少表的管理查询。使用冗余解决表的关联问题。有利于分库分表。

接下来我们要事项商品列表的查询,和哪个表有关系,和item有关系。
表单里面的tb_item就是商品表,tb_item_cat是商品分类表。
我们再商品表上右键选择对象信息->选择DDL,可以看到这个tb_item表中每一列信息代表什么意思
在这里插入图片描述
下面简单了解一个电商行业的概念SKu:最小库存量单位。就是商品id。就是商品最细力度的划分。每个sku都唯一对应一款商品,商品的颜色、配置都已经唯一确定。

逆向工程

Mybatis的逆向工程。根据数据库表生成java代码。
导入Mybatis的逆向工程(这个是官方带的一个代码,拿过来就用了)。E:\1.Java就业全套视频\30-SSM分布式案例-互联网商城-阶段项目-必看(共197集)\第1套 推荐观看\淘淘商城(SpringMvc+Spring+Mybatis)\02.第二天(框架整合,后台系统搭建)\01.参考资料\逆向工程\generatorSqlmapCustom
然后我们的代码怎么生成的决定于一个配置文件:generatorConfig.xml
在这里插入图片描述
在这里插入图片描述
然后执行generatorSqlmapCustom项目下d1src下的默认包下的GeneratorSqlmap.java文件下的main方法,然后刷新项目即可生成逆向代码。

注意:如果想再次生成代码,必须先将已经生成的代码删除,否则会在原文件中追加。
逆向工程代码成成完了,我们先放到这里,待会用的时候再拿。

SSM框架整合

整合的思路

Dao层

我们得一层一层来,先看Dao层
Dao层:使用mybatis框架。创建SqlMapConfig.xml(Mybatis就这一个配置文件)。这里面需要配什么?数据库连接需要配吗?不用,整合后数据库连接让Spring来管理。需要配别名,别名是必须的吗?也不是,所以这个其实可以只是一个功能性的文件,里面啥也不需要配。

我们暂时不用向里面添加任何配置,像数据库连接池、事务之类的配置会交给Spring来管理,别名可配可不配,因此我们这里就放一个只有头的空文件就可以了(文件虽然没有配置任何内容,但是不能没有)。

创建一个applicationContext-dao.xml,这个是给Spring用的,这里面需要干什么事?

  1. 配置数据源
  2. 需要让Spring容器管理SqlsessionFactory,单例存在。
  3. 把mapper的代理对象放到spring容器中。(三种方式)这里我们使用扫描包的方式加载mapper的代理对象

Service层

  1. 事务管理
  2. 需要把service实现类对象放到spring容器中管理(所有的service实现类都要放到spring容器中管理。)

表现层

表现层就一个springmvc框架吧!由springmvc来管理controller,而且还要记得引用dubbo服务哟!总的来说,springmvc框架的核心配置文件的内容有:

  1. 配置注解驱动
  2. 配置视图解析器
  3. 需要扫描controller

Web.xml

最后,千万不要忘了在web.xml文件中添加如下配置:

  1. spring容器的配置
  2. Springmvc前段控制器的配置
  3. Post乱码过滤器

下面我们想这些配置文件放在那里?taotao-manage下面又四个子工程,这些dao、service、表现层的配置文件分别放在对应的工程里面吗?不是的!因为前三个工程就是jar包,最终打包后会放在/webapp/web-inf下面,配置文件放在这里是读取不到的。所以应该放到web工程下的src/main/resources下面。
我们的web工程运行时,是谁来读取配置文件的?是tomcat来读取的,tomcat不支持从jar包里面来读取配置文件。所以放到前三个里面tomcat是读取不到的。那问题来了,那我们再前三个工程里面是有些pom.xml文件的,你tomcat怎么读?打哪是我tomcat根本不读,因为这些配置文件的阅读是框架实现的(这里的框架应该是maven工程)-----这句话说的不对哈,但是我先不删,虽然也无用
我们为什么把配置文件放到web项目下,即war工程下,而不放到jar工程下?是因为我们平时的小工程放的配置文件都是在src下面。而被打包的jar工程是在webapp下面的web-inf下面,这个是读取不到的。这里的三个框架是不能从这里读取到配置文件的(或者可以说它没有做到这个技术)

框架整合

我们根据框架在src/main/resources下面新建几个文件夹
在这里插入图片描述
需要把配置文件放到taotao-manager-web工程下。因为此工程为war工程,其他的工程只是一个jar包。

Mybatis整合

Dao层的整合也是框架的整合,我们使用的是SSM三大框架,也就是Spring、SpringMVC和Mybatis,我们先来说一下Spring和Mybatis的整合,这两个框架的整合我们应该放到服务层(因为Mybatis的主要职责是和数据库打交道),不建议大家把Spring和Mybatis的整合放到taotao-manager-dao工程当中,因为dao工程只是个jar工程,将来会被打包成一个jar包,配置文件也会被打包到jar包里面,我们调用起来比较麻烦,建议大家放到taotao-manager-service工程中(因为该工程是war工程,taotao-manager聚合工程最终都会打包成一个war包,war包整合了聚合工程的所有内容,因此更适合来进行框架整合)。

mybatis创建完后,我们dao层还需要一个applicationContext-dao.xml,这个是我们spring容器dao层的配置。我们再spring文件夹下创建一个applicationContext-dao.xml文件
我们在applicationContext-dao.xml文件当中配置数据库连接池、SqlSessionFactory(Mybatis的连接工厂)、Mybatis映射文件的包扫描器,配置内容如下:

在这里插入图片描述
那么我们在taotao-manager-service的applicationContext-dao.xml文件中的扫描配置能否扫描到这个包呢?答案是可以的,因为taotao-manager-dao工程会被打包成jar包放到war工程下的WEB-INF/lib目录下,我们的applicationContext-dao.xml文件就是在war工程中,因此扫描是没有问题的。
这里的扫描包扫描的是com.taotao.mapper。

Service层

配置applicationContext-service.xml:这里面只是配置了扫描哪个包?扫描service项目下的com.taotao.service包下的带有@Service注解的类。
applicationContext-service.xml文件的内容如下所示,可以看到我们配置包扫描器,扫描所有带@Service注解的类。
在这里插入图片描述
然后是配置事务:applicationContext-trans.xml,配置事物需要配置切面,这个我记不住,我们拿过来。(事物管理感觉就是通用配置,就那几句话)

applicationContext-trans.xml文件的内容如下所示。其中事务的传播行为需要说明一下,当接口名以save、insert、add、create、delete、upate开头时spring会自动帮我们开启事务(前提是我们配置了事务传播行为),而find、select、get开头的接口是查询,不涉及更改数据库,因此不需要事务,spring不会为查询接口自动开启事务。下面再说说切面,也就是事务的作用范围,execution(* com.taotao.service..(…))的意思是,com.taotao.service包下的任意类的任意方法的任意参数及任意返回值都是事务的切入点。
在这里插入图片描述

Web.xml

我们在服务层新建了三个配置文件,那么程序是怎么知道这三个文件的呢?这就需要在服务层初始化spring容器了,方法是在taotao-manager-service工程下的web.xml文件中进行配置。
在这里插入图片描述
当然web.xml里面不止这些内容,后面还有。

表现层

springmvc.xml:里面配置了一个扫描包com.taotao.controller,配置一个注解驱动,配置视图解析器。
从上可以看到我们springmvc.xml文件中配置的扫描包是com.taotao.controller,因此我们需要创建这么一个目录。
在这里插入图片描述
下面我们需要在taotao-manager-web工程下的web.xml文件中配置一下编码和前端控制器,web.xml文件的配置内容如下:
在这里插入图片描述
/:会拦截所有请求包括静态资源。需要在springmvc.xml中添加静态资源的映射。因此要再springmvc.xml中添加静态资源的映射。
正常情况下放在WEB-INF中的静态资源不会访问到,我们在web.xml中用/拦截所有资源,包括静态资源,那么怎么处理呢?springmvc处理,走我们的配置在springmvc.xml中添加静态资源的映射。

我们这里说一个在以前springmvc课程中没有讲过的内容。我们为什么不能配一个全局扫描啊,你想我们再springmvc.xm中配置了扫描包:com.taotao.controller,要扫描controller;我们再applicationContext-service.xml文件中配置了扫描包,扫描的是com.taotao.service。我们能不能配一个全扫描就完事了??我们不再springmvc中扫描,我们在applicationContext-service.xml中扫描com.taotao可以吗?或者扫描com.*怎么样?那是不是com包下所有的带这个注解的都会被扫描到,包括哪些注解,confint,repostory,service…,都会放到spring容器中。那么我们前段这个springmvc还需要扫描吗??就不用了。这样是不好使的,一访问就是404.

我们这里讲一个springmvc父子上下文的关系

我们再web.xml中加载了一个spring容器(里面放各种对象,就是个容器),后面又配了一个springmvc的前段控制器(会创建一个新的springmvc容器,也是一个放对象的容器)。Spring容器中存的就是service和dao,Springmvc中存的是controller。我们再用起来其实没什么感觉,并没有觉的是两个容器。平时我们把dao注入的service,没有问题;我们把service注入到controller,也没有问题。子容器是可以访问父容器中的对象,也就是service注入到controller。我们也可以把service注入到dao。但是父容器不能访问子容器对象的。即service不能访问controller的(即controller不能注入到service)。如果我们配置了一个全局的扫描,那么spring会把service,dao,controller都放到spring里面去(这个大的容器中)。那么springmvc里面就没有对象,就没有controller。

例如:
在applicationContext-service中配置:
扫描包加载Service实现类(注意我们这里假设只做这一个扫描,在springmvc中就不做扫描了)
<context:component-scan base-package=“com.taotao”></context:component-scan>
会扫描@Controller、@Service、@Repository、@Compnent会扫描这些注解,那么service,dao,controller都进来到了Spring容器中了。
在这里插入图片描述
Springmvc。Xml中不扫描。
结论:springmvc。不能提供服务,因为springmvc子容器中没有controller对象。所以这时候请求就不能处理了。

那么我们不要spring了,只要springmvc,把service,dao,controller都放进来可以吗?当然是可以的。我们以前这么干过。

我们的事务配置到controller里面可以吗?不可以(前提是SSM架构,service,dao在Spring容器中,Springmvc在Springmvc容器中)。这时候事务管理器访问不了controller。因此配置到service中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值