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

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.OracleDriver
db-url=jdbc:oracle:thin:@localhost:1521:orcl
db-username=pengl
db-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 table
create 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.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值