zoukankan      html  css  js  c++  java
  • Idea 搭建 SSM 项目框架

    引言

      在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般会选择使用Struts2、SpringMVC、Spring、Hibernate、MyBatis这些开源框架来开发项目。

      本文来总结一下如何使用Maven搭建Spring+SpringMVC+MyBatis的整合开发环境。

    创建Maven工程

      根据下图,一步步操作设定,填写GroupId、ArtifactId;创建完成后,Maven install 进行编译发布。

      完成的项目结构,如下图所示

    在pom.xml引入相关依赖包

      为了方便后面说的时候不需要引入JAR包,这里直接给出所有的jar包。

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>4.0.2.RELEASE</spring.version>
        <mybatis.version>3.2.6</mybatis.version>
        <slf4j.version>1.7.7</slf4j.version>
        <log4j.version>1.2.17</log4j.version>
      </properties>
    
      <dependencies>
        <!--  Spring核心包  -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</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-oxm</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-webmvc</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aop</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-jdbc</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <!--  mybatis核心包  -->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>${mybatis.version}</version>
        </dependency>
        <!--  mybatis/spring包  -->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis-spring</artifactId>
          <version>1.2.2</version>
        </dependency>
        <dependency>
          <groupId>javax</groupId>
          <artifactId>javaee-api</artifactId>
          <version>7.0</version>
        </dependency>
        <!--  mysql  -->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.30</version>
        </dependency>
        <!--  dbcp连接池  -->
        <dependency>
          <groupId>commons-dbcp</groupId>
          <artifactId>commons-dbcp</artifactId>
          <version>1.2.2</version>
        </dependency>
        <!--  JSTL标签类  -->
        <dependency>
          <groupId>jstl</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
        </dependency>
        <!--  日志文件管理  -->
        <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>
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.1.23</version>
        </dependency>
        <dependency>
          <groupId>org.codehaus.jackson</groupId>
          <artifactId>jackson-mapper-asl</artifactId>
          <version>1.9.13</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>2.1.0</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.1.0</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-annotations</artifactId>
          <version>2.1.0</version>
        </dependency>
        <!--  上传组件包  -->
        <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
          <version>1.3.1</version>
        </dependency>
        <dependency>
          <groupId>commons-io</groupId>
          <artifactId>commons-io</artifactId>
          <version>2.4</version>
        </dependency>
        <dependency>
          <groupId>commons-codec</groupId>
          <artifactId>commons-codec</artifactId>
          <version>1.9</version>
        </dependency>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    View Code

    Spring与MyBatis项目整合

    添加JDBC配置文件

      在src/main/resources目录下创建一个jdbc.properties文件,用于连接数据库。

    driverClassName=com.mysql.jdbc.Driver
    jdbc_url=jdbc:mysql://*******:3306/ElimSign?useUnicode=true
    jdbc_username=*******
    jdbc_password=********
    maxActive=20
    maxIdle=20
    minIdle=1
    maxWait=60000

    建立spring-mybatis.xml配置文件

      在src/main/resources目录下创建一个spring-mybatis.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:context="http://www.springframework.org/schema/context"
           xmlns:tx="http://www.springframework.org/schema/tx"
           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">
        <!--自动扫描-->
        <context:component-scan base-package="com.service" />
        <!--  引入配置文件  -->
        <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
            <property name="location" value="classpath:jdbc.properties" />
        </bean>
    
        <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName" value="${driverClassName}" />
            <property name="url" value="${jdbc_url}" />
            <property name="username" value="${jdbc_username}" />
            <property name="password" value="${jdbc_password}" />
            <property name="maxWait" value="${maxWait}" />
            <property name="minIdle" value="${minIdle}" />
            <property name="maxIdle" value="${maxIdle}" />
            <property name="maxActive" value="${maxActive}" />
        </bean>
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
        </bean>
    
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" >
            <property name="basePackage" value="com.dao" />
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
        </bean>
    
        <!--  事务管理  -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
            <property name="dataSource" ref="dataSource" />
        </bean>
    
        <!--  配置基于注解的声明式事务  -->
        <tx:annotation-driven  transaction-manager="transactionManager" />
    </beans>
    View Code

    配置log4j日志文件

      在src/main/resources目录下创建一个log4j.properties文件,用于整合项目,如图所示:

    # 日志输出目的地
    log4j.appender.Console=org.apache.log4j.ConsoleAppender
    log4j.appender.Console.Target=System.out
    log4j.appender.Console.layout=org.apache.log4j.PatternLayout
    log4j.appender.Console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
    
    # 日志输出级别
    log4j.rootLogger=info, Console
    log4j.additivity=false
    
    # 文件大小达到指定尺寸的时候产生一个新的文件
    log4j.appender.File = org.apache.log4j.RollingCalendar
    # 指定输出目录
    log4j.appender.File.File = logs/ssm.log
    # 定义文件最大大小
    log4j.appender.File.MaxFileSize = 10MB
    # 输出日志
    log4j.appender.File.Threshold = DEBUG
    log4j.appender.File.layout = org.apache.log4j.PatternLayout
    log4j.appender.File.layout.ConversionPattern = [%p] [%d{yyyy-MM-dd HH:mm:ss}][%c]%m%n
    

    项目框架构建

      在配置完所有文件之后,则在src/main/java下创建相应的业务逻辑文件(包含对象信息类、dao文件、业务逻辑实现类等),具体如下图所示,以及对应代码信息(同时展现数据库中对应表结构与数据信息)。

    package com.model;
    
    import java.util.Date;
    
    /**
     * 团契信息类
     * JaminHuang   2019年6月19日 13:36:43
     */
    public class Church {
    
        /**
         * 团契标识
         */
        private String ChurchId;
        /**
         * 团契名称
         */
        private String ChurchName;
        /**
         * Logo地址
         */
        private String Logo;
        /**
         * 最后更新时间
         */
        private Date UpdateTime;
    
        public Church() {}
    
        public Church(String churchId, String ChurchName, String logo) {
            this.ChurchId = churchId;
            this.ChurchName = ChurchName;
            this.Logo = logo;
            this.UpdateTime = new Date();
        }
    
        public String getChurchId() {
            return ChurchId;
        }
    
        public void setChurchId(String churchId) {
            ChurchId = churchId;
        }
    
        public String getChurchName() {
            return ChurchName;
        }
    
        public void setChurchName(String churChName) {
            ChurchName = churChName;
        }
    
        public String getLogo() {
            return Logo;
        }
    
        public void setLogo(String logo) {
            Logo = logo;
        }
    
        public Date getUpdateTime() {
            return UpdateTime;
        }
    
        public void setUpdateTime(Date updateTime) {
            UpdateTime = updateTime;
        }
    }
    Church
    package com.dao;
    
    import com.model.Church;
    import org.apache.ibatis.annotations.Insert;
    import org.apache.ibatis.annotations.Select;
    import org.mybatis.spring.annotation.MapperScan;
    
    import java.util.List;
    
    @MapperScan
    public interface IChurchDao {
    
        /**
         * 添加团契信息
         * @param church 团契信息
         */
        @Insert("INSERT INTO Church(ChurchId, ChurchName, Logo, UpdateTime) VALUES(#{churchId},#{churchName},#{logo},#{updateTime})")
        void add(Church church);
    
        /**
         * 获取指定团契信息
         * @param churchId 团契标识
         * @return 团契对象
         */
        @Select("SELECT * FROM Church WHERE ChurchId = #{churchId}")
        Church get(String churchId);
    
        /**
         * 获取团契列表
         * @return 团契列表
         */
        @Select("SELECT * FROM Church")
        List<Church> list();
    }
    IChurchDao
    package com.service;
    
    import com.model.Church;
    
    import java.util.List;
    
    public interface IChurchService {
        /**
         * 添加团契信息
         * @param church 团契信息
         */
        void add(Church church);
    
        /**
         * 获取指定团契信息
         * @param churchId 团契标识
         * @return 团契对象
         */
        Church get(String churchId);
    
        /**
         * 获取团契列表
         * @return 团契列表
         */
        List<Church> list();
    }
    IChurchService
    package com.service.impl;
    
    import com.dao.IChurchDao;
    import com.model.Church;
    import com.service.IChurchService;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.Resource;
    import java.util.List;
    
    @Service("churchService")
    public class ChurchServiceImpl implements IChurchService {
    
        @Resource
        private IChurchDao churchDao;
    
        public void add(Church church) {
            churchDao.add(church);
        }
    
        public Church get(String churchId) {
            return churchDao.get(churchId);
        }
    
        public List<Church> list() {
            return churchDao.list();
        }
    }
    ChurchServiceImpl

     测试

      至此,spring+mybatis构建完成;创建dao测试类,进行测试。

    package com.test;
    
    import com.alibaba.fastjson.JSON;
    import com.dao.IChurchDao;
    import com.model.Church;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    import java.util.List;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration({"classpath:spring-mybatis.xml"})
    public class IChurchDaoTest {
    
        @Autowired
        private IChurchDao churchDao;
    
        @Test
        public void testGetChurch() {
            String churchId = "4455ba6a12f26e08";
            Church church = churchDao.get(churchId);
            System.out.println(JSON.toJSON(church));
        }
    
        @Test
        public void testListChurch() {
            List<Church> list = churchDao.list();
            System.out.println(JSON.toJSON(list));
        }
    }
    

    整合SpringMVC

      上述,完成了2大框架的搭建,springmvc的配置文件spring-mvc.xml单独放置,再由web.xml进行整合。

    配置spring-mvc.xml

      在src/main/resources目录下创建一个spring-mvc.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:context="http://www.springframework.org/schema/context"
           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">
    
        <!-- 扫描web相关的bean -->
        <context:component-scan base-package="com.controller"/>
    
        <!--  避免IE执行AJAX时,返回JSON出现下载文件  -->
        <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="supportedMediaTypes">
                <list>
                    <value>text/html;charset=UTF-8</value>
                </list>
            </property>
        </bean>
    
        <!-- 开启SpringMVC注解模式,完成请求和注解POJO的映射 -->
        <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
            <property name="messageConverters">
                <list>
                    <ref bean="mappingJacksonHttpMessageConverter" />
                </list>
            </property>
        </bean>
    
        <!-- 配置jsp -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/pages/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="defaultEncoding" value="UTF-8" />
            <property name="maxUploadSize" value="10485760000" />
            <property name="maxInMemorySize" value="40960" />
        </bean>
    </beans>

    配置web.xml文件

    <!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 xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
      <display-name>Archetype Created Web Application</display-name>
      <!-- Spring和mybatis的配置文件 -->
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mybatis.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-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    
      <!-- Spring监听器 -->
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      <!--防止内存溢出监听器  -->
      <listener>
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
      </listener>
    
      <!-- 配置DispatcherServlet -->
      <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>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    
      <welcome-file-list>
        <welcome-file>/index.jsp</welcome-file>
      </welcome-file-list>
    
    </web-app>
    

    测试

      1. 新建jsp文件

    <%@ page import="java.util.*" language="java" pageEncoding="UTF-8" %>
    <html>
    <head>
        <title>团契信息</title>
    </head>
    <body>
    这里是内容!
    ${church.churchName}
    </body>
    </html>
    

      2. 创建Controller控制器

    package com.controller;
    
    import com.model.Church;
    import com.service.IChurchService;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import javax.annotation.Resource;
    import javax.servlet.http.HttpServletRequest;
    
    @Controller
    @RequestMapping("/church")
    public class ChurchController {
    
        @Resource
        private IChurchService churchService;
    
        @RequestMapping("/get")
        public String getChurch(HttpServletRequest request, Model model) {
            String churchId = request.getParameter("id");
            Church church = churchService.get(churchId);
            model.addAttribute("church", church);
            return "info";
        }
    }
    

      3. 部署项目,在浏览器中输入地址:http://localhost:8080/church/get?id=4455ba6a12f26e08

      至此,SSM三大框架基本完成,可以在此基础上继续添加相应功能。

  • 相关阅读:
    【jQuery 分页】jQuery分页功能的实现
    【jQuery 使用】 利用jQuery.prop("outerHTML")获取包含自身在内的HTML元素的HTML代码
    Openfire 是怎么存离线消息
    openfire过滤脏话插件,控制消息是否发送
    openfire升级指南
    openfire教程网
    redis web 客户端工具 redis-admin
    敏捷开发Nutz
    openfire消息通知推送
    一步步教你实现跨游览器的颜色选择器
  • 原文地址:https://www.cnblogs.com/huanghzm/p/11284476.html
Copyright © 2011-2022 走看看