`

抽丝剥茧JavaWeb应用之简单扯扯mybatis,Interceptor ,Filter

阅读更多

本文主要概述在项目中使用mybatis及springMVC的小知识点

1.使用mybatis往oracle插入数据,mybatis返回的依然是更新数据的条数,并将主键写入对象中,及mybatis批量插入数据。下面的两种情况均可使用在插入后,将userId写入到对象中。

<insert id="addUser" parameterType="com.model.UserVO">
		<selectKey keyProperty="userId" resultType="java.lang.String" 
			order="BEFORE">
				select SEQ_USER_SEQUENCE.NEXTVAL from dual
		</selectKey>
		insert into t_user (userId ,userName) values(userId,#{userName,jdbcType=VARCHAR})
</insert>


<insert id="addUser" parameterType="com.model.UserVO">
<selectKey keyProperty="userId" resultType="java.lang.String" 
			order="AFTER">
				select SEQ_USER_SEQUENCE.currval from dual
		</selectKey>
		insert into t_user (userId ,userName) values(SEQ_USER_SEQUENCE.NEXTVAL,#{userName, jdbcType=VARCHAR})
</insert>

2:大量数据插入:

addUsers(List<UserVO> lists)  //method
<insert id="addUsers" parameterType="java.util.List">
		insert into t_user (userId, userName)
		<foreach close=")" collection="list" item="item" index="index"
			open="(" separator="union">
			select
			#{item.userId,jdbcType=VARCHAR},
			#{item.userName,jdbcType=VARCHAR}
			from dual
		</foreach>
</insert>

	<insert id="demoinsert" parameterType="java.util.List">
		<foreach collection="list" item="item" index ="index" open="begin" close=";end;" separator=";">
			insert into t_role_resources  
			( role_id , resource_id , available , modify_date , modify_user) 
			values(#{item.roleId,jdbcType=VARCHAR} ,
#{item.resourceId ,jdbcType=INTEGER},#{item.available,jdbcType=VARCHAR},
			sysdate,#{item.modifyUser,jdbcType=VARCHAR} )
		</foreach>
	</insert>

  此方法不适合特大数据的批量插入之后,一次性提交。大批量数据适合分批次提交,可参考博客:

http://blog.csdn.net/wlwlwlwl015/article/details/50246717

 

3:在操作数据库时,在开发环境下会测试每个sql的性能和耗时,可采用实现mybatis中的Interceptor

import java.util.Properties;
import java.lang.reflect.Method;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.cache.CacheKey;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Intercepts(value = { 
        @Signature (type=Executor.class,
                method="update",
                args={MappedStatement.class,Object.class}),
        @Signature(type=Executor.class,
        method="query",
        args={MappedStatement.class,Object.class,RowBounds.class,ResultHandler.class,
                CacheKey.class,BoundSql.class}),
        @Signature(type=Executor.class,
        method="query",
        args={MappedStatement.class,Object.class,RowBounds.class,ResultHandler.class})})
public class TimerInterceptor implements Interceptor {

    private static final Logger logger = LoggerFactory.getLogger(TimerInterceptor.class);
    
    /**
     * 实现拦截的地方
     * */
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        Object target = invocation.getTarget();
        Object result = null;
        if (target instanceof Executor) {
            long start = System.currentTimeMillis();
            Method method = invocation.getMethod();
            /**执行方法*/
            result = invocation.proceed();
            long end = System.currentTimeMillis();
            logger.info("[TimerInterceptor] execute [" + method.getName() + "] cost [" + (end - start) + "] ms");
        }
        return result;
    }

    /**
     * Plugin.wrap生成拦截代理对象
     * */
    @Override
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {

    }

}

 然后在mybatis的配置文件中,将这个类配置成plugin 。

4.在前后端开发时,开发环境出现的跨域问题,可以写一个Filter,实现这个接口,这样在开发环境便于与其他人员调试code。

	@Override
	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
			throws IOException, ServletException {
		HttpServletResponse response = (HttpServletResponse) res;
//		指定允许其他域名访问
		response.setHeader("Access-Control-Allow-Origin", "*");
//		表明它允许POST,GET,PUT,DELETE的外域请求
		response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
//		不需要再发送预检验请求,可以缓存该结果
		response.setHeader("Access-Control-Max-Age", "3600");
//		表明它允许跨域请求包含content-type头
		response.setHeader("Access-Control-Allow-Headers", " Origin, X-Requested-With, Content-Type, Accept");
		chain.doFilter(req, res);
	}

然后在应用的web.xml中配置这个Filter即可。 

以上。不定期更新详扯。

 

 

 

 

分享到:
评论

相关推荐

    javaweb课设基于SpringBoot+SpringMVC+Mybatis实现的手机销售后台管理系统源码.zip

    javaweb课设基于SpringBoot+SpringMVC+Mybatis实现的手机销售后台管理系统源码.zipjavaweb课设基于SpringBoot+SpringMVC+Mybatis实现的手机销售后台管理系统源码.zipjavaweb课设基于SpringBoot+SpringMVC+Mybatis...

    java,Javaweb开发,spring+springmvc+mybatis整合视频及maven使用及实战视频

    Java Web 开发是利用 Java 技术进行网络应用程序开发的一种方式。随着互联网技术的发展,Java Web 已成为企业级应用开发的重要组成部分。本篇将详细介绍 Java Web 开发的基础知识,包括 Java Web 的概念、常用框架...

    校友录网站基于javaWeb,采用Spring+SpringMVC+MyBatis框架,用EhCache做数据缓存。

    校友录网站。基于javaWeb,由Maven构建管理,采用Spring+SpringMVC+MyBatis框架,用EhCache做数据缓存。门户网站采用BootStrap设计界面,后台管理网站用AmazeUI设计界面。.zip

    javaweb应用程序设计(栗菊民编著)课本源代码

    《JavaWeb应用程序设计》是由栗菊民编著的一本深入探讨JavaWeb开发的专业教材,主要针对初学者和有一定基础的学习者。这本书详细介绍了如何利用Java技术来构建Web应用程序,涵盖了从基本概念到高级特性的全面内容。...

    JavaWeb开发之Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架

    在JavaWeb开发中,构建一个完整的Web基础框架是非常重要的,因为它可以提高开发效率,提供良好的架构,便于维护和扩展。本篇文章将详细讲解基于Spring、SpringMVC、MyBatis、SpringSecurity、EhCache和JCaptcha这六...

    javaWeb,Spring,springMvc,MyBatis物流系统

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 【MySql】 MySQL是一个开源的关系型数据库管理系统,广泛应用于互联网...

    基于javaWeb-springboot+mybatis+materializecss 图书销售系统,全栈web开发学习,毕设

    基于javaWeb-springboot+mybatis+materializecss 图书销售系统,全栈web开发学习,毕设 基于javaWeb-springboot+mybatis+materializecss 图书销售系统,全栈web开发学习,毕设 基于javaWeb-springboot+mybatis+...

    mybatis+javaweb+mysql

    标题 "mybatis+javaweb+mysql" 描述了一个典型的Java Web开发中的技术栈,它涉及到MyBatis、JavaWeb和MySQL三个核心组件。这里我们将深入探讨这三个技术领域及其相互结合的应用。 1. **MyBatis**:MyBatis是一个...

    liyunqi-blog_javaweb_spring_dubbo_mybatis_

    总结起来,"liyunqi-blog_javaweb_spring_dubbo_mybatis_"项目是一个集成了Java Web开发常用技术的博客后台系统,通过Spring实现业务逻辑,利用Dubbo进行服务治理,借助MyBatis处理数据库操作。这样的架构设计不仅...

    JavaWeb应用与开发郭克华源代码

    JavaWeb应用与开发是Java程序员在构建Web应用程序时必须掌握的核心技术之一。郭克华的书籍深入浅出地讲解了这一领域,通过一系列实例帮助读者理解并熟练掌握相关技能。这个压缩包包含了书中所有示例的源代码,以及...

    JavaWeb讲义:JavaWeb应用简介

    JavaWeb技术是构建互联网应用程序的一种强大工具,它基于Java平台,为开发动态、交互式的Web应用提供了丰富的功能。本讲义将重点介绍JavaWeb的基本概念、核心组件以及常用框架。 一、JavaWeb应用概述 JavaWeb应用是...

    JavaWeb应用与开发教程电子教案

    JavaWeb应用与开发教程电子教案是一本专注于J2EE平台上的Web应用程序开发的资源,它涵盖了jsp、servlet以及web开发的基础知识和技术。这本教材以其丰富的图文并茂的讲解方式,为初学者和有一定经验的开发者提供了...

    Java资源/java学习练习项目 javaWeb+Axios+ajax+Mybatis+vue

    JavaWeb 介绍 javaWeb+Axios+ajax+Mybatis+vue 软件架构 软件架构说明 登录,注册没有写,也不需要写吧。 基于element-ui+javaweb+mybatis使用 代码简洁明了,更新操作有些许瑕疵,但不影响使用。

    mymall-master (1)_springmvc_javaweb_java_商城_mybatis_

    【标题】"mymall-master (1)_springmvc_javaweb_java_商城_mybatis_" 指示了一个基于Java技术栈的电商项目,重点使用了SpringMVC、Spring、MyBatis框架,用于构建一个类似小米商城的在线购物平台。 【描述】"商城...

    JavaWeb应用开发期末试卷及答案.doc

    JavaWeb应用开发期末试卷及答案.doc

    Java学习线路资料,包括JavaWeb、Spring、SpringMVC、Mybatis、SpringBoot......

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。本文将深入探讨Java学习路线,从基础到高级,包括JavaSE、JavaEE、Spring、SpringMVC、Mybatis以及SpringBoot等关键知识点。 首先,...

    javaweb+mybatis+struts权限管理系统

    综上所述,"javaweb+mybatis+struts权限管理系统"是一个使用JavaWeb技术和Struts、MyBatis框架构建的,具备完整的用户、角色和权限管理功能的应用。通过这样的系统,企业能够有效地控制不同用户访问系统资源的权限,...

    java面试题,java基础,javaweb,spring,springmvc,mybatis等

    Java 面试题相关知识点总结 Java 是一种广泛应用于软件开发的高级编程语言,以下是 Java ...这些知识点涵盖了 Java 的基础知识、JavaWeb 和 Spring 框架、MyBatis 等相关技术,掌握这些知识点对 Java 开发者非常重要。

    _JFinal与SSH在JavaWeb应用开发中的研究.pdf

    JFinal与SSH在JavaWeb应用开发中的研究 本文研究了JFinal和SSH两种框架在JavaWeb应用开发中的应用和比较。JFinal是一款国产的、基于MVC+ORM的开源JavaWeb框架,其设计目标是开发迅速、代码量少、学习简单、功能强大...

Global site tag (gtag.js) - Google Analytics