前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SSM项目搭建

SSM项目搭建

原创
作者头像
逆回十六夜
修改2020-03-10 14:21:51
5380
修改2020-03-10 14:21:51
举报

SSM总览图

其他结构图,参考https://blog.csdn.net/zhuangxingzan/article/details/90598439

Maven工程配置pom.xml

<?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>org.mpss</groupId>
  <artifactId>sysMPSS</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>sysMPSS Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <spring.version>5.2.3.RELEASE</spring.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>compile</scope>
    </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-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</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-context-indexer</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--spring core end-->

    <!--spring aop start-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--spirng aop end-->

    <!--spring aspects start-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--spring aspects end-->

    <!--spring instrumentation start -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-instrument</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--spring instrumentation end-->

    <!--spring messaging start -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-messaging</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--spring messaging end-->

    <!--spring data access start -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</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-oxm</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jms</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--spring data access end-->

    <!--spring web start -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-websocket</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-webflux</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--spring web end -->

    <!--spring test start -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!--mybatis-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.13</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.4</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.2</version>
    </dependency>

    <!-- c3p0 -->
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.4</version>
    </dependency>

    <!--jstl-->
    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>javax.servlet.jsp.jstl-api</artifactId>
      <version>1.2.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.taglibs</groupId>
      <artifactId>taglibs-standard-impl</artifactId>
      <version>1.2.5</version>
    </dependency>

  </dependencies>

  <build>
    <resources>
      <resource>
        <!--是这些文件夹中的xml文件能被使用-->
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.xml</include>
        </includes>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>*.xml</include>
          <include>*.properties</include>
        </includes>
      </resource>
    </resources>
    <finalName>sysMPSS</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

Web.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<!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>

  <!--解决中文乱码问题过滤器-->
  <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>


  <!--配置spring的监听器,默认只加载WEB_INF下的applicationContext.xml文件-->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!--设置配置文件的路径-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>


  <!--启动服务器加载dispatcherservlet,然后根据param加载springmvc.xml的配置文件-->
  <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-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern><!--会截取任何的请求-->
  </servlet-mapping>


  <welcome-file-list>
    <welcome-file>entry.jsp</welcome-file>
  </welcome-file-list>


</web-app>

Spring的配置(applicationContext.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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd
        ">
<!--如果在具体的实现类中没有@Service的注解,则bean必须在下方注册-->
<!--    <bean id="userService" class="pri.mpss.service.impliment.UserServiceImpl"></bean>-->

    <!--开启注解扫描,希望处理service和dao,controller不需要spring框架去处理-->
    <context:component-scan base-package="pri.mpss">
        <!--配置那些注解不扫描-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>


    <!--Spring整合mybatis框架-->
    <!--配置连接池-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/eazynotedb?serverTimezone=Asia/Shanghai&amp;useSSL=false"/>
        <property name="user" value="root"/>
        <property name="password" value="nicai"/>
    </bean>
    <!--配置SqlSessionFactory工厂-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入连接池-->
        <property name="dataSource" ref="dataSource"/>
        <!--配置mapper-->
        <property name="mapperLocations" value="classpath*:mapper/**/*.xml" />
    </bean>

<!--    <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">-->
<!--        <property name="mapperInterface" value="pri.mpss.dao.UserDao"/>-->
<!--        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>-->
<!--    </bean>-->

    <mybatis:scan base-package="pri.mpss.dao" />
    <!--配置dao所在包的扫描,做了这个就不需要上面的具体配置了-->
    <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="pri.mpss.dao"/>
    </bean>
    <!--配置spring框架的声明式的事务管理-->
    <!--配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--配置事务通知-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="find*" read-only="true"/>
            <tx:method name="*" isolation="DEFAULT"/>
        </tx:attributes>
    </tx:advice>
    <!--配置AOP增强-->
    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* pri.mpss.service.impliment.*ServiceImpl.*(..))"/>
    </aop:config>
</beans>

SpringMVC的配置

<?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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--开启注解扫描-->
    <!--在该配置文件被加载的时候注解扫描生效,从而加入注解的类被解析生效-->
    <!--现有需求,只希望扫描service和dao,controller不需要spring框架去处理-->
    <context:component-scan base-package="pri.mpss">
        <!--配置那些文件不被扫描-->
<!--        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>-->
    </context:component-scan>

    <!--配置视图解析器对象-->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--跳转功能由此开启,下面用来配置跳转页面所在的文件夹-->
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--开启SpringMVC注释的支持-->
    <mvc:annotation-driven />
</beans>

MyBatis的配置

mybatis已经被在spring的配置中整合了,不过以下给出mybatis的单独配置流程

Mybatis.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>
    <!--配置mybatis的运行环境-->
    <environments default="development">
        <environment id="development">
            <!--使用jdbc事务管理 -->
            <transactionManager type="JDBC"/>
            <!-- 数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/eazynotedb?serverTimezone=Asia/Shanghai&amp;useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="nicai"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 引入映射配置文件 -->
    <mappers>
        <mapper resource="pri/mpss/mapper/userMapper.xml"/>
    </mappers>

</configuration>

测试连接

package test.mybatis;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import pri.mpss.dao.UserDao;
import pri.mpss.domain.User;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;


public class Test2 {
    @Test
    public void run1() throws IOException {
        //加载mybatis配置文件
        InputStream inputStream = test.mybatis.Test.class.getClassLoader().getResourceAsStream("mybatis.xml");
        //根据配置文件创建工厂对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory= sqlSessionFactoryBuilder.build(inputStream);
        //创建SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取到代理对象
        UserDao dao = sqlSession.getMapper(UserDao.class);
        //查询所有数据
        List<User> list = dao.findAll();
        for(User user:list){
            System.out.println(user.getName()+" "+user.getAccount()+" "+user.getPassword());
        }
        sqlSession.close();
        inputStream.close();
    }
}

整合后Mybatis的阶段性认识

遇到的一个错误

Parameter XXX not found.Available parameters are [XXX...]

这个错误是在单步调试的过程中才找到报错原因的,解决问题耗费了我一天的时间。

1.这个错误肯定是MapperFactoryBean的接口中参数和Mapper.xml的代码之间出现的问题

2.这个错误很容易引起数据类型的错误(排查中发现,但不是报错原因)

3.这个错误与版本有关系

解决后的代码:

MapperFactoryBean:UserDao.java

package pri.mpss.dao;
import pri.mpss.domain.User;

import java.util.List;

public interface UserDao {
    //插入账户
    public void addUser(User user);
    //删除账户
    public void delUser(User user);
    //更改账户,只能改密码和名字
    public void updateUser(User user);
    //查询账户
    public List<User> findByName(User user);
    public List<User> findByAccount(User user);
    //查询所有账户
    public List<User> findAll();
    public List<User> findAllUsers(int startPage,int endPage);
}

Mapper.xml:UserMapper.xml

<select id="findAllUsers" resultType="pri.mpss.domain.User">
    select user.name,user.account,user.password,user.authority FROM mpssdb.user limit #{param1},#{param2}
</select>

发现的问题

1.用@Param("startPage")String startPage,@Param("endPage")String endPage定义的参数不起作用,在Mapper.xml文件中无法使用,并且报错Parameter "start" not found.Available parameters are [startPage,endPage,param1,param2]

可见start是我一开始定义的名字,但是已经没有start了,在此居然还会显示,很疑惑,可能是缓存或者项目未清理所致,但是startPage,和endPage是确确实实的找到了,定义了#{startPage},#{endPage}但就是无法使用。那只能说明从实践上是不能这么用的了。

2.sql Syntax error:Sql语句写错,这个比较好查,我的startPage,和endPage是字符串,jdbcType=varchar,在mybatis构建sql语句的时候会加'',这直接导致了分页查询的sql语句错误。

3.最终,我根据报错的提示,直接将参数改为param1,param2,然后将数据类型改为int,问题成功解决。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SSM总览图
  • Maven工程配置pom.xml
  • Web.xml的配置
  • Spring的配置(applicationContext.xml)
  • SpringMVC的配置
  • MyBatis的配置
    • Mybatis.xml
      • 测试连接
        • 整合后Mybatis的阶段性认识
          • 遇到的一个错误
            • 解决后的代码:
            • 发现的问题
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档