Maven整合SSM框架开发流程

一、SSM各部分负责的功能

SpringMVC:负责MVC设计模式的实现。也就是客户端与Java程序之间的交互

Mybatis:负责数据持久层的实现。也就是Java程序与数据库的交互

Spring:负责管理SpringMVC和Mybatis相关对象的创建和依赖注入,同时将我们写的类交给Spring来管理

二、Maven整合SSM过程

1、创建maven工程

2、在pom,xml中添加相关的依赖

<dependencies>
  <!-- SpringMVC依賴  -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.0.11.RELEASE</version>
  </dependency>
​
  <!--   Spring JDBC -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.0.11.RELEASE</version>
  </dependency>
​
  <!-- Spring AOP -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>5.0.11.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>5.0.11.RELEASE</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>
​
  <!--   Mysql驱动 -->
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.11</version>
  </dependency>
​
  <!--    C3P0连接池  -->
  <dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
  </dependency>
​
  <!--  JSTL  -->
  <dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
  </dependency>
​
  <!--    ServletAPI-->
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
  </dependency>
  <!-- 单元测试-->
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>
</dependencies>

3、web.xml中配置SpringMVC、Spring、字符编码过滤器、加载静态资源。

<!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.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <!-- 配置SpringMVC -->
  <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:springmvc.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  
  <!--  配置字符编码过滤器-->
  <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>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <!-- 加载静态资源-->
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
  </servlet-mapping>
</web-app>

4、在spring.xml中配置Mybatis和Spring的整合

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/spring-beans.xsd"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:p="http://www.springframework.org/schema/p">
​
    <!--  整合Mybatis -->
    <!-- 配置数据库连接池信息-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!--数据库用户名-->
        <property name="user" value="root"/>
        <!--数据库连接密码-->
        <property name="password" value="123456"/>
        <!--数据库连接url地址-->
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/develop"/>
        <!--数据库驱动-->
        <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
        <!--MySQL驱动版本6.0以下使用-->
        <!--<property name="driverClass" value="com.mysql.jdbc.Driver"/>-->
        <!--初始化连接数-->
        <property name="initialPoolSize" value="5"/>
        <!--最大连接数-->
        <property name="maxPoolSize" value="10"/>
    </bean>
​
    <!-- 配置Mybatis  SqlSessionFactory  -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 指定数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!-- 指定mapper文件的路径 -->
        <property name="mapperLocations" value="classpath:com/chen/repository/*.xml"></property>
        <!-- 指定mybatis的全局配置文件位置 -->
        <property name="configLocation" value="classpath:mybatisConfig.xml"/>
    </bean>
​
    <!--配置扫描路径:扫描自定义的mapper接口-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.chen.repository"/>
    </bean>
</beans>

5、在mybatisConfig.xml中配置一些Mybatis的辅助信息,比如打印SQL等。

<?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>
    <settings>
        <!--打印SQL-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <typeAliases>
        <!--指定一个报名,Mybatis会在包名下搜索需要的JavaBean-->
        <package name="com.chen.entity"/>
    </typeAliases>
</configuration>

6、配置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"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/spring-beans.xsd
                http://www.springframework.org/schema/mvc
                http://www.springframework.org/schema/spring-mvc-4.0.xsd
                http://www.springframework.org/schema/context
                http://www.springframework.org/schema/spring-context.xsd">
​
    <!--  启动注解驱动  -->
    <mvc:annotation-driven/>
​
    <!--  扫描业务代码  -->
    <context:component-scan base-package="com.chen"/>
​
    <!-- 配置视图解析器   -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>
​
</beans>

7、创建数据库表并输入测试数据

8、编写实体类dao与数据表做ORM映射

public class Customer {
    private Integer id;
    private String name;
    private Integer age;
​
    @Override
    public String toString() {
        return "Customer{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
​
    public void setId(Integer id) {
        this.id = id;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public void setAge(Integer age) {
        this.age = age;
    }
​
    public Integer getId() {
        return id;
    }
​
    public String getName() {
        return name;
    }
​
    public Integer getAge() {
        return age;
    }
}

9、编写mapping.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.chen.repository.CustomerRepository">
    <select id="findAll" resultType="Customer">
        select * from customer;
    </select>
</mapper>

10、编写mapper文件与mapping做映射

public interface CustomerRepository {
    public List<Customer> findAll();
}

11、编写服务类接口,方便管理

public interface CustomerService {
    public List<Customer> findAll();
}

12、编写服务类接口实现类

@Service
public class CustomerServiceImpl implements CustomerService {
    @Autowired
    private CustomerRepository customerRepository;
​
    @Override
    public List<Customer> findAll() {
        return customerRepository.findAll();
    }
}

13、编写Controller,映射请求

@Controller
@RequestMapping("/customer")
public class CustomerHandler {
    @Autowired
    private CustomerService customerService;
​
    @RequestMapping("/findAll")
    public ModelAndView  findAll(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("showMessage");
        modelAndView.addObject("list",customerService.findAll());
        System.out.println(customerService.findAll());
        return modelAndView;
    }
}

14、编写结果展示页面showMessage.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
   <c:forEach items="${list}" var="customer">
       ${customer.id}-----${customer.name}--------${customer.age}<br>
   </c:forEach>
</body>
</html>

15、将项目部署到tomcat上去

 

 

 

16、启动Tomcat,访问http://localhost:8080/SSMProject_war/customer/findAll

也可以在部署项目的时候修改项目的根路径

 

重启Tomcat服务器,访问地址http://localhost:8080/SSMProject_war/customer/findAll改为http://localhost:8080/customer/findAll

三、启动服务器运行时可能出现的问题

1、mapper接口与mapping.xml配置文件无效绑定问题。

使用maven或Jenkins打包部署到远程服务器上时出现的绑定错误,异常信息为: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

首先,给定的异常提示信息并不精准,有多个错误原因都会抛出该异常。mybatis出现这个问题,通常是由Mapper interface和对应的xml文件的定义对应不上引起的,这时就需要仔细检查对比包名、xml中的namespace、接口中的方法名称等是否对应。

我之前就因为称忘记在xml标签的id属性中添加方法名或写错方法名而出现这个错误。

出现这个错误时,按以下步骤检查一般就会解决问题: 1:检查xml文件所在package名称是否和Mapper interface所在的包名一一对应; 2:检查xml的namespace是否和xml文件的package名称一一对应; 3:检查方法名称是否对应; 通过使用maven构建项目,并将项目war包部署到Tomcat时里面缺少Mapper对应的xml文件,也就是没有把xml文件打包进去。解决办法是,在pom.xml文件中的build标签中添加如下代码,显示的强制将xml文件打到war包中:

<resources>
  <resource>
    <directory>src/main/java</directory>
    <includes>
      <include>**/*.xml</include>
    </includes>
    <filtering>true</filtering>
  </resource>
</resources>

2、解决无法获取数据库连接 java.sql.SQLException: Connections could not be acquired from the underlying database

由于使用的mysql是5.6.24版本,而在pom.xml中配置的是版本是8.0.11,导致驱动版本与mysql版本不一致出现无法获取sql的底层连接

修改驱动版本为当前MySQL版本以下即可解决

<!-- Mysql驱动 -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <!-- <version>8.0.11</version>-->
  <!--注意要与当前mysql版本对应:当前使用mysql版本为5.6.24,使用8.0.11版本驱动导致报错(无法从底层数据库获取连接)
  修改为5.1.49版本或以下版本即可解决问题-->
  <version>5.1.49</version>
</dependency>

但是此时要注意修改spring.xml中的数据库驱动信息

<!--数据库驱动-->
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
<!--MySQL驱动版本6.0以下使用-->
<!--<property name="driverClass" value="com.mysql.jdbc.Driver"/>-->

MySQL6之后的版本都是要指定时区serverTimezone的

spring: datasource: driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.0.100:3306/easyexcel?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false username: root password: 123456

3、控制台输出的SQL语句出现中文乱码

首先修改IDEA的编码格式为UTF-8

其次修改Tomcat的参数编码格式为UTF-8:-Dfile.encoding=UTF-8

然后重启Tomcat即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值