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

一、整合所需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日誌



阿里數據源監控頁面







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章