搭建SSM框架

 

1.1.   创建Maven Web项目

v  建Maven Web项目

v  生成项目的web.xml配置文件

2.1.   整合Spring MVC

v 添加Spring MVC依赖

<dependency>

     <groupId>org.springframework</groupId>

     <artifactId>spring-webmvc</artifactId>

     <version>4.3.9.RELEASE</version>

</dependency>

 

v 配置Spring MVC核心控制器

<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:spring-*.xml</param-value>

    </init-param>

    <load-on-startup>1</load-on-startup>

  </servlet>

  <servlet-mapping>

    <servlet-name>dispatcherServlet</servlet-name>

    <url-pattern>*.do</url-pattern>

  </servlet-mapping>

 

v 添加spring-mvc配置文件

<beans default-lazy-init="true"

    xmlns="http://www.springframework.org/schema/beans"

    xmlns:p="http://www.springframework.org/schema/p"

    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"

    xmlns:mvc="http://www.springframework.org/schema/mvc"

    xsi:schemaLocation=

       http://www.springframework.org/schema/beans  

       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd 

       http://www.springframework.org/schema/mvc  

       http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd  

       http://www.springframework.org/schema/tx  

       http://www.springframework.org/schema/tx/spring-tx-4.3.xsd  

       http://www.springframework.org/schema/context 

       http://www.springframework.org/schema/context/spring-context-4.3.xsd"

</beans>

 

Spring mvc 配置

 <!-- 自动扫描该包 -->

    <context:component-scan base-package="cn.com" />

    <!-- springMVC数据转化与格式化 -->

    <mvc:annotation-driven conversion-service="conversionService" />

    <bean id="conversionService"

        class="org.springframework.format.support.FormattingConversionServiceFactoryBean">

    </bean>

    <!-- 对静态资源的访问由HandlerMapping转到DefaultServletHttpRequestHandler处理并返回 -->

    <mvc:default-servlet-handler />

    <!-- 定义跳转的文件的前后缀 ,视图模式配置 -->

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <!-- 自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->

        <property name="prefix" value="/WEB-INF/pages/" />

        <property name="suffix" value=".jsp"></property>

    </bean>  

 

v 测试

编写分销商控制器,验证MVC环境

@Controller

@RequestMapping("/distributor")

public class DistributorController {

    @RequestMapping("/listUI")

    public String listUI(){

        System.out.println("listUI()");

        return "distributor/distributor_list";

    }

}

2.3.   整合DRUID连接池对象

v 添加DRUID依赖

添加mysql驱动依赖(不要选5.1.6版本)

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.40</version>

</dependency>

 

添加druid依赖

<dependency>

  <groupId>com.alibaba</groupId>

  <artifactId>druid</artifactId>

  <version>1.0.23</version>

</dependency>

 

v 添加jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql:///test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=true

jdbc.username=root

jdbc.password=root

jdbc.initialSize=5

jdbc.maxActive=50

jdbc.minIdle=0

jdbc.maxWait=60000

jdbc.druid.filters=

jdbc.timeBetweenLogStatsMillis=60000

 

v 添加spring-pool.xml 配置DRUID

加载properties文件

<!--加载 config 配置文件 -->

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

        <property name="locations">

            <list>

                <value>classpath:jdbc.properties</value>

            </list>

        </property>

</bean>

 

配置DRUID的过滤监控功能

<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter" lazy-init="true">

<description>状态过滤器</description>

<!-- 通过slowSqlMillis用来配置SQL慢的标准 -->

<property name="slowSqlMillis" value="3000" />

<!-- 以日志形式输出执行效率慢的SQL -->

<property name="logSlowSql" value="true" />

<!-- 通过mergeSql属性,合并SQL -->

<property name="mergeSql" value="true" />

</bean>

配置DRUID数据源

<!--配置DruidDataSource连接池 -->

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"

        destroy-method="close" init-method="init" lazy-init="true">

        <property name="driverClassName" value="${jdbc.driver}" />

        <property name="url" value="${jdbc.url}" />

        <property name="username" value="${jdbc.username}" />

        <property name="password" value="${jdbc.password}" />

        <!-- 初始化连接大小 -->

        <property name="initialSize" value="${jdbc.initialSize}" />

        <!-- 连接池最大数量 -->

        <property name="maxActive" value="${jdbc.maxActive}" />

        <!-- 连接池最小空闲 -->

        <property name="minIdle" value="${jdbc.minIdle}" />

        <!-- 获取连接最大等待时间 -->

        <property name="maxWait" value="${jdbc.maxWait}" />

        <!--配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。 -->

        <property name="useUnfairLock" value="true" />

        <property name="defaultReadOnly" value="false" />

       

        <!-- 通过配置StatFilter,打开监控台统计功能 -->

        <property name="proxyFilters">

            <list>

                <ref bean="stat-filter" />

            </list>

        </property>

        <property name="filters" value="${jdbc.druid.filters}" />

        <!--<property name="connectionProperties" value="password=${username}"/>-->

       

        <property name="testWhileIdle" value="true" />

        <property name="testOnBorrow" value="false" />

        <property name="testOnReturn" value="false" />

        <property name="validationQuery" value="SELECT 1 from DUAL" />

        <property name="timeBetweenLogStatsMillis" value="${jdbc.timeBetweenLogStatsMillis}" />

</bean>

 

v Web.xml中配置监控功能(了解,先不用配置)

<servlet>

    <servlet-name>DruidStatView</servlet-name>

    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>

    <init-param>

      <param-name>exclusions</param-name>

      <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>

    </init-param>

    <init-param>

      <param-name>resetEnable</param-name>

      <param-value>true</param-value>

    </init-param>

    <init-param>

      <param-name>loginUsername</param-name>

      <param-value>druid</param-value>

    </init-param>

    <init-param>

      <param-name>loginPassword</param-name>

      <param-value>druid</param-value>

    </init-param>

  </servlet>

  <servlet-mapping>

    <servlet-name>DruidStatView</servlet-name>

    <url-pattern>/druid/*</url-pattern>

  </servlet-mapping>

根据配置中的url-pattern来访问内置监控页面,如果是上面的配置,内置监控页面的首页是/druid/index.html,

 

例如http://localhost:8080/tpms-distributor-01/druid/login.html

 

 

v 编写连接池单元测试

添加Junit依赖

<dependency>

  <groupId>junit</groupId>

  <artifactId>junit</artifactId>

  <version>4.12</version>

</dependency>

 

编写测试类

@Test

public void testPool() {

ApplicationContext ctx=

new ClassPathXmlApplicationContext("spring-pool.xml");

DruidDataSource dataSource=(DruidDataSource)ctx.getBean("dataSource");

System.out.println(dataSource);

Assert.assertNotEquals(dataSource, null);

}

 

2.4.   整合MyBatis框架

v 添加MyBatis依赖

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis-spring</artifactId>

<version>1.3.1</version>

</dependency>

 

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.2.8</version>

</dependency>

 

在比较新的版本中通常还需要如下两个依赖

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-tx</artifactId>

<version>4.3.9.RELEASE</version>

</dependency>

 

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>4.3.9.RELEASE</version>

</dependency>

 

 

v 添加spring-mybatis 配置文件,并添加如下内容

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

       <property name="dataSource" ref="dataSource" />

       <!-- 自动扫描mapping.xml文件 -->

       <property name="mapperLocations" >

            <list><value>classpath:mapper/*.xml</value></list>

        </property>

    </bean>

    <!-- Mapper接口所在包,Spring会自动查找其下的Mapper -->

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

        <property name="basePackage" value="cn.tedu.**.dao "/>

    </bean>

 

v 编写单元测试

@Test

public void testSessionFactory() {

        ApplicationContext ctx=

        new ClassPathXmlApplicationContext("spring-mvc.xml","spring-pool.xml","spring-mybatis.xml");   

        Object sessionFactory=ctx.getBean("sqlSessionFactory");

        System.out.println(sessionFactory);

        Assert.assertNotEquals(sessionFactory, null);

}

 

1.1.   整合Log4J输出

目的是实现mybati SQL日志的输出便于调试跟踪(扩展实现)

v 添加log4J依赖:

<dependency>

  <groupId>org.apache.logging.log4j</groupId>

  <artifactId>log4j-core</artifactId>

  <version>2.7</version>

</dependency>

 

v 添加配置文件(log4j2.xml):了解不需要掌握

<?xml version="1.0" encoding="UTF-8"?>

<configuration status="off">

    <appenders>

        <!--这个输出控制台的配置-->

        <Console name="Console" target="SYSTEM_OUT">

            <!-- <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>

            <PatternLayout pattern="%d{dd MMM yyyy HH\:mm\:ss.SSS} [%p] [%t] [%c] %m%n" /> -->

            <!--  %p 输出优先级; %t 输出产生该日志事件的线程名;%c 输出所属的类目,通常就是所在类的全名;%m 输出代码中       指定的消息;%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”。 -->

            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />

        </Console>

        <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->

        <RollingFile name="RollingFile" fileName="logs/TraceLog.log"

filePattern="logs/$${date:yyyy-MM}/log-%d{MM-dd-yyyy}-%i.log.gz">

            <PatternLayout pattern="%d{dd MMM yyyy HH\:mm\:ss.SSS} [%p] [%t] [%c] %m%n"/>

            <SizeBasedTriggeringPolicy size="50MB"/>

        </RollingFile>

    </appenders>

    <loggers>

        <root level="debug">

            <appender-ref ref="Console" />

            <!-- <appender-ref ref="RollingFile"/> --><!-- 写入到文件 -->

        </root>

    </loggers>

</configuration>

 

v 添加配置文件(mybatis-config.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>

    <settings>

        <!-- mybatis控制台LOG输出 -->

        <setting name="logImpl" value="LOG4J2" />

    </settings>

</configuration>

 

v 修改配置文件spring-mybatis.xml添加mybatis-config.xml的配置

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

        <property name="dataSource" ref="dataSource" />

        <property name="configLocation" value="classpath:mybatis-config.xml"></property>

        <!-- 自动扫描mapping.xml文件 -->

        <property name="mapperLocations">

            <list>

                <value>classpath:mapper/*.xml</value>

            </list>

        </property>

    </bean>

2.6.   整合JSON对象转换

v 添加Jackson依赖

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>2.8.5</version>

</dependency>

 

v 在需要返回JSON对象的方法上使用@ResponseBody注解,例如

@RequestMapping("/findObjects")

@ResponseBody

public JsonResult doFindObjects(Project entity,PageObject pageObject){

        Map<String,Object> map=projectService.findObjects(entity, pageObject);

        return new JsonResult(map);

}

 

posted @ 2018-03-09 15:05  久违的黎明  阅读(167)  评论(0编辑  收藏  举报