SSM框架整合 spring3.2.9 + spring mvc3.2.9 + mybatis3.2.8 + Druid数据源 + log4j2

来源:互联网 发布:通联数据校园招聘 编辑:程序博客网 时间:2024/05/17 22:40

SSM框架整合 spring3.2.9 + spring mvc3.2.9 + mybatis3.2.8 + Druid数据源 + log4j2

作者:iverson3sod

一、整合所需jar包


二、项目目录结构


三、配置文件

1、springmvc的配置文件 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:p="http://www.springframework.org/schema/p"        xmlns:mvc="http://www.springframework.org/schema/mvc"        xmlns:context="http://www.springframework.org/schema/context"        xsi:schemaLocation="      http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd      http://www.springframework.org/schema/context      http://www.springframework.org/schema/context/spring-context-3.0.xsd      http://www.springframework.org/schema/mvc      http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">    <!-- 添加注解驱动 -->    <mvc:annotation-driven />    <!-- 默认扫描的包路径 -->      <context:component-scan base-package="com.malone"/>    <!-- 过滤静态文件的拦截   -->    <mvc:default-servlet-handler/>    <!-- 定义跳转的文件的前后缀 -->    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">          <property name="prefix" value="/" />          <property name="suffix" value=".jsp" />      </bean></beans>

2、spring整合mybatis配置文件applicationContext-comm.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:p="http://www.springframework.org/schema/p"        xmlns:mvc="http://www.springframework.org/schema/mvc"        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-3.0.xsd      http://www.springframework.org/schema/context      http://www.springframework.org/schema/context/spring-context-3.0.xsd      http://www.springframework.org/schema/mvc      http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd     http://www.springframework.org/schema/tx     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">    <!-- 引入jdbc.properties -->    <context:property-placeholder location="classpath*:jdbc.properties"/>    <!-- kaptcha v2.3.2 -->    <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">          <property name="config">              <bean class="com.google.code.kaptcha.util.Config">                  <constructor-arg>                      <props>                          <prop key="kaptcha.border">no</prop>                          <prop key="kaptcha.border.color">105,179,90</prop>                          <prop key="kaptcha.textproducer.font.color">black</prop>                          <prop key="kaptcha.image.width">250</prop>                          <prop key="kaptcha.textproducer.font.size">70</prop>                          <prop key="kaptcha.image.height">90</prop>                          <prop key="kaptcha.session.key">KAPTCHA_SESSION_KEY</prop>                        <prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.WaterRipple</prop>                        <prop key="kaptcha.textproducer.char.length">5</prop>                          <prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>                      </props>                  </constructor-arg>              </bean>          </property>      </bean>    <!-- 数据源  使用阿里Druid数据源  也可以用其它数据源 -->    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">        <property name="driverClassName" value="${db-driver}" />        <property name="url" value="${db-url}" />        <property name="username" value="${db-username}" />        <property name="password" value="${db-password}" />        <property name="maxActive" value="20" />          <property name="initialSize" value="1" />          <property name="maxWait" value="60000" />          <property name="minIdle" value="1" />          <property name="timeBetweenEvictionRunsMillis" value="3000" />          <property name="minEvictableIdleTimeMillis" value="300000" />          <property name="validationQuery" value="SELECT 'x' FROM DUAL" />          <property name="testWhileIdle" value="true" />          <property name="testOnBorrow" value="false" />          <property name="testOnReturn" value="false" />          <!-- mysql 不支持 poolPreparedStatements-->          <property name="poolPreparedStatements" value="true" />        <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />          <!-- 开启Druid的监控统计功能 -->          <property name="filters" value="stat" />      </bean>    <!-- Mybatis SqlSessionFactory -->    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">         <property name="configLocation" value="classpath:mybatis-config.xml"></property>         <property name="dataSource" ref="dataSource" />    </bean>    <!-- 事务管理 -->    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource"></property>    </bean>    <!-- 字段扫描类注解 -->      <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">          <property name="basePackage" value="com.malone" />      </bean>    <!-- 使用声明式 事务管理-->    <tx:annotation-driven transaction-manager="txManager" /></beans>


3、数据库连接参数配置 jdbc.properties

###数据库连接参数配置###db-driver=oracle.jdbc.driver.OracleDriverdb-url=jdbc:oracle:thin:@localhost:1521:orcldb-username=pengldb-password=tiger

4、mybatis配置mybatis-config.xml (仅用来引入sqlmap映射文件)

<?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>        <setting name="cacheEnabled" value="true" />        <!-- 指定日志框架为LOG4J2 -->        <setting name="logImpl" value="LOG4J2" />    </settings>    <mappers>        <!-- <mapper resource="com/malone/test/map/sqlmap-test.xml" />  -->    </mappers></configuration>

5、Log4j2配置文件

<?xml version="1.0" encoding="UTF-8"?><Configuration status="off" monitorInterval="10">    <properties>        <property name="LOG_HOME">logs</property>        <property name="FILE_NAME">malone</property>    </properties>    <Appenders>        <!-- 控制台日志输出 -->        <Console name="Console" target="SYSTEM_OUT">            <PatternLayout pattern="[%-5p] %d %c - %m%n" />        </Console>        <!-- 循环文件日志输出 -->        <RollingRandomAccessFile name="running-log"            fileName="${LOG_HOME}/${FILE_NAME}.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log.gz">            <PatternLayout                pattern="[%-5p] %d %c - %m%n" />            <Policies>                <TimeBasedTriggeringPolicy />                <SizeBasedTriggeringPolicy size="60 MB" />            </Policies>            <DefaultRolloverStrategy max="20" />        </RollingRandomAccessFile>    </Appenders>    <Loggers>        <Root level="debug">            <AppenderRef ref="Console" />            <AppenderRef ref="running-log" />        </Root>    </Loggers></Configuration>

6、最后 web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">    <display-name>通用后台管理系统</display-name>    <!-- 阿里数据源 BENGIN -->    <servlet>        <servlet-name>DruidStatView</servlet-name>        <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>DruidStatView</servlet-name>        <url-pattern>/druid/*</url-pattern>    </servlet-mapping>    <!-- 阿里数据源 END -->    <!-- spring3 mvc BEGIN -->    <servlet>        <servlet-name>springMVC</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>classpath*:/springMVC.xml,classpath*:/applicationContext-comm.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>    <!-- spring3 mvc END -->    <!-- Log4j2 BEGIN -->    <listener>        <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>    </listener>    <filter>        <filter-name>log4jServletFilter</filter-name>        <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>log4jServletFilter</filter-name>        <url-pattern>/*</url-pattern>        <dispatcher>REQUEST</dispatcher>        <dispatcher>FORWARD</dispatcher>        <dispatcher>INCLUDE</dispatcher>        <dispatcher>ERROR</dispatcher>    </filter-mapping>    <!-- Log4j2 END -->    <!-- Spring字符集过滤器  BENGIN-->    <filter>        <filter-name>SpringEncodingFilter</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>        <init-param>            <param-name>forceEncoding</param-name>            <param-value>true</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>SpringEncodingFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <!-- Spring字符集过滤器  END-->    <!-- 系统首页 -->    <welcome-file-list>        <welcome-file>index.jsp</welcome-file>    </welcome-file-list></web-app>

四、测试表建立

-- Create tablecreate table TS_TEST(  id   NUMBER,  name VARCHAR2(20),  age  NUMBER)

五、java代码

1、映射实体类

package com.malone.test.dto;import java.io.Serializable;public class TestVo implements Serializable{    /**     *      */    private static final long serialVersionUID = 1L;    private int id;    private String name;    private int age;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}

2、controller

package com.malone.test.control;import javax.servlet.http.HttpServletRequest;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import com.malone.test.domain.Test;import com.malone.test.dto.TestVo;@Controller@RequestMapping("/test")public class TestControl {    private Logger _logger = LogManager.getLogger();    @Autowired    @Qualifier("testImpl")    private Test test;    /**     * 测试     * @return     */    @RequestMapping(value = "/index")    public String index(@RequestParam String id, HttpServletRequest request){        _logger.info("进入Control... , 获取到参数:" + id);        TestVo testbean = test.selectUserById(Integer.parseInt(id));        request.setAttribute("testbean", testbean);        return "index";    }}

3、映射类

package com.malone.test.domain;import org.apache.ibatis.annotations.Select;import com.malone.test.dto.TestVo;public interface Test {    @Select("select * from ts_test where id = #{id}")  //这里可以直接用注解 , 也可以通过配置文件写 ,配置文件需要引入到mybatis-config.xml    public abstract TestVo selectUserById(int id);}

package com.malone.test.domain;import org.apache.ibatis.session.SqlSessionFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.malone.test.dto.TestVo;@Service("testImpl")public class TestImpl implements Test {    @Autowired    private SqlSessionFactory sessionFactory;    public TestVo selectUserById(int id) {        TestVo testbean = sessionFactory.openSession().selectOne("com.malone.test.domain.Test.selectUserById" ,id);        return testbean;    }}


4、mybatis映射文件 sqlmap-test.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.malone.test.domain.Test">    <select id="selectUserById" resultType="com.malone.test.dto.Ts_Test" parameterType="java.util.HashMap">        select * from ts_test where id = #{id}    </select></mapper>

5、jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">    <title>demo</title>    <meta http-equiv="pragma" content="no-cache">    <meta http-equiv="cache-control" content="no-cache">    <meta http-equiv="expires" content="0">        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">    <meta http-equiv="description" content="This is my page">    <!--    <link rel="stylesheet" type="text/css" href="styles.css">    -->  </head>  <body>    <h1>${testbean.id}</h1>    <h1>${testbean.name}</h1>    <h1>${testbean.age}</h1>  </body></html>


六、运行结果



Log4j2 日志 和 Mybatis sql日志



阿里数据源监控页面







        </div>        <div class="pinfortext">            <a href="http://blog.csdn.net/iverson3sod/article/details/45583031" target="_blank">查看原文&gt;&gt;</a>            <span>                <a href="javascript:void(0)" id="click_logo" title="喜欢">                    <span><i class="fa fa-heart-o" id="support_logo"></i></span>                    <em>1</em>                </a>            </span>        </div>        <div class="divcontent bordertop">            <span class="title">看过本文的人也看了:</span>            <ul class="clearfix">                    <li>                        <a class="yellow" href="http://lib.csdn.net/base/java/structure" target="_blank" title="Java 知识结构图">                            <i class="cirle"></i>                            Java 知识结构图                        </a>                    </li>                    <li>                        <div class="csdn-tracking-statistics" data-mod="popu_248_lib_13">                            <a basename="java" knid="244" contentid="3718" href="http://lib.csdn.net/article/java/3718" target="_blank" title="关于log4j2的重新加载,以及不同级别日志输出到不同日志文件">                                <i class="cirle"></i>                                关于log4j2的重新加载,以及不同级别日...                            </a>                        </div>                    </li>                    <li>                        <div class="csdn-tracking-statistics" data-mod="popu_248_lib_13">                            <a basename="java" knid="244" contentid="3978" href="http://lib.csdn.net/article/java/3978" target="_blank" title="log4j2使用笔记">                                <i class="cirle"></i>                                log4j2使用笔记                            </a>                        </div>                    </li>                    <li>                        <div class="csdn-tracking-statistics" data-mod="popu_248_lib_13">                            <a basename="java" knid="244" contentid="38138" href="http://lib.csdn.net/article/java/38138" target="_blank" title="Log4j2 JDBCAppender的使用">                                <i class="cirle"></i>                                Log4j2 JDBCAppender的使用                            </a>                        </div>                    </li>                    <li>                        <div class="csdn-tracking-statistics" data-mod="popu_248_lib_13">                            <a basename="java" knid="244" contentid="52354" href="http://lib.csdn.net/article/java/52354" target="_blank" title="slf4j绑定log4j2日志系统的过程(源码分析)">                                <i class="cirle"></i>                                slf4j绑定log4j2日志系统的过程(源码分...                            </a>                        </div>                    </li>                    <li>                        <div class="csdn-tracking-statistics" data-mod="popu_248_lib_13">                            <a basename="java" knid="244" contentid="7973" href="http://lib.csdn.net/article/java/7973" target="_blank" title="Log4j 2.x使用注意事项">                                <i class="cirle"></i>                                Log4j 2.x使用注意事项                            </a>                        </div>                    </li>            </ul>            <div class="clearfix">            </div>        </div>    </div>
0 0