mhub-sqlcollect集成

mhub-sqlcollect 使用说明

此模块用于收集项目中可能影响效率的分页查询SQL,主要用于项目开发阶段的SQL优化

背景说明

MHUB框架中,我们使用了PageHelper 作为分页插件,它会根据你使用的数据库来将你的**ByPage的sql改装成一个分页查询的sql,并顺带生成一个查询总数的sql,这条sql的生成使用了SQL解析工具SQLParser,当解析失败时(不规范的sql或自定义函数等,都可能导致解析失败),查询总数的sql会直接使用select count(0) from ( 原sql ),效率可想而知。
怎么解决呢?MHUB里提供了@MhubCount注解(com.woyi.annotation.MhubCount),该注解在DAO层使用,使用参照如下:

/** 分页查询sql */
@MhubCount(paramTypes = {ChatRecord.class, MPage.class}, queryCountMethodName = "getChatRecordByPageForCount")
Page<ChatRecord> getChatRecordByPage(@Param("chatRecord")ChatRecord chatRecord, MPage page);

/** 优化过的count查询sql */
Long getChatRecordByPageForCount(@Param("chatRecord")ChatRecord chatRecord, MPage page);

mapper里对应的getChatRecordByPageForCount写优化过的count查询sql

SQL收集的配置方法

1. 运行sys_sql_collection.sql(MySQL, Oracle),创建表

2. 添加依赖 mhub-sqlcollect.jar

compile "com.woyitech:mhub-sqlcollect:2.0"

3. applicationContext-public.xml中mybatis配置添加拦截器

<bean id="queryPageInterceptor" class="com.woyi.mhub.expand.sqlcollection.interceptor.QueryPageInterceptor" />

** 注意其位置必须在pageHelper后 **

** 样例:**

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        <property name="mapperLocations" value="classpath*:com/woyi/**/**/mappers/${jdbc.databasetype}/*Mapper.xml"></property>
        <property name="plugins">
            <array>
                <bean id="pageHelper" class="com.github.pagehelper.PageHelper">
                    <property name="properties">
                        <!--注意 方言全部使用小写字母 -->
                        <!--mysql, mariadb, sqlite, oracle, hsqldb, postgresql, sqlserver, db2, informix -->
                        <value>
                            dialect=${jdbc.databasetype}
                        </value>
                    </property>
                </bean>
                <!-- 必须在PageHelper后 -->
                <bean id="queryPageInterceptor" class="com.woyi.mhub.expand.sqlcollection.interceptor.QueryPageInterceptor" />
            </array>
        </property>
</bean>

4. 添加菜单

/web/sqlCollection/list/web/sqlCollection/list

初始化菜单

INSERT INTO `sys_menu`
(menuid`,`menustatus`,`menuname`,`menucode`,`menuparentcode`,`menutype`,`menuurl`,`menulevl`,`menusort`,`menumemo`,`deleteable`,`menupositionname`,`opentype`,`grantable`,`creator`)
VALUES
('e570d738-77f9-11e7-8373-00155d023b00','1','SQL收集器','mhub_expand_sqlcollect','mhub_baseapp','0','/web/sqlCollection/list','2','6','','0','','0','0','eb9e2211-f652-11e5-af4e-50465d555c06'    );
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,067评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,868评论 18 139
  • 这部分主要是开源Java EE框架方面的内容,包括Hibernate、MyBatis、Spring、Spring ...
    杂货铺老板阅读 1,417评论 0 2
  • 这几天一直在看人生这部小说,看完以后,我觉得加林的最后命运,无论是事业还是感情都是必然的。 首先事业上,因为出生农...
    鱼子桃酱阅读 203评论 0 1
  • 我必须是你近旁的一株木棉, 作为树的形象和你站在一起, 根,紧握在地下; 叶;相触在云里; 每一阵风吹过, 我们...
    h小慧阅读 555评论 2 1