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日志



阿里数据源监控页面







  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Java EE互联网轻量级框架整合开发的其中一种方式是使用SSM框架Spring MVCSpringMyBatis)和Redis。 首先,SSM框架是一种非常流行的互联网开发框架,它结合了Spring MVCSpringMyBatis的优势。Spring MVC提供了MVC模式的实现,可以帮助我们构建灵活、可扩展的Web应用程序;Spring是一个轻量级的IOC(Inversion of Control)容器,并提供了丰富的企业级功能,如事务管理、安全性等;而MyBatis是一个简单易用的持久层框架,提供了ORM(Object Relational Mapping)和数据库访问的功能。 其次,Redis是一种开源的内存数据库,也是一种缓存数据库。它支持多种数据结构,如字符串、列表、哈希、集合等,以及一些高级功能,如发布/订阅、事务等。Redis的高速读写能力和丰富的功能使其成为互联网应用中常用的缓存数据库。在SSM框架中,我们可以使用Redis来缓存数据库查询结果、session数据等,以提高系统的读写性能和响应速度。 在整合开发中,SSM框架通常会负责处理用户请求和返回响应,通过Spring的IOC容器来管理和注入依赖的对象,而MyBatis则负责与数据库进行交互。我们可以通过配置文件来整合SSM框架和Redis,让它们协同工作。例如,我们可以在Spring的配置文件中配置MyBatis数据源和Mapper接口,以及Redis的连接池和缓存配置;在Spring MVC的配置文件中配置控制器、视图解析器和拦截器等;同时,我们还可以使用Redis的API来进行缓存数据的读写操作。 总之,通过整合SSM框架和Redis,我们可以充分发挥它们各自的优势,构建高性能、可扩展的互联网应用程序。这种整合开发方式可以帮助我们简化开发流程、提高开发效率,并提供更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值