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的配置如下:
<bean id="sqlMapExecutor" class="org.jorgie.dal.tinysqlmap.client.SqlMapExecutorFactoryBean"> <property name="dataSource"> <ref bean="dataSource"/> </property> <property name="sqlMapExecutorProperties"> <props> <prop key="sql_executor_class" >org.jorgie.dal.tinysqlmap.engine.execution.LimitSqlExecutor</prop> <prop key="dialect_class" >org.jorgie.dal.tinysqlmap.engine.dialects.MySQLDialect</prop> </props> </property> <property name="sqlMapConfigLocation"> <list> <value>test/entity/sqlMap/testSqlMap.xml</value> <value>test/entity/sqlMap/demoSqlMap.xml</value> </list> </property> </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
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.generate_statistics">true</prop> <prop key="hibernate.connection.release_mode">auto</prop> <prop key="hibernate.autoReconnect">true</prop> <prop key="hibernate.jdbc.batch_size">30</prop> </props> </property> <property name="mappingDirectoryLocations"> <list> <value>classpath:test/entity/</value> </list> </property> <!--让hibernate Session使用TransactionAwareDataSourceProxy数据源 --> <property name="useTransactionAwareDataSource" value="true"></property> </bean>
事务管理器,将HibernateTransactionManager改为DataSourceTransactionManager
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean>
SqlMapExecutorFactoryBean对数据源的包装代码,这里的useTransactionAwareDataSource属生默认为true
if (this.dataSource != null) { DataSource dataSourceToUse = this.dataSource; if (this.useTransactionAwareDataSource && !(this.dataSource instanceof TransactionAwareDataSourceProxy)) { dataSourceToUse = new TransactionAwareDataSourceProxy( this.dataSource); } state.setDataSource(dataSourceToUse); state.getConfig().getSqlMapExecutorImpl().setDataSource(dataSourceToUse); }
附上源码及库文件,欢迎使用!
相关推荐
RoBERTa-tiny-clue.zip
用于深度学习网络训练的数据集,可与博文中的代码进行配套练习,里面包括100000张训练集的图片,已经按照文件夹进行分类,训练集数据的信息也已经收录在txt文档中
Tiny-yolo 预训练模型darknet.conv.weights做初始化,进行后期精调
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
tiny-spring 教程 参考http://blog.csdn.net/x_i_y_u_e/article/details/52440491
tiny-yolo-voc.weights, tiny yolo 网络 weights,欢迎各位下载
AES加解密算法。 支持AES128、AES192、AES256.
前端项目-tiny-date-picker,一个小型的、无依赖关系的日期选取器
tiny-dnn-1.0.0a3.rar OpenCV 编译 易出错文件 下载错误文件 亲测有效 共享给大家
前端开源库-tiny-cookie小cookie,一个小cookie操作插件
最小巧的正则表达式库,非常适合嵌入式系统移植,可惜功能有点删减
前端开源库-tiny-worker小型工作者,服务器的小型网络工作者
tiny-dnn深度学习框架,可以参考一下
前端开源库-tiny-promisify微小的promisify,微小的库来promisify期望节点样式回调的函数
前端项目-tiny-slider,所有用途的普通javascript滑块,灵感来自于猫头鹰旋转木马。
tiny-json-http:极简的HTTP客户端用于GET和POST JSON 负载
如果您使用过 tiny-cookie,那么您可能会对感兴趣,这是一个专注于 Web 开发的函数集合。 安装 新产品管理: npm install tiny-cookie 用法 ES2015(推荐) // You can import all methods. import * as Cookies...
小滑块React 原始插件 Tiny Slider v2 <... import TinySlider from "tiny-slider-react" ; const settings = { lazyload : true , nav : false , mouseDrag : true } ; < TinySlider settings = { settin
FatFs/Tiny-FatFs Module Source Files R0.06 (C)ChaN, 2008 FILES ff.h Common include file for FatFs and application module. ff.c FatFs module. tff.h Common include file for Tiny-FatFs and ...
tiny-loader.js, 在页面性能方面,加载 css/js的小型加载器 Tiny-Loader.js加载 css/js以最佳页面性能的小型加载程序为什么使用微型装载器使用微型装载器具体使用说明和高阶使用技巧请看我们的博客文章演示工具