一、整合所需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日志
阿里数据源监控页面