Browse Source

aop demo提交

yuan 5 years ago
commit
78628ddd7c

+ 253 - 0
pom.xml

@@ -0,0 +1,253 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>com.demo</groupId>
+  <artifactId>aop</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
+  <packaging>war</packaging>
+  <name>aop Maven Webapp</name>
+<!--此处统一配置版本信息-->
+    <properties>
+        <!-- spring版本 -->
+        <springVersion>4.3.1.RELEASE</springVersion>
+        <!-- mybatis版本 -->
+        <mybatis.version>3.2.6</mybatis.version>
+        <!--<mysqlVersion>6.0.3</mysqlVersion>-->
+        <mysqlVersion>5.1.38</mysqlVersion>
+
+        <lombokVersion>1.16.10</lombokVersion>
+        <log4jVersion>1.2.17</log4jVersion>
+        <slf4jVersion>1.7.7</slf4jVersion>
+        <fileuploadVersion>1.3.1</fileuploadVersion>
+        <jstlVersion>1.2</jstlVersion>
+        <!--<taglibVersion>1.1.2</taglibVersion>-->
+        <!--<servletVersion>3.0-alpha-1</servletVersion>-->
+        
+        <jackson.version>2.8.5</jackson.version>
+
+	</properties>
+
+    <dependencies>
+        <dependency>
+          <groupId>junit</groupId>
+          <artifactId>junit</artifactId>
+          <version>3.8.1</version>
+          <scope>test</scope>
+        </dependency>
+
+        <!-- spring-->
+        <dependency>
+          <groupId>org.springframework</groupId>
+          <artifactId>spring-beans</artifactId>
+          <version>${springVersion}</version>
+        </dependency>
+
+        <dependency>
+          <groupId>org.springframework</groupId>
+          <artifactId>spring-core</artifactId>
+          <version>${springVersion}</version>
+        </dependency>
+
+        <dependency>
+          <groupId>org.springframework</groupId>
+          <artifactId>spring-context</artifactId>
+          <version>${springVersion}</version>
+        </dependency>
+        <dependency>
+          <groupId>org.springframework</groupId>
+          <artifactId>spring-orm</artifactId>
+          <version>${springVersion}</version>
+        </dependency>
+
+        <!-- spring web + spring MVC-->
+        <dependency>
+          <groupId>org.springframework</groupId>
+          <artifactId>spring-web</artifactId>
+          <version>${springVersion}</version>
+        </dependency>
+        <dependency>
+          <groupId>org.springframework</groupId>
+          <artifactId>spring-webmvc</artifactId>
+          <version>${springVersion}</version>
+        </dependency>
+
+        <!-- mybatis核心包 -->
+        <dependency>
+          <groupId>org.mybatis</groupId>
+          <artifactId>mybatis</artifactId>
+          <version>3.0.5</version>
+        </dependency>
+        <!-- mybatis + spring -->
+        <dependency>
+          <groupId>org.mybatis</groupId>
+          <artifactId>mybatis-spring</artifactId>
+          <version>1.0.1</version>
+        </dependency>
+
+
+        <!-- DataBase数据库连接 mysql包-->
+        <dependency>
+          <groupId>mysql</groupId>
+          <artifactId>mysql-connector-java</artifactId>
+          <version>${mysqlVersion}</version>
+        </dependency>
+
+        <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
+        <dependency>
+          <groupId>commons-dbcp</groupId>
+          <artifactId>commons-dbcp</artifactId>
+          <version>1.2.2</version>
+        </dependency>
+
+        <!-- log4j配置, 视情况添加-->
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <version>${log4jVersion}</version>
+        </dependency>
+        <!--<dependency>-->
+            <!--<groupId>com.alibaba</groupId>-->
+            <!--<artifactId>fastjson</artifactId>-->
+            <!--<version>1.1.41</version>-->
+        <!--</dependency>-->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>${slf4jVersion}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <version>${slf4jVersion}</version>
+        </dependency>
+
+        <!--文件上传包-->
+        <dependency>
+          <groupId>commons-fileupload</groupId>
+          <artifactId>commons-fileupload</artifactId>
+          <version>${fileuploadVersion}</version>
+        </dependency>
+
+        <!-- jsp页面使用的jstl支持-->
+        <dependency>
+          <groupId>jstl</groupId>
+          <artifactId>jstl</artifactId>
+          <version>${jstlVersion}</version>
+        </dependency>
+
+        <!-- lombok插件导包-->
+        <dependency>
+          <groupId>org.projectlombok</groupId>
+          <artifactId>lombok</artifactId>
+          <version>${lombokVersion}</version>
+          <scope>provided</scope>
+        </dependency>
+        
+	<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
+		<dependency>
+		    <groupId>javax.servlet</groupId>
+		    <artifactId>javax.servlet-api</artifactId>
+		    <version>3.1.0</version>
+		    <scope>provided</scope>
+		</dependency>
+
+	
+	<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
+	<dependency>
+	    <groupId>com.alibaba</groupId>
+	    <artifactId>druid</artifactId>
+	    <version>1.0.9</version>
+	</dependency>
+	
+	<dependency>  
+	  <groupId>org.apache.geronimo.bundles</groupId>  
+	  <artifactId>aspectjweaver</artifactId>  
+	  <version>1.6.8_2</version>  
+	</dependency> 
+	
+	<!-- shiro configuration -->
+	<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-core -->
+	<dependency>
+	    <groupId>org.apache.shiro</groupId>
+	    <artifactId>shiro-core</artifactId>
+	    <version>1.3.2</version>
+	</dependency>
+	<dependency>
+	    <groupId>org.apache.shiro</groupId>
+	    <artifactId>shiro-spring</artifactId>
+	    <version>1.3.2</version>
+	</dependency>
+	<dependency>
+	    <groupId>org.apache.shiro</groupId>
+	    <artifactId>shiro-web</artifactId>
+	    <version>1.3.2</version>
+	</dependency>
+	
+	<!-- https://mvnrepository.com/artifact/com.whalin/Memcached-Java-Client -->
+	<dependency>
+	    <groupId>com.whalin</groupId>
+	    <artifactId>Memcached-Java-Client</artifactId>
+	    <version>3.0.2</version>
+	</dependency>
+	
+	
+	<!-- jackson -->
+    <dependency>
+        <groupId>com.fasterxml.jackson.core</groupId>
+        <artifactId>jackson-core</artifactId>
+        <version>${jackson.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>com.fasterxml.jackson.core</groupId>
+        <artifactId>jackson-databind</artifactId>
+        <version>${jackson.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>com.fasterxml.jackson.core</groupId>
+        <artifactId>jackson-annotations</artifactId>
+        <version>${jackson.version}</version>
+    </dependency>
+
+	
+	
+    </dependencies>
+
+
+    <build>
+        <finalName>ssm</finalName>
+
+        <plugins>
+            <!--java8-->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                </configuration>
+            </plugin>
+
+            <!-- mybatis-generator-maven-plugin-->
+            <!-- <plugin>
+                <groupId>org.mybatis.generator</groupId>
+                <artifactId>mybatis-generator-maven-plugin</artifactId>
+                <version>1.3.2</version>
+                <configuration>
+                    <verbose>true</verbose>
+                    <overwrite>true</overwrite>
+                </configuration>
+            </plugin> -->
+
+
+	<plugin>
+            <groupId>org.apache.tomcat.maven</groupId>
+            <artifactId>tomcat7-maven-plugin</artifactId>
+            <version>2.2</version>
+            <configuration>
+                <path>/</path>
+                <port>8080</port>
+                <uriEncoding>UTF-8</uriEncoding>
+            </configuration>
+        </plugin>
+        </plugins>
+    </build>
+</project>

+ 50 - 0
src/main/java/com/demo/aop/ControllerAOP.java

@@ -0,0 +1,50 @@
+package com.demo.aop;
+
+
+
+import java.util.Arrays;
+
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.Signature;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.demo.pojo.ResultBean;
+/**
+ * AOP动态切入controller,并统一规范
+ * @author yuan
+ *
+ */
+public class ControllerAOP {
+	private static final Logger logger = LoggerFactory.getLogger(ControllerAOP.class);
+	 
+	  public Object handlerControllerMethod(ProceedingJoinPoint pjp) {
+	    long startTime = System.currentTimeMillis();
+	    logger.info("切入开始...");
+	    ResultBean<?> result;
+	    String[] parameters = null;
+	 
+	    try {
+	    	Signature signature = pjp.getSignature();
+	    	MethodSignature ms = (MethodSignature)signature;
+	    	parameters = ms.getParameterNames();
+	    	result = (ResultBean<?>) pjp.proceed();
+	    } catch (Throwable e) {
+	      result = handlerException(pjp, e);
+	    }
+	    logger.info(pjp.getSignature() + "  " + Arrays.toString(parameters) + " use time:" + (System.currentTimeMillis() - startTime));
+	    logger.info("切入结束...");
+	    return result;
+	  }
+	 
+	  //组装异常数据
+	  private ResultBean<?> handlerException(ProceedingJoinPoint pjp, Throwable e) {
+	    ResultBean<?> result = new ResultBean<>();
+	      logger.error(pjp.getSignature() + " error ", e);
+	      result.setMsg(e.toString());
+	      result.setCode(ResultBean.FAIL);
+	    return result;
+	  }
+
+}

+ 23 - 0
src/main/java/com/demo/controller/TestAopController.java

@@ -0,0 +1,23 @@
+package com.demo.controller;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.demo.pojo.ResultBean;
+import com.demo.pojo.User;
+import com.demo.service.UserService;
+
+@Controller
+public class TestAopController {
+	@Resource
+	UserService userService;
+	
+	@RequestMapping("/getUsername")
+	@ResponseBody
+	public ResultBean<User> getUsername(User user){
+		return new ResultBean<>(userService.getUserByUserId(user.getUserId()));
+	}
+}

+ 13 - 0
src/main/java/com/demo/dao/UserDao.java

@@ -0,0 +1,13 @@
+package com.demo.dao;
+
+import org.apache.ibatis.annotations.Param;
+
+import com.demo.pojo.User;
+
+public interface UserDao {
+	/**
+	 * 根据userId获取用户信息
+	 * @return
+	 */
+	public User getUserByUserId(@Param("userId") String userId);
+}

+ 52 - 0
src/main/java/com/demo/pojo/ResultBean.java

@@ -0,0 +1,52 @@
+package com.demo.pojo;
+
+import java.io.Serializable;
+/**
+ * 统一controller返回格式
+ * @author Administrator
+ * @param <T>
+ */
+public class ResultBean<T> implements Serializable {
+	
+	private static final long serialVersionUID = 1L;
+	
+	public static final int SUCCESS = 0; //成功为0
+	public static final int FAIL = -1; //异常为-1
+
+	private String msg = "SUCCESS"; //定义信息默认值为success
+	private int code = SUCCESS; //定义默认代码为0
+	private T data; //返回的数据
+	
+	public ResultBean(){
+		super();
+	}
+	public ResultBean(T data){
+		super();
+		this.data = data;
+	}
+	public ResultBean(Throwable e){
+		super();
+		this.msg = e.getMessage();
+		this.code = FAIL;
+	}
+	public String getMsg() {
+		return msg;
+	}
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+	public int getCode() {
+		return code;
+	}
+	public void setCode(int code) {
+		this.code = code;
+	}
+	public T getData() {
+		return data;
+	}
+	public void setData(T data) {
+		this.data = data;
+	}
+	
+	
+}

+ 34 - 0
src/main/java/com/demo/pojo/User.java

@@ -0,0 +1,34 @@
+package com.demo.pojo;
+
+import java.io.Serializable;
+
+public class User implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	private String username;
+	private String userId;
+	private String sex;
+	public String getUsername() {
+		return username;
+	}
+	public void setUsername(String username) {
+		this.username = username;
+	}
+	public String getUserId() {
+		return userId;
+	}
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+	public String getSex() {
+		return sex;
+	}
+	public void setSex(String sex) {
+		this.sex = sex;
+	}
+	
+}

+ 13 - 0
src/main/java/com/demo/service/UserService.java

@@ -0,0 +1,13 @@
+package com.demo.service;
+
+import com.demo.pojo.User;
+
+public interface UserService {
+	
+	/**
+	 * 根据用户id获取用户名
+	 * @param userId
+	 * @return
+	 */
+	public User getUserByUserId(String userId);
+}

+ 22 - 0
src/main/java/com/demo/service/impl/UserServiceImpl.java

@@ -0,0 +1,22 @@
+package com.demo.service.impl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Component;
+
+import com.demo.dao.UserDao;
+import com.demo.pojo.User;
+import com.demo.service.UserService;
+
+@Component("UserService")
+public class UserServiceImpl implements UserService {
+
+	@Resource
+	UserDao userDao;
+	
+	@Override
+	public User getUserByUserId(String userId) {
+		return userDao.getUserByUserId(userId);
+	}
+
+}

+ 64 - 0
src/main/resources/config/applicationContext-mybatis.xml

@@ -0,0 +1,64 @@
+<?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:tx="http://www.springframework.org/schema/tx"
+    xmlns:context="http://www.springframework.org/schema/context"
+    xmlns:mvc="http://www.springframework.org/schema/mvc"
+    xmlns:aop="http://www.springframework.org/schema/aop"
+    xsi:schemaLocation="http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/context
+        http://www.springframework.org/schema/context/spring-context.xsd
+        http://www.springframework.org/schema/mvc
+        http://www.springframework.org/schema/mvc/spring-mvc.xsd
+        http://www.springframework.org/schema/tx
+        http://www.springframework.org/schema/tx/spring-tx.xsd
+        http://www.springframework.org/schema/aop
+        http://www.springframework.org/schema/aop/spring-aop.xsd">
+        
+
+	<!-- 配置jdbc -->
+	<context:property-placeholder location="classpath:/properties/db.properties"/>
+	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close">
+		<property name="driverClassName" value="${jdbc.driver}" />
+		<property name="url" value="${jdbc.url}" />
+		<property name="username" value="${jdbc.username}" />
+		<property name="password" value="${jdbc.password}" />
+	</bean>
+	
+	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
+		<property name="dataSource" ref="dataSource" />
+		<property name="mapperLocations" value="classpath:/mapping/*.xml" />
+	</bean>
+	
+	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
+		<property name="basePackage" value="com.demo.aop.dao" />
+		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
+	</bean>
+	
+	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
+		<property name="dataSource" ref="dataSource" />
+	</bean>
+		
+	<tx:advice id="txAdvice" transaction-manager="transactionManager">
+		<tx:attributes>
+			<tx:method name="*"/>
+			<tx:method name="find*" read-only="true"/>
+		</tx:attributes>
+	</tx:advice>
+	
+	<aop:config>
+		 <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.yuan.ehcache.service.impl.*.*(..))"/>
+	</aop:config>
+	
+  <bean id="controllerAop" class="com.demo.aop.ControllerAOP" />
+ 
+  <aop:config>
+    <aop:aspect id="myAop" ref="controllerAop">
+      <aop:pointcut id="target"
+        expression="execution(* com.demo.controller.*.*(..))" />
+      <aop:around method="handlerControllerMethod" pointcut-ref="target" />
+    </aop:aspect>
+  </aop:config>
+
+</beans>

+ 52 - 0
src/main/resources/config/applicationContext-shiro.xml

@@ -0,0 +1,52 @@
+<?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:aop="http://www.springframework.org/schema/aop"     
+    xmlns:context="http://www.springframework.org/schema/context"    
+    xmlns:jee="http://www.springframework.org/schema/jee"    
+    xmlns:tx="http://www.springframework.org/schema/tx"    
+    xsi:schemaLocation="      
+        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd    
+        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd    
+        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd    
+        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd    
+        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">  
+    
+    
+    <!-- self define realm -->    
+ 	<bean id="myRealm" class="com.yuan.ehcache.realm.MyRealm" >
+ 		
+ 	</bean>
+ 	
+ 	<!-- security manager -->
+ 	<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
+ 		<property name="realm" ref="myRealm" />
+ 	</bean>
+ 	
+ 	<!-- shiro filter -->
+ 	<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
+ 		<property name="securityManager" ref="securityManager" />
+ 		<property name="loginUrl" value="/login" />
+ 		<property name="successUrl" value="/admin/test" />
+ 		<property name="filterChainDefinitions">
+ 			<value>
+ 				/login=anon
+ 				/findBook=anon
+ 				/admin=roles[admin]
+ 				/sys=roles[system admin,admin]
+ 				/user=perms[user:create]
+ 			</value>
+ 		</property>
+ 	</bean>
+ 	
+ 	<!-- spring manage lifecycle -->
+ 	<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
+ 
+ 	<!-- enable shiro annotations -->
+ 	<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" />
+ 	<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
+ 		<property name="securityManager" ref="securityManager" />
+ 	</bean>
+ 		
+ </beans>

+ 37 - 0
src/main/resources/log4j.properties

@@ -0,0 +1,37 @@
+log4j.debug= false
+log4j.rootLogger=INFO,A1,defaultLogger
+
+
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-d{MM-dd HH:mm:ss} [%p]-[ %l ]  %m%n
+
+
+log4j.appender.defaultLogger=org.apache.log4j.RollingFileAppender
+log4j.appender.defaultLogger.File=D:/tomcat6.0/logs/consultant.log
+log4j.appender.defaultLogger.Encoding=UTF8
+log4j.appender.defaultLogger.MaxFileSize=10MB
+log4j.appender.defaultLogger.MaxBackupIndex=20
+log4j.appender.defaultLogger.layout=org.apache.log4j.PatternLayout
+log4j.appender.defaultLogger.layout.ConversionPattern=%d{MM-dd HH:mm:ss} [%p]-[%l]- %m%n
+
+
+log4j.appender.appLogger=org.apache.log4j.RollingFileAppender
+log4j.appender.appLogger.File=D:/tomcat6.0/logs/consultant.log
+log4j.appender.appLogger.Encoding=UTF8
+log4j.appender.appLogger.MaxFileSize=10MB
+log4j.appender.appLogger.layout=org.apache.log4j.PatternLayout
+log4j.appender.appLogger.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss} [%p]-[%l]- %m%n\#log4j.logger.java.sql.ResultSet\=DEBUG
+#log4j.logger.java.sql.ResultSet=DEBUG
+
+log4j.logger.com.ibatis=DEBUG
+#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
+log4j.logger.com.ibatis.sqlmap.engine.cache.CacheModel=DEBUG
+log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientImpl=DEBUG
+log4j.logger.com.ibatis.sqlmap.engine.builder.xml.SqlMapParser=DEBUG
+log4j.logger.com.ibatis.common.util.StopWatch=DEBUG
+log4j.logger.java.sql.Connection=DEBUG
+log4j.logger.java.sql.Statement=DEBUG
+log4j.logger.java.sql.PreparedStatement=DEBUG
+
+

+ 32 - 0
src/main/resources/mapping/mybatis.xml

@@ -0,0 +1,32 @@
+<?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.demo.dao.UserDao">
+
+<select id="findUserByUserId" parameterType="String" resultType="com.demo.pojo.User">
+	select * from user_t t where t.user_id = #{id}
+</select>
+<update id="updateUsername" parameterType="com.demo.pojo.User">
+	update user_t t set t.username = "haha" where t.user_id = 1
+</update>
+
+<select id="findUserByUsername" resultType="com.demo.pojo.User">
+	select * from user_t t where t.username = #{username}
+</select>
+
+<select id="findRolesByUsername" parameterType="String" resultType="java.lang.String">
+	select r.role from role_t r,user_role_t ur, user_t u where r.role_id = ur.role_id and ur.user_id = u.user_id and u.username = #{username}
+</select>
+
+<select id="findPermissionsByUsername" resultType="java.lang.String">
+	select p.permission from role_t r,user_role_t ur, user_t u, permission_t p, role_permission_t rp where r.role_id = ur.role_id and ur.user_id = u.user_id and r.role_id = rp.role_id and rp.permission_id = p.permission_id and u.username  = #{username}
+</select>
+
+<insert id="insertUserInfo" parameterType="com.demo.pojo.User">
+	<selectKey resultType="java.math.BigDecimal" order="BEFORE" keyProperty="id">
+		selet squence.nextval as userId from dual
+	</selectKey>
+	insert into user_t(id, username) values(#{userId}, #{username})
+</insert>
+</mapper>

+ 4 - 0
src/main/resources/properties/db.properties

@@ -0,0 +1,4 @@
+jdbc.driver=com.mysql.jdbc.Driver
+jdbc.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8
+jdbc.username=root
+jdbc.password=123456

+ 35 - 0
src/main/resources/spring/springmvc.xml

@@ -0,0 +1,35 @@
+<?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:tx="http://www.springframework.org/schema/tx"
+    xmlns:context="http://www.springframework.org/schema/context"
+    xmlns:mvc="http://www.springframework.org/schema/mvc"
+    xmlns:aop="http://www.springframework.org/schema/aop"
+    xsi:schemaLocation="http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/context
+        http://www.springframework.org/schema/context/spring-context.xsd
+        http://www.springframework.org/schema/mvc
+        http://www.springframework.org/schema/mvc/spring-mvc.xsd
+        http://www.springframework.org/schema/tx
+        http://www.springframework.org/schema/tx/spring-tx.xsd
+        http://www.springframework.org/schema/aop
+        http://www.springframework.org/schema/aop/spring-aop.xsd">
+        
+
+	<context:component-scan base-package="com.demo" />
+	<mvc:annotation-driven>
+		<mvc:message-converters>
+	        <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
+	        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
+	    </mvc:message-converters>
+	</mvc:annotation-driven>
+	<aop:aspectj-autoproxy proxy-target-class="true" />
+
+	<mvc:resources location="/js/" mapping="/js/**" />
+	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
+		<property name="prefix" value="/WEB-INF/views/" />
+		<property name="suffix" value=".jsp" />
+	</bean>
+	
+</beans>

+ 47 - 0
src/main/webapp/WEB-INF/web.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
+  <display-name>Archetype Created Web Application</display-name>
+  
+  
+  <context-param>
+  	<param-name>contextConfigLocation</param-name>
+  	<param-value>classpath:/config/applicationContext-mybatis.xml,
+  				classpath:/spring/springmvc.xml</param-value>
+  </context-param>
+  
+   <listener>
+  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+  </listener>
+  
+  <filter>
+    <filter-name>characterEncodingFilter</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>
+  </filter>
+  <filter-mapping>
+    <filter-name>characterEncodingFilter</filter-name>
+    <url-pattern>/*</url-pattern>
+  </filter-mapping>
+  
+   <servlet>
+    <servlet-name>mvc</servlet-name>
+    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+    <init-param>
+      <param-name>contextConfigLocation</param-name>
+      <param-value>classpath:/spring/springmvc.xml</param-value>
+    </init-param>
+    <load-on-startup>1</load-on-startup>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>mvc</servlet-name>
+    <url-pattern>/</url-pattern>
+  </servlet-mapping>
+  
+  <welcome-file-list>
+    <welcome-file>index.jsp</welcome-file>
+    <welcome-file>index.html</welcome-file>
+  </welcome-file-list>
+</web-app>