`

tiny-sqlmap1.0.1发布,用来弥补hibernate原生sql查询的不足

 
阅读更多

tiny-sqlmap的由来

最近给一个项目的框架做一些优化工作,该项目使用的是SSH这一套东西。似乎SSH在某些人眼里已经形成了一种惯性,做个web应用如果不用这SSH一套东西他都觉得那里不舒服似的,从不考虑自身应用的特点而选择合适的技术框架。不从实际出发乱选不合符本应用的技术框架必定带来不好的后果。对于我优化的这个项目而言,hibernate并没有给项目的开发效率提高,因为很多的查询都是使用了jdbcTemplate,导至以下问题:

 

1)  做个列表查询,用if判断查询条件,用StringBuffer拼装sql语句这样的代码占用整个业务方法,使得代码变得臃肿不可读。

2)  Sql写在程序文件里,用StringBuffer 拼装,这好比看了被压缩了得js代码一样难理解。

3)  SQL StringBuffer 拼装在应用随处可见,在Action,Service,Dao都有。

4)  SQL 注入得不到统一的控制。

 

Hibernate在对数据表的修改确实体现了极佳的开发效率,对上面这些问题的优化,我并没有选择推翻重来,而是在ibatis的基础上开发了个查询框架来解决上述的问题。

 

什么是tiny-sqlmap

 

tiny-sqlmap框架是从ibatis框架中剥离出来的,它非常的轻巧,也好扩冲。它仅提供sql的查询功能,对sql的查询操作,它支持SQL结果集映射、sql参数映射、动态sql的等功能。

 

tiny-sqlmap使用场景

如果你在便用hibernate的过程中也遇到像我这样的问题,你可以将其整合到你的项目中。

 

如果整合tiny-sqlmap

 

tiny-sqlmap通过SqlMapExecutor 接口向外部程序提供访问,先看看这个接口所提供的方法

 


 

它只提供了相关的数据查询方法。SqlMapExecutor对象由SqlMapExecutorFactoryBean工厂类,这是个spring的FactoryBean,所以要求在spring的环境中运行,SqlMapExecutorFactoryBean的配置如下:

 

 

Xml代码  收藏代码
  1. <bean id="sqlMapExecutor" class="org.jorgie.dal.tinysqlmap.client.SqlMapExecutorFactoryBean">  
  2.   <property name="dataSource">  
  3.     <ref bean="dataSource"/>  
  4.   </property>  
  5.   <property name="sqlMapExecutorProperties">  
  6.      <props>  
  7.        <prop key="sql_executor_class" >org.jorgie.dal.tinysqlmap.engine.execution.LimitSqlExecutor</prop>  
  8.        <prop key="dialect_class" >org.jorgie.dal.tinysqlmap.engine.dialects.MySQLDialect</prop>  
  9.      </props>  
  10.   </property>  
  11.   <property name="sqlMapConfigLocation">  
  12.      <list>  
  13.        <value>test/entity/sqlMap/testSqlMap.xml</value>  
  14.        <value>test/entity/sqlMap/demoSqlMap.xml</value>  
  15.      </list>  
  16.   </property>  
  17. </bean>  

 

 

 

dataSource是spring中配置的数据源对象。在sqlMapExecutorProperties中配置两个属性的作用是为了实现List queryForList(String id, Object parameterObject, int startIndex, int limit)实现分页功能。对于sqlmap xml文件的配置,配置方法和ibatis是一致的,只不过它只支持select语句的配置。

 

      如果保证与hibernate的事务一致?把tiny-sqlmap整合到你的应用中,你需要把你的事务管理器改成DataSourceTransactionManager,同时需要为配置在spring容器的LocalSessionFactoryBean对象将其useTransactionAwareDataSource属性设为true。 SqlMapExecutorFactoryBean内部会对数据源进行包装,通过使用TransactionAwareDataSourceProxy数据源来保证与hibernate在同一个事务中使用的是同一个Connection对象。

 

 

下面是具休的配置代码:LocalSessionFactoryBean

 

Xml代码  收藏代码
  1. <bean id="sessionFactory"  
  2.     class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  3.   <property name="dataSource">  
  4.     <ref bean="dataSource" />  
  5.   </property>  
  6.   <property name="hibernateProperties">  
  7.     <props>  
  8.       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>  
  9.       <prop key="hibernate.show_sql">true</prop>  
  10.       <prop key="hibernate.generate_statistics">true</prop>  
  11.       <prop key="hibernate.connection.release_mode">auto</prop>  
  12.       <prop key="hibernate.autoReconnect">true</prop>  
  13.       <prop key="hibernate.jdbc.batch_size">30</prop>  
  14.     </props>  
  15.   </property>  
  16.   <property name="mappingDirectoryLocations">   
  17.      <list>  
  18.         <value>classpath:test/entity/</value>  
  19.      </list>   
  20.   </property>  
  21.   <!--让hibernate Session使用TransactionAwareDataSourceProxy数据源 -->   
  22.   <property name="useTransactionAwareDataSource" value="true"></property>  
  23. </bean>  

 

    事务管理器,将HibernateTransactionManager改为DataSourceTransactionManager

 

Xml代码  收藏代码
  1. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  2.     <property name="dataSource" ref="dataSource" />    
  3. </bean>   

 

 

 

 

   SqlMapExecutorFactoryBean对数据源的包装代码,这里的useTransactionAwareDataSource属生默认为true

 

Java代码  收藏代码
  1. if (this.dataSource != null) {  
  2.     DataSource dataSourceToUse = this.dataSource;  
  3.     if (this.useTransactionAwareDataSource  
  4.         && !(this.dataSource instanceof TransactionAwareDataSourceProxy)) {  
  5.         dataSourceToUse = new TransactionAwareDataSourceProxy(  
  6.                         this.dataSource);  
  7.     }  
  8.     state.setDataSource(dataSourceToUse);  
  9.     state.getConfig().getSqlMapExecutorImpl().setDataSource(dataSourceToUse);  
  10. }  

 

 

 

附上源码及库文件,欢迎便用!

 

转载(http://www.iteye.com/topic/1130793) 

 

 

 

分享到:
评论

相关推荐

    tiny-AES-c-1.0.0_aesc语言_AES解密C语言_AES_AES测试_

    这个"tiny-AES-c-1.0.0"项目是AES算法的一个小型C语言实现,适用于嵌入式系统和其他资源有限的环境。下面我们将深入探讨AES的基本原理、C语言实现的关键点以及如何进行测试。 **AES算法简介** AES是基于替换和置换...

    RoBERTa-tiny-clue.zip

    RoBERTa-tiny-clue.zip 是一个压缩包文件,它包含了一个轻量级的RoBERTa模型,专门针对CLUE(Chinese Language Understanding Evaluation)任务进行了训练。RoBERTa,全称为“Robustly Optimized BERT Pretraining ...

    tiny-regex-c-master_C语言_master表达式_最小正则表达_

    《C语言实现的微型正则表达式库:tiny-regex-c-master》 在软件开发中,正则表达式是处理字符串的强大工具,尤其在文本处理、数据验证和搜索替换等场景下发挥着重要作用。然而,对于资源有限的嵌入式系统而言,标准...

    tiny-imagenet.7z

    在计算机视觉的研究中,Tiny-ImageNet常被用来进行多类图像分类任务,这是衡量模型能否正确识别不同类别的关键指标。通过在这个数据集上训练和调整模型,研究者可以评估模型的泛化能力和鲁棒性。此外,由于数据集...

    opencv_contrib编译所需的tiny-dnn包

    在编译OpenCV_contrib时,如果遇到tiny-dnn相关的错误,这通常是因为CMake配置不正确或者tiny-dnn的库没有正确安装。解决这个问题的第一步是确保tiny-dnn的源代码已经下载并放置在正确的位置。在这个案例中,压缩包...

    tiny-dnn源码

    **tiny-dnn源码分析** tiny-dnn是一个轻量级的、C++11实现的深度学习框架,它旨在提供高效、易于理解和部署的神经网络解决方案。作为一个开源项目,tiny-dnn为开发者提供了深入理解深度学习算法和实现的绝佳机会。...

    tiny-dnn-1.0.0a3.rar

    《tiny-dnn-1.0.0a3与OpenCV结合使用详解》 在深度学习领域,tiny-dnn是一款轻量级的、C++编写的深度学习框架,它旨在提供一个易于理解和部署的环境,特别适合对嵌入式设备进行模型优化。本资源"tiny-dnn-1.0.0a3....

    perl-Config-Tiny-2.12-7.1.el6.noarch.rpm

    perl-Config-Tiny-2.12-7.1.el6.noarch.rpm perl-Config-Tiny-2.12-7.1.el6.noarch.rpm

    前端开源库-tiny-worker

    "tiny-worker"就是这样一个专为前端设计的开源库,它被称为“小型工作者”,主要用作服务器上的小型网络工作者。这个库的目标是解决前端应用在处理计算密集型任务或者需要在后台线程运行的任务时的问题。 一、什么...

    Tiny-yolo预训练模型darknet.conv.weights

    Tiny-YOLO是一种轻量级的深度学习模型,属于YOLO(You Only Look Once)目标检测框架的一部分。YOLO是实时目标检测领域的开创性工作,以其高效和准确的特性受到广泛关注。Tiny-YOLO旨在进一步优化YOLO模型,减少计算...

    前端开源库-tiny-promisify

    `tiny-promisify`是一个开源库,专门用于将那些返回回调函数的Node.js风格API转换为返回Promise的版本,使得代码更加简洁、易于理解和管理。 `tiny-promisify`这个名字已经揭示了它的核心特性——微小。这意味着它...

    前端项目-tiny-date-picker.zip

    【tiny-date-picker】是一个专为前端开发设计的轻量级、无依赖的日期选择器组件。这个项目的主要目标是提供一个简单易用、性能高效且功能完备的日期选择解决方案,适用于各种网页应用。由于它不依赖任何外部库,如...

    tiny-dnn-master.zip

    Tiny-DNN 是一个轻量级、头文件式的深度学习框架,专注于提供深度神经网络(DNN)的底层实现。这个开源项目"tiny-dnn-master.zip"包含的就是Tiny-DNN的源代码,对于想要深入理解DNN工作原理以及如何在实际中实现它的...

    tiny-imagenet-200.zip

    用于深度学习网络训练的数据集,可与博文中的代码进行配套练习,里面包括100000张训练集的图片,已经按照文件夹进行分类,训练集数据的信息也已经收录在txt文档中

    perl-Config-Tiny-2.14-7.el7.noarch.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    前端项目-tiny-slider.zip

    **前端项目 - tiny-slider** **简介** tiny-slider 是一个轻量级、高度可定制的JavaScript滑块库,适用于各种用途,如轮播图、图片画廊、内容展示等。它受到猫头鹰旋转木马(Owl Carousel)的启发,但相比而言,...

    Node.js-tiny-json-http极简的HTTP客户端用于GET和POSTJSON负载

    **Node.js-tiny-json-http极简的HTTP客户端用于GET和POST JSON负载** 在现代Web开发中,Node.js凭借其非阻塞I/O模型和事件驱动的特性,成为了构建服务器端和网络应用的理想选择。其中,HTTP请求是进行数据交互的...

    tiny-spring源码

    tiny-spring 教程 参考http://blog.csdn.net/x_i_y_u_e/article/details/52440491

    tiny-cuda-cnn.zip

    tiny-cuda-cnn库,linux安装编译 official repo: https://github.com/NVlabs/tiny-cuda-nn 该包可以显著提高NeRF训练速度,是Instant-NGP、Threestudio和NeRFstudio等框架中,必须使用的。 本文提供tiny-cuda-nn...

    前端开源库-tiny-cookie

    "tiny-cookie"是一个专门针对这种情况设计的轻量级前端库,它为JavaScript提供了简单易用的Cookie操作接口。这个开源库专注于小巧、高效,使得在网页应用中管理Cookie变得异常便捷。 Cookie是一种在客户端存储少量...

Global site tag (gtag.js) - Google Analytics