Maven高级
1.maven基础回顾
2.maven传统的web工程做一个数据查询操作
3.maven工程拆分与聚会的思想
4.把第二阶段做好的web工程修改成maven拆分与聚合的形式
5.私服【远程仓库】
6.任何安装第三方jar包【把第三方jar包安装到本地仓库,把第三方jar包安装到私服。】
maven基础知识回顾:
maven是一一个项目管理工具。
依赖管理:maven对项目中jar包的管理过程。传统工程我们直接把jar包放置在项目中。maven工程真正的jar包放置在仓库中,项目中只用放置jar包的坐标。
仓库的种类:本地仓库,远程仓库[私服],中央仓库。
仓库之间的关系:当我们启动一个maven工程的时候,maven工程会通过pom文件中jar包的坐标去本地仓库找对默认情况下,如果本地仓库没有对应jar包,maven.工程会自动去中央仓库下载jar包到本地,在公司中,如果本地没有对应jar包,会先从私服下载jar包,如果私服没有jar包,可以从中央仓库下载,也可以从本地上传。
一键构建: maven自身集成了tomcat插件,可以对项目进行编译,测试,打包,安装,发布等操作。
maven常用命令: clean, compile, test, package, insta1l, deploy。
maven三套生命周期:清理生命周期,默认生命周期,站点生命周期。
web.xml配置头:
<web-app xmlns="http://java. sun. com/xml/ns/javaee"
xmlns :xsi="http://www. W3. org/ 2001/XMLSchema- instance"
xsi : schemalocation= "http://java. sun. com/ xml/ns/javaee
http://java. sun. com/ xm1/ns/javaee/web-app 3_ 0.xsd"
version="3.0">
maven导入jar包的冲突问题:
<!-- maven工程要导入jar包的坐标, 就必须考虑解决jar包冲突。
解决jar包冲突的方式一^:
第一优先声明原则,哪个jar包的坐标在靠上的位置,这个jar包就是先声明的。
先声明的jar包坐标下的依赖包,可以优先进入项目中。
maven导入jar包中的一-些 概念:
直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包
传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中去
解决jar包冲突的方式二
路径近者优先原则。直接依赖路径比传递路径近,那么最终项目进入的jar包会是路径近的直接依赖包:
解决jar包冲突的方式三: [推荐使用] :
直接排除法。
当我们要排除某个jar包下的依赖包,在配置exclusions标签的时候,内部可以不写版本号。
因为此时依赖包使用的版本和默认版本jar包一样。
-->
<!-- maven工程要导入jar包的坐标, 就必须考虑解决jar包冲突。
解决jar包冲突的方式:
第一优先声明原则,哪个jar包的坐标在靠上的位置,这个jar包就是先声明的。
先声明的jar包坐标下的依赖包,可以优先进入项目中。
maven导入jar包中的一-些 概念:
直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包
传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中去
解决jar包冲突的方式: :
路径近者优先原则。直接依赖路径比传递路径近,那么最终项目进入的jar包会是路径近的直接依赖包。
解决jar包冲突的方式三: [推荐使用] :
直接排除法。
当我们要排除某个jar包下的依赖包,在配置exclusions标签的时候,内部可以不写版本号。
因为此时依赖包使用的版本和默认版本jar包样。
-->
完整的mvc架构全部坐标:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itheima</groupId>
<artifactId>maven_day02_1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
<slf4j.version>1.6.6</slf4j.version>
<log4j.version>1.2.12</log4j.version>
<shiro.version>1.2.3</shiro.version>
<mysql.version>8.0.17</mysql.version>
<mybatis.version>3.4.5</mybatis.version>
<spring.security.version>5.0.1.RELEASE</spring.security.version>
</properties>
<!-- 锁定jar包版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 项目依赖jar包 -->
<dependencies>
<!-- spring -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log end -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
</dependencies>
</project>
dao层的编写:
(1):配置文件的书写:
<!-- dao层配置文件开始-->
<!-- 配置连接池-->
<bean id="dataSource" class="com. alibaba。druid。pool . DruidDataSource">
<property name =”driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name "url" value=" jdbc :mysql://localhost :3306/maven?serverTimezone=UTC" />
<property name="username" value= "root" />
<property name=" password" value= ”xzq1314"/>
</bean>
<!-- 配置SqlSession对象的工厂 -->
<bean id= ”sqlSessionFactoryBean" class= "org.mybatis.spring.SqlSessionFactoryBean">
<property name="datasource" ref="dataSource"/>
<!--扫描pojo包,给包下所有pojo对象起别名-->
<property name= ”typeAliasesPackage" value=" com . itheima . damain"/>
</bean>
<!--扫描接口包路径,生成包下所有接口的代理对象,并且放入spring容器中-->
<bean class= ”org.mybatis.spring.mapper.MapperSc annerConfigurer">
<property name= ”basePackage" value= "com.itheima.dao" />
</bean>
<!-- dao层配置文件结束-->
(2):书写dao层:
import com.itheima.damain.Items ;
public interface ItemsDao {
public Items findById(Integer id);
}
由于交给了spring容器管理,所以不需要写dao接口的实现类。
(3):service层的配置:
<!-- service层配置文件开始-->
<!-- 组件打描配置-->
<context : component-scan base-package="com.itheima.service" />
<!-- aop面向切面编程,切面就是切入点和通知(就是增强类)的组合-->
<!-- 配置事务管理器-- >
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="datasource" ref= "dataSource"/>
</bean>
<!-- 配置事务的通知-->
<tx:advice id=" advice">
<tx:attr ibutes>
<tx :method name= ”save*" propagation="REQUIRED"/>
<tx : method name= "update*" propagation="REQUIRED"/>
<tx : method name="delete" propagat ion= "REQUIRED" />
<tx : method name="find*" read-only="true" />
<tx:method name= ”*”propagation="REQUIRED" />
</tx:attributes>
</tx: advice>
<!-- 配置切面-->
<aop:config>
<aop:pointcut id="pointcut" expression="execution(* com.itheima.service.imp1.*.*(..))"/>
<!-- advice-ref通知类pointcut-ref 切入点 -->
<aop:advisor advice- ref="advice" pointcut-ref="pointcut" />
</aop:config>
<!-- service层配置文件结束-->
(4):service层的编写
public interface ItemsService {
public Items findById(Integer id);
}
import com.itheima.damain.Items ;
import com.itheima.dao.ItemsDao;
import com.itheima.service.ItemsService;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.stereotype.Service;
@Service
public class ItemsServiceImpl implements ItemsService {
@Autowired
private ItemsDao itemsDao ;
public Items findById(Integer id) {
return itemsDao. findById(id);
}
}
dao层自动注入注解:@Autowired
(5):web层的配置:
配置两个xml文件:applicationContext.xml 和 springmvc.xml
(applicationContext.xml之前以及配好了)
springmvc.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/ schema/ beans"
xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xmIns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop
xmIns:tx="http://www.springframework.org/schema/tx"
xmIns:mvc="http://www.springframework.org/schema/mvc”
xsi:schemaLocation-"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/springbeans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring -tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring mvc .xsd">
<!-- 组件扫描-->
<context:component-scan base-package=”com.itheima.controller"/>
<!-- 处理器映射器,处理器适配器-- >
<mvc:annotation driven/>
<!-- 视图解析器-- >
<bean id=”internalResourceViewResolver" class= ”org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀 -->
<property name= ”prefix" value =”/WEB-INF/pages/"/>
<!--后缀-->
<property name = "suffix" value=".jsp"/>
</bean>
<!-- 释放静态资源-->
<mvc:default-servlet-handler/>
</beans>
index.jsp