一、maven基础回顾
1.1 maven两大核心功能
- 依赖管理: 对jar包的管理过程。原来传统工程项目中放置jar包,maven工程项目中方式jar包坐标,。而真正的jar包放在中央仓库。目的:实现代码的可重用。
-
- 仓库分为三类:本地仓库,私服(远程仓库),中央仓库。
- 一键构建: 使用maven集成的tomcat插件对项目进行编译,测试,打包,安装,部署 等操作。
1.2 Maven的三套生命周期
- 清理生命周期: clean 删除target
- 默认声明周期:
- complie 编译main下面的java文件,生成.class
- test:测试
- package:将工程打包到target中
- install:把maven项目打包到本地仓库
- deploy:将打好的包安装到远程仓库,供其他项目使用。
- 站点生命周期: 了解
二、回顾SSM整合
2.1 jar包之间的依赖关系,直接依赖和传递依赖
直接依赖: A项目中导入了B包,A直接依赖于B。
传递依赖: A项目中导入了B包,B包直接依赖于C包,最终也可以在A项目中使用C,可以说A传递依赖于C。
2.2 导入jar包的三要素
2.2.1 第一声明优先原则
哪个jar包在靠上的位置,最终项目进入的就是哪个jar包下的依赖包。
2.2.2 路径近者优先原则
直接依赖路径近与传递依赖路径。
2.2.3 直接排除法
2.3、pom文件中可以放三类信息:
- 项目自身坐标信息
- 项目运行所依赖的jar包的信息
- 项目运行的环境信息
2.4 编写代码
创建MavenWeb工程:
2.4.1编写dao层代码
提供dao接口
public interface ItemsDao {
@Select("select * from items where id = #{id}")
public Items findById(Integer id);
}
编写mybatis的spring配置文件–applicationContext.xml
<!--dao配置开始-->
<!--数据库连接池-->
<bean id="c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql:///day02_spring"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
</bean>
<!--得到生产SqlSessionFactory的工厂对象-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="c3p0"></property>
</bean>
<!--自动扫描dao接口包,给其下所有接口生成代理对象,并放入到ioc容器中-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.zsl.dao"></property>
</bean>
<!--dao配置结束-->
测试类
@Test
public void daoTest(){
//得到ioc容器
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//从容器中拿到代理对象
ItemsDao dao = context.getBean(ItemsDao.class);
Items byId = dao.findById(1);
System.out.println(byId.getName());
}
2.4.2 编写service层代码
提供service接口
public interface ItemsService {
Items findById(Integer id);
}
实现service的实现类
@Service
public class ItemsServiceImpl implements ItemsService {
@Autowired
private ItemsDao itemsDao;
@Override
public Items findById(Integer id) {
return itemsDao.findById(id);
}
}
提供service配置文件—applicationContext.xml
<!--service配置开始-->
<!--开启组件扫描-->
<context:component-scan base-package="com.zsl.service"></context:component-scan>
<!--开启事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="c3p0"></property>
</bean>
<!--配置事务的通知-->
<tx:advice id="advice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="find*" read-only="true"/>
<tx:method name="*" propagation="REQUIRED"></tx:method>
</tx:attributes>
</tx:advice>
<!--配置切面-->
<aop:config>
<!--切入点表达式-->
<aop:pointcut id="pointcut" expression="execution(* com.zsl.service.Serviceimpl.*.*(..))"></aop:pointcut>
<aop:advisor advice-ref="advice" pointcut-ref="pointcut"></aop:advisor>
</aop:config>
<!--service配置结束-->
提供测试类
@Test
public void serviceTest(){
//得到IOC容器
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//从容器中拿到dao的代理对象
ItemsService itemsService = ac.getBean(ItemsService.class);
Items items = itemsService.findById(1);
System.out.println(items.getName());
}
2.4.3 编写web层代码
编写处理器–ItemsController
@Controller
@RequestMapping("/items")
public class ItemsController {
@Autowired
private ItemsService itemsService;
@RequestMapping("/showDetail")
public String showDetail(Model model){
Items byId = itemsService.findById(1);
model.addAttribute("item",byId);
return "itemDetail";
}
}
编写web.xml配置文件
<!--编写编码过滤器-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--配置前端控制器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--配置spring的核心监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--重新指定spring配置文件的路径和名称-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
编写spring-mvc.xml配置文件
<!--开启ioc扫描-->
<context:component-scan base-package="com.zsl.controller"></context:component-scan>
<!--开启mvc注解支持-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--视图解析器-->
<bean id="internalResourceViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!--释放静态资源-->
<mvc:default-servlet-handler></mvc:default-servlet-handler>
提供请求视图 — index.jsp
<body>
<% response.sendRedirect(request.getContextPath()+"/items/showDetail"); %>
</body>
三、工程拆分与聚合的思想
- maven工程拆分就是为了把一个项目变成N个独立的模块,使代码更充分的可重用。
-
- maven工程的聚合 就是把多个模块合在一起变成一个新的项目。
3.1 父子工程以及子模块之间的关系
- 父子关系直接是继承关系,子模块天生可以使用父工程的资源。
- 子模块本没有任何关系,后天可以建立关系,这叫依赖。
工程和模块的区别: - 工程可以单独创建
- 模块必须在工程下
建立模块之间的依赖关系: web依赖service,service依赖dao。
3.2 父子工程的创建
将上面的代码按照子模块的名称依次复制过来即可。
3.3 注意
- 需要在service子模块中的applicationContext.xml中添加
<import resource="classpath:applicationContext-dao.xml"></import>
目的: 继承dao层实现的功能。
- 应该将service层的配置文件改为applicationContext-service.xml 为了加以区分。