Maven项目管理工具(四) 构建SSM工程应用

l 需求:SSM整合实现查询商品列表

l 整合思路回顾

SSM=(Mybatis+Spring)+SpringMVC

​ =(Dao层+Service层)+Web层

Dao层和Service分别开发完毕之后,然后按照三个整合目标完成后续工作:

目标1:数据库连接池和数据库事务交给Spring管理

目标2:SqlSessionFactory作为单例交给Spring管理

目标3:Spring扫描Mapper接口创建并管理Mapper代理对象,我们使用的时候直接去容器中拿到Mapper代理对象进行使用

测试Mybatis+Spring

再整合SpringMVC(相当于在已有整合工程的基础上开发SpringMVC的入门案例)

细节1:Controller层扫描应该配置在Springmvc的配置文件中

细节2:Spring框架使用监听器启动(配置在web.xml中)

l POM.xml

注意:以后到公司使用Maven也是这样,引入一个Jar包需要三步:定义版本、锁定版本、引入jar包;但是这么干未免太过麻烦,所以每个公司都有自己的POM文件模板,项目经理会提供给你你直接使用即可,比如像我们今天的项目就需要一个这样的模板

(一)依赖传递[理解]

在Maven的POM文件中导入一个jar的坐标,那么Maven会把这个jar所依赖的jar全部下载下来,这种机制就叫做依赖传递

​ 我们直接导入的jar叫做直接依赖;由Maven补全的jar叫做间接依赖

(二)依赖冲突的解决[理解]

l 第一声明者优先原则:哪个jar坐标导入在前(pom文件中该jar的坐标配置在上面),依赖jar的版本和这个jar的版本保持一致

l 路径近者优先原则:在pom.xml中明确配置了某一个jar的版本(明确告诉maven我要使用哪个版本,那就是用哪个版本),那么就以此为准

l 版本锁定:好处在父子工程中体现的更明显

(三)搭建SSM工程[应用]

1.新建一个 ssm_maven 项目,使用下图选中的骨架

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qDLll89Q-1593163525050)(../img-folder/Maven/wps42.jpg)]

2.下一步填写坐标

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sK42dtrp-1593163525065)(../img-folder/Maven/wps43.jpg)]

3.确认是否使用的自己的私服,然后直接下一步完成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-36FAGEhk-1593163525071)(../img-folder/Maven/wps44.jpg)]

4.在 main 目录下新建 java 和 resources 文件夹

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HrfgCy0r-1593163525078)(../img-folder/Maven/wps45.jpg)]

5.把 java 和 resources 文件夹转成 source root

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KhoPhYz1-1593163525082)(../img-folder/Maven/wps46.jpg)]

6.修改编译版本,在 pom.xml 文件中添加

<build>

<plugins>

<!-- 设置编译版本为 1.8 -->

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.1</version >

<configuration>

<source>1.8</source>

<target>1.8</target>

<encoding>UTF-8</encoding>

</configuration>

</plugin>

</plugins>

</build>

7.定义 pom.xml

maven 工程首先要识别依赖,web 工程实现 SSM 整合,需要依赖 spring-webmvc5.0.2、

spring5.0.2、mybatis3.4.5 等,在 pom.xml 添加工程如下依赖:(在实际企业开发中会有专门得人来编写 pom.xml)

分两步:

1)锁定依赖版本

2)添加依赖

<groupId>com.mavenDemo.maven</groupId>
 <artifactId>ssm_maven</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>war</packaging>
 <!-- POM文件模板开始 -->
 <properties>
   <!-- 项目编码 -->
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <!-- 编译及输出的时候应用那个版本的jdk -->
   <maven.compiler.source>1.7</maven.compiler.source>
   <maven.compiler.target>1.7</maven.compiler.target>
   <!-- 定义spring的版本 -->
   <spring.version>5.0.2.RELEASE</spring.version>
 </properties>

 <dependencyManagement>
   <dependencies>
     <!-- 底层容器 -->
     <!-- SpringBean管理 -->
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-beans</artifactId>
       <version>${spring.version}</version>
     </dependency>
     <!-- Spring IOC管理 -->
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-context</artifactId>
       <version>${spring.version}</version>
     </dependency>
     <!-- Spring AOP管理 -->
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-aop</artifactId>
       <version>${spring.version}</version>
     </dependency>
     <!-- 切面功能包里面包含了我们用的切面切入点织入等功能-->
     <dependency>
       <groupId>org.aspectj</groupId>
       <artifactId>aspectjweaver</artifactId>
       <version>1.8.7</version>
     </dependency>
     <!-- 数据库操作 -->
     <!-- mybatis的核心包 -->
     <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis</artifactId>
       <version>3.4.5</version>
     </dependency>
     <!-- mybatis与spring的整合包 -->
     <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis-spring</artifactId>
       <version>1.3.1</version>
     </dependency>
     <!-- 事务操作 -->
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-tx</artifactId>
       <version>${spring.version}</version>
     </dependency>
     <!-- JDBC辅助 -->
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-jdbc</artifactId>
       <version>${spring.version}</version>
     </dependency>
     <!-- 页面功能 -->
     <!-- SpringMVC -->
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-webmvc</artifactId>
       <version>${spring.version}</version>
     </dependency>
     <!-- ServletAPI -->
     <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>jsp-api</artifactId>
       <version>2.0</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>servlet-api</artifactId>
       <version>2.5</version>
       <scope>provided</scope>
     </dependency>
     <!-- JSTL -->
     <dependency>
       <groupId>jstl</groupId>
       <artifactId>jstl</artifactId>
       <version>1.2</version>
     </dependency>
     <dependency>
       <groupId>taglibs</groupId>
       <artifactId>standard</artifactId>
       <version>1.1.2</version>
     </dependency>
     <!-- 单元测试 -->
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-test</artifactId>
       <version>${spring.version}</version>
     </dependency>
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>4.12</version>
     </dependency>
   </dependencies>
 </dependencyManagement>

 <dependencies>
   <!-- 底层容器 -->
   <!-- SpringBean管理 -->
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-beans</artifactId>
   </dependency>
   <!-- Spring IOC管理 -->
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-context</artifactId>
   </dependency>
   <!-- Spring AOP管理 -->
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-aop</artifactId>
   </dependency>
   <!-- 切面功能包里面包含了我们用的切面切入点织入等功能-->
   <dependency>
     <groupId>org.aspectj</groupId>
     <artifactId>aspectjweaver</artifactId>
   </dependency>
   <!-- 数据库操作 -->
   <!-- mybatis的核心包 -->
   <dependency>
     <groupId>org.mybatis</groupId>
     <artifactId>mybatis</artifactId>
   </dependency>
   <!-- mybatis与spring的整合包 -->
   <dependency>
     <groupId>org.mybatis</groupId>
     <artifactId>mybatis-spring</artifactId>
   </dependency>
   <!-- 事务操作 -->
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-tx</artifactId>
   </dependency>
   <!-- JDBC辅助 -->
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-jdbc</artifactId>
   </dependency>
   <!-- 页面功能 -->
   <!-- SpringMVC -->
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-webmvc</artifactId>
   </dependency>
   <!-- ServletAPI -->
   <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>jsp-api</artifactId>
   </dependency>
   <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>servlet-api</artifactId>
   </dependency>
   <!-- JSTL -->
   <dependency>
     <groupId>jstl</groupId>
     <artifactId>jstl</artifactId>
   </dependency>
   <dependency>
     <groupId>taglibs</groupId>
     <artifactId>standard</artifactId>
   </dependency>
   <!-- 单元测试 -->
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-test</artifactId>
   </dependency>
   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
   </dependency>
   <!-- 数据库驱动 -->
   <!-- Oracle驱动 -->
   <dependency>
     <groupId>com.oracle</groupId>
     <artifactId>ojdbc14</artifactId>
     <version>10.2.0.4.0</version>
   </dependency>
   <!-- mysql驱动 -->
   <dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>5.1.7</version>
   </dependency>
   <!-- 数据源 -->
   <dependency>
     <groupId>commons-dbcp</groupId>
     <artifactId>commons-dbcp</artifactId>
     <version>1.4</version>
   </dependency>
 </dependencies>
 <!-- POM文件模板结束 -->

8.Dao 层

在src/main/java 中定义 dao 接口,实现查询全部:

(1)pojo 模型类

在src/main/java 创建模型类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XjI9qmyy-1593163525084)(../img-folder/Maven/wps47.jpg)]

(2) dao 层代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Napjnpw-1593163525086)(../img-folder/Maven/wps48.jpg)]

配置文件:注意配置文件的位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BacFXrO5-1593163525087)(../img-folder/Maven/wps49.jpg)]

在 src/main/resources 创建 spring-core.xml

<!-- 1. 引入外部的配置文件 -->
    <context:property-placeholder location="classpath:ssm.properties" />
    <!-- 2. 配置注解bean的包扫描 -->
    <context:component-scan base-package="cn.mavenDemo">
        <!-- 排除springmvc的Controller注解 -->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    </context:component-scan>
    <!-- 3. 配置数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <!-- 四大属性 -->
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.userpass}" />
    </bean>
    <!-- 4.session 工厂 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 绑定数据源 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 加载配置文件 -->
        <property name="configLocation" value="classpath:SqlMapConfig.xml" />
        <!-- 加载映射文件 -->
        <property name="mapperLocations" value="classpath:com/**/*Mapper.xml" />
    </bean>
    <!-- 5.mybaits的专用接口扫描 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.mavenDemo.ssm.dao" />
    </bean>
    <!-- 6.事务管理器 -->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 绑定数据源 -->
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 7.声明式事务 -->
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <!-- 查询方法 : 只读事务,当前有事务沿用当前的事务,没事务以非事务方式运行,保证快 -->
            <tx:method name="find*" read-only="true" propagation="SUPPORTS"/>
            <!-- 操作方法 : 非只读,以读已提交数据为事务隔离界别,如果有事务用当前事务,没事创建一个新的始终保持在事务方法中运行 -->
            <!-- READ_COMMITTED 读已提交 并发访问速度快 但是不安全 牺牲安全保证速度 -->
            <tx:method name="insert*" isolation="READ_COMMITTED" />
            <tx:method name="update*" isolation="READ_COMMITTED" />
            <tx:method name="delete*" isolation="READ_COMMITTED" />
            <tx:method name="*" read-only="true" propagation="SUPPORTS"/>
        </tx:attributes>
    </tx:advice>
    <!-- 8.AOP 代理实现 -->
    <aop:config>
        <!-- 配置切入点 -->
        <aop:pointcut id="serviceCut" expression="execution(* cn.mavenDemo.ssm.service..*.*(..))" />
        <!-- 织入 -->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceCut" />
    </aop:config>

在 src/main/resources 创建SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 1. 显示SQL语句 -->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <!-- 2. 配置别名包 -->
    <typeAliases>
        <package name="cn.mavenDemo.pojo" />
    </typeAliases>
</configuration>  

创建ssm.properties

jdbc.driver = oracle.jdbc.OracleDriver
jdbc.url = jdbc:oracle:thin:@127.0.0.1:1521:orcl
jdbc.username = ssmoperate
jdbc.userpass = orcl
(3)Service 层

在这里插入图片描述
在这里插入图片描述

(4)Web 层

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nESQHk52-1593163525092)(../img-folder/Maven/wps52.jpg)]

配置文件

在 src/main/resources 创建 spring-mvc.xml

<!-- 1.配置controller注解 -->
   <context:component-scan base-package="cn.mavenDemo">
       <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
   </context:component-scan>
   <!-- 2.加载预置的SpringMVC -->
   <mvc:annotation-driven />
   <!-- 3.配置视图解析器/WEB-INF/pages/account_list.jsp  -->
   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <!-- 前缀 -->
       <property name="prefix" value="/WEB-INF/pages/" />
       <!-- 后缀 -->
       <property name="suffix" value=".jsp" />
   </bean>

Web.xml

加载 spring 容器,配置 springmvc 前端控制器

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!-- 加载spring配置 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-core.xml</param-value>
  </context-param>
  <!-- 过滤器 -->
  <filter>
    <filter-name>EncodingFilter</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>
  </filter>
  <filter>
    <filter-name>RestFulFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>RestFulFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>


  <!-- 配置spring的监听器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- springmvc核心servlet -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 加载一下springmvc的配置文件 -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>
(5)JSP

Index.jsp

<%@ page isELIgnored="false" contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>系统首页</title>
    <script type="text/javascript">
        function goView() {
            window.location.href = "${pageContext.request.contextPath}/AccountViewAction/AccountView";
        }
        function goAdd() {
            alert("准备添加");
        }
    </script>
</head>
<body>
    <div>
        <h1>欢迎使用账户信息管理系统</h1>
        <h3>请选择你要使用的功能 :</h3>
        <input type="button" value="添加" onclick="goAdd();" />
        &nbsp;&nbsp;&nbsp;&nbsp;
        <input type="button" value="查询" onclick="goView();" />
    </div>
</body>
</html>

AccountList.jsp

<%@ page isELIgnored="false" contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>数据展示</title>
</head>
<body>
    <div>
        <c:if test="${not empty accounts}">
            <table border="1">
                <thead>
                    <tr>
                        <th>编号</th>
                        <th>姓名</th>
                        <th>金额</th>
                    </tr>
                </thead>
                <tbody>
                    <c:forEach items="${accounts}" var="a">
                        <tr align="center">
                            <td>${a.id}</td>
                            <td>${a.name}</td>
                            <td>
                                <fmt:formatNumber type="currency" value="${a.money}" />
                            </td>
                        </tr>
                    </c:forEach>
                </tbody>
            </table>
        </c:if>

    </div>
</body>
</html>
(6)运行与调试

已添加 tomcat7 插件,双击右侧 tomcat7 运行

|      |                                       || ---- | ------------------------------------- ||      | ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LvUgdlkp-1593163525094)(../img-folder/Maven/wps53.jpg)] |](https://img-blog.csdnimg.cn/202006261728369.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MTk0Mzg4,size_16,color_FFFFFF,t_70)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时小浅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值