IBatisNet开发使用小结
asp net开发性能优化小结

开发小结(一)本文所写的是在项目开发中遇到的一些问题及在性能、算法改善的地方所做的总结。
1 数据库性能优化1.1 存储过程使用使用SET NOCOUNT ON 选项缺省时,每次执行SQL语句时,一个消息会从服务端发给客户端以显示SQL语句影响的行数。
这些信息对客户端来说很少有用。
通过关闭这个缺省值,你能减少在服务端和客户端的网络流量,帮助全面提升服务器和应用程序的性能。
为了关闭存储过程级的这个特点,在每个存储过程的开头包含“SET NOCOUNT ON”语句。
1.2 查询优化尽量不用SELECT * ,绝大多数情况下,不要用* 来代替查询返回的字段列表,用* 的好处是代码量少、就算是表结构或视图的列发生变化,编写的查询SQL语句也不用变,都返回所有的字段。
但数据库服务器在解析时,如果碰到*,则会先分析表的结构,然后把表的所有字段名再罗列出来。
这就增加了分析的时间。
建议使用如下格式如下:”select 工程名称from dbo.所有工程当前报警信息where 报警类型=‟报火警‟”;1.3 慎用SELECT DISTINCTDISTINCT子句仅在特定功能的时候使用,即从记录集中排除重复记录的时候。
这是因为DISTINCT子句先获取结果集然后去重,这样增加SQLServer有用资源的使用。
如果必须要用也只能使用。
解决方法:设计表时,要使表结构良好,尽量减少数据的冗余(最好能满足数据库的三范式)。
1.4 选择最有效率的表名顺序SQLSERVER的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表driving table)将被最先处理,在FROM 子句中包含多个表时,必须选择记录条数最少的表作为基础表,当SQLSERVER 处理多个表时,会运用排序及合并的方式连接它们。
首先,扫描第一个表(FROM 子句中最后的那个表)并对记录进行排序;然后扫描第二个表(FROM子句中最后第二个表);最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并。
Spring与ibatis整合学习心得

Spring与ibatis整合学习心得梁飞虎首先,明确一下ibatis在此工程中的作用相当于hibernate,就是进行数据库的访问,也就是连接操作数据库用的。
因此常说的SSH结构也可用SSI来取代,只是ibatis是一个轻量级的框架。
在spring.jar包中有org.springframework.orm.ibatis.SqlMapClientFactoryBean类,此类用于读取ibatis中的配置文件(总配置文件)sqlMapConfig.xml,具体的配置位置是在applicationContext.xml中:标记1<bean id="sqlMapClient"class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation"><value>WEB-INF/sqlMapConfig.xml</value></property></bean>而sqlMapConfig.xml文件中包含ibatis的map文件信息,这点不再详述。
SqlMapClientFactoryBean,这个class实现了两个interface:FactoryBean和InitializingBean,InitializingBean只有一个方法afterPropertiesSet()spring调用构造函数后,发现它实现了InitializingBean接口,所以还会调用afterPropertiesSet来进一步初始化此class。
sqlMapClient 就是在这里面创建的。
至此一个完整的工厂创建完成。
FactoryBean接口主要方法就是public Object getObject();要知道SqlMapClientFactoryBean是一个工厂类,他的作用就是你需要的时候调用它的一个方法,它就会返回你一个你需要的对象。
mybatis数据库开发实验总结

mybatis数据库开发实验总结MyBatis数据库开发实验总结一、引言MyBatis是一种Java持久化框架,它简化了数据库操作的开发过程。
在本次实验中,我们使用MyBatis进行了数据库开发,通过对实验过程的总结,可以对MyBatis的使用方法和注意事项有更深入的了解。
二、实验目的本次实验的目的是熟悉MyBatis的基本用法,掌握MyBatis的配置和使用方法。
具体来说,我们需要完成以下几个任务:1. 创建数据库表并插入数据;2. 编写实体类和映射文件;3. 配置MyBatis的数据库连接信息;4. 编写数据库操作接口和SQL语句;5. 测试数据库操作功能。
三、实验步骤1. 安装MyBatis并配置开发环境。
2. 创建数据库表,包括表结构和数据。
3. 编写实体类,对应数据库表的字段。
4. 创建映射文件,配置实体类和数据库表的映射关系。
5. 配置MyBatis的数据库连接信息,包括数据库驱动、连接URL、用户名和密码。
6. 编写数据库操作接口,定义数据库操作的方法。
7. 编写SQL语句,包括插入、更新、删除和查询等操作。
8. 测试数据库操作功能,验证数据库操作的正确性和可靠性。
四、实验结果与分析经过实验,我们成功完成了数据库的创建和数据的插入。
通过编写实体类和映射文件,我们实现了实体类和数据库表的映射关系。
在数据库操作接口中,我们定义了各种数据库操作的方法,并在SQL 语句中实现了这些操作。
最后,通过测试数据库操作功能,我们验证了数据库操作的正确性和可靠性。
五、实验总结通过本次实验,我对MyBatis的使用方法和注意事项有了更深入的了解。
首先,我们需要正确配置MyBatis的数据库连接信息,包括数据库驱动、连接URL、用户名和密码。
其次,我们需要编写实体类和映射文件,对应数据库表的字段和映射关系。
在数据库操作接口中,我们定义了各种数据库操作的方法,并在SQL语句中实现了这些操作。
最后,通过测试数据库操作功能,我们验证了数据库操作的正确性和可靠性。
ibaties 动态sql 解析

ibaties 动态sql 解析摘要:1.动态SQL概述2.ibatis动态SQL解析原理3.动态SQL的优点与不足4.实战应用案例解析正文:一、动态SQL概述动态SQL,顾名思义,是一种可变的SQL语句,其可以根据特定条件生成不同的SQL查询语句。
这种SQL语句通常应用于需要根据不同情况进行查询的情况下,如参数查询、分页查询等。
动态SQL可以提高代码的可复用性、灵活性,降低维护成本。
二、ibatis动态SQL解析原理ibatis是一款优秀的持久层框架,它支持动态SQL的解析和执行。
其解析动态SQL的原理主要包括以下几个步骤:1.解析动态SQL语句,提取关键字段、条件、动作等元素。
2.生成对应的SQL映射文件,用于存储动态SQL的解析结果。
3.在运行时,根据传入的参数和条件,动态生成最终的SQL语句并执行。
三、动态SQL的优点与不足优点:1.提高代码的可读性和可维护性。
2.降低数据库访问层的复杂性。
3.便于实现分页、参数查询等复杂查询。
不足:1.编写和调试动态SQL较为复杂。
2.过多的动态SQL可能导致性能下降。
四、实战应用案例解析案例一:分页查询```<select id="selectByPage" resultMap="userResultMap"> SELECT * FROM userWHERE 1=1<if test="pageNo != null and pageSize != null">AND (SELECT COUNT(*) FROM user) > (CURRENT_PAGE * PAGE_SIZE)</if></select>```案例二:参数查询```<select id="selectByCondition" resultMap="userResultMap"> SELECT * FROM userWHERE 1=1<if test="name != null">AND name = #{name}</if><if test="age != null">AND age = #{age}</if></select>```总结:动态SQL在实际开发中具有一定的优势,可以提高代码的可读性和灵活性。
ibatis与hibernate区别

iBatis与Hibernate比较我在最初的选型的时候是打算选择 Hibernate 的,在研究的过程中发现了 iBatis,经过分析比较之后我选择了 iBatis。
现在我已经使用 iBatis 完成了一个中小型的项目。
这个项目在性能、可维护性、可扩展性方面都非常令我满意。
在这个过程中我也不断的与使用过或者正在使用 Hibernate 的人进行过探讨。
而且我本身也在不断的跟进 Hibernate 的发展。
最终,我的结论是 iBatis 的选择非常正确,而且越用越喜欢它了。
当然了,我对 Hibernate 的理解还是非常有限的,所以这里的关于Hibernate 的一些观点的错误之处希望能够得到 Hibernate 高手的指正。
1. iBatis 易于掌握。
拿来文档看半天到两天就可以掌握了。
Hibernate 可能需要 3 倍以上的时间来掌握。
2. iBatis 更容易进行 sql 的优化。
这个应该大家都有共识了。
另外 Hibernate 生成的 sql 也实在是太难看了。
鉴于有的朋友提到了 sql 不太重要。
我想在这里强调一下我的经验,一般系统性能的瓶颈都在数据库上。
所以这一点是 iBatis 非常重要的一个优势。
3. iBatis 可以进行细粒度的优化3.1 比如说我有一个表,这个表有几个或者几十个字段,我需要更新其中的一个字段,iBatis 很简单,执行一个sqlUPDATE TABLE_A SET column_1=#column_1# WHERE id=#id# 但是用 Hibernate 的话就比较麻烦了,缺省的情况下hibernate 会更新所有字段。
当然我记得 hibernate 有一个选项可以控制只保存修改过的字段,但是我不太确定这个功能的负面效果。
3.2 我需要列出一个表的部分内容,用 iBatis 的时候,这里面的好处是可以少从数据库读很多数据,节省流量SELECT ID, NAME FROM TABLE_WITH_A_LOT_OF_COLUMN WHERE ...3.2.1 一般情况下Hibernate 会把所有的字段都选出来。
iBatis学习总结

iBatis学习总结1.创建iBatis工程的步骤 (2)2.iBatis与传统JDBC比较 (2)3.Hibernate和ibatis的映射关系 (2)4.认识SqlMapClient接口 (2)5.SqlMapConfig标签详解 (3)(1)<properties>元素 (3)(2)<settings> 元素 (4)(3)<typeAlias>元素 (4)(4)<transactionManager>元素 (4)(5)<datasource>元素 (4)(6)<sqlMap >元素 (5)6.SqlMap标签详解 (5)(1)<cacheModel> (5)(2)<typeAlias> 类别名 (5)(3)<parameterMap> 参数类型外联映射关系 (5)(4)<resultMap>返回类型显示映射关系 (6)(5)<select> (6)(6)<insert> (7)(7)<update> (8)(8)<delete> (8)(9)<procedure> (8)(10)<statement> 执行DDL语句 (9)(11)<sql> SQL语句片段 (9)(12)<include> 组合语句 (9)(13)<selectKey> (9)7.SQL参数详解 (10)8.ibatis事务处理 (10)9.动态SQL (10)(1)一元条件标签 (11)(2)二元条件标签 (11)1.创建iBatis工程的步骤(1)建立数据库(2)创建工程(3)添加lib(4)编写sqlmapconfig.xml(5)编写sqlmap.xml(6)编写代码2.iBatis与传统JDBC比较(1)iBatis比使用JDBC编程减少了61%的代码量(2)iBatis是最简单的持久化框架(3)iBatis框架使SQL代码从程序代码中彻底分离,并且SQL语句可以重用.(4)增强了项目中的分工和项目的可移植性。
iBatis详细使用手册(.net版)
目录系列(1) 总览 (2)系列(2) 配置运行环境和日志处理 (4)系列(3) 映射文件基础 (11)系列(4) iBatisNet API基础 (14)系列(5) ParameterMap (19)系列(6) ResultMap (23)系列(1) 总览学习和使用Ibatisnet已经有一段时间了,前段时间也有写过一些与iBatis相关的Blog。
也答应过一些朋友要比较全面地介绍一下iBatis,分享自己的学习过程和使用经验,记录一些常见且容易出现的问题。
但由于前段时间一直在准备考试,而且当前的项目时间进度也比较紧,所以一直迟迟未能开始,在这里表示歉意,希望现在开始不会晚。
不过最近社区(博客园)好消息不断,我发现越来越多的人开始关注iBatis了,并且也有热心网友在极力推广,如果您已经对它已经有一些了解了,那么更推荐您去阅读ShanYou的文章,他写的文章可能更加适合您。
我本人也是一名初学者,这里记录的一些东西可能不会有很多的理论知识(理论知识还不够扎实),更多的可能是突出自己学习过程中需要很长时间来解决的一些问题,或者是个人认为特别重要,并且容易忘记的细节。
水平有限,出现错误在所难免,如在这过程中不当之处敬请愿谅,并请不啬赐教。
废话一翻后,进入今天的正题。
今天的主题是Introduction,非官方正式介绍的中文版,更多详细的介绍请参阅官方文档。
我们要使用它就必须要知道它是干什么用的,能为我们做哪些工作,开发效率如何,执行效率如何,技术难度怎么样。
提到iBatis,大家可能会与ORM技术联系起来。
是的,没错,它与ORM技术有一定程度上的联系,但是更确切地讲,它并不是一种很正统的ORM解决方案。
因为它不像NHi bernate那样,具备全自动的数据操作,包括查询,插入,更新,删除;也没有像它那样,与数据库的约束关系有紧密的联系(对NHibernate的了解不多,如果有不妥之处,希望能留下你们的臭鸡蛋,等着下回用)。
基于Struts2和iBATIS的JSP开发框架设计与实现
基于Struts2和iBATIS的JSP开发框架设计与实现摘要:在jsp应用程序存在异常处理分散、拼接sql语句繁琐易错、上下层次模块间耦合度高等问题,这些问题使系统难以扩展和维护。
本文设计并实现了一个基于struts2和ibatis的jsp开发框架,解决上述问题。
该框架已经实现并在实际开发中使用。
通过对比证明,该框架提高了jsp应用系统的灵活性和扩展性,同时也缩短了开发周期,降低了开发成本。
关键词:struts2;ibatis;jsp开发框架中图分类号:tp311.52jsp(java server pages)是常见的b/s架构(browser/server 架构)[1]实现技术之一。
在笔者为学校开发“奖助贷系统”和“认证考试报名系统”等jsp应用系统的过程中,遇到了以下问题:(1)为系统所有模块增加、修改或者移除一个功能时,需要改动大量代码,异常处理分散,当异常处理方式改变时,代码修改量也很大;(2)系统中需要大量动态拼接sql语句,在java中拼接sql语句非常繁琐,而且容易出错;(3)业务逻辑处理和数据存取之间的接口耦合度高,多个开发人员之间沟通成本也很高。
笔者通过对已开发的两个项目进行研究,设计了一个简单的jsp 开发框架,来解决上述三个问题。
1 关键技术简介1.1 mvc和struts2框架mvc框架模式全称是model-view-controller[2]。
其中,model表示业务逻辑和数据存取,view表示数据显示,controller连接model和view两部分。
mvc把数据显示(v)和数据(m)隔离,同时也把两者之间的联系(c)独立出来,三个部分各司其职,互不干扰。
struts2框架[3]对应于controller部分。
它通过编写xml配置文件,控制页面跳转。
struts2的配置代码示例如下:method=“query”>/list_s.jsp/list_t.jspstruts2的拦截器机制还能对所有请求做相同的处理[4]。
Ibatis知识点总结
目录Ibatis知识点学习总结 (2)简介 (2)特点 (2)资源 (3)第Ⅰ部分:使用ibatis开发第一个程序 (3)准备与测试 (3)使用ibatis完成对数据表的增、删、改、查操作 (4)第Ⅱ部分:Ibatis知识点总结 (11)JDBC回顾 (11)Ibatis配置文件— sqlMapConfig (12)Ibatis OR映射文件— sqlMap (16)第Ⅲ部分:SqlMap API使用方法学习总结 (24)SqlMap API使用方法与简单编程 (24)SqlMap API中重要类学习总结 (25)第Ⅳ部分:Ibatis系统架构与映射原理 (28)Ibatis框架的主要类层次结构 (28)Ibatis框架的设计策略 (29)Ibatis框架的运行原理 (30)Ibatis对SQL语句的解析 (31)Ibatis数据库字段映射到Java对象 (31)Ibatis知识点学习总结简介ibatis一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。
最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。
2010年这个项目由apache software foundation 迁移到了google code,并且改名为mybatis。
特点优点:✧简单易于掌握从只懂得JDBC操作到能够使用ibatis进行创建(Create)、更新(Update)、读取(Read)和删除(Delete)等操作可能只需要一天的时间。
✧易于进行sql优化从第一次开始使用,就会明白,用这个持久层框架需要自己完成sql语句的书写。
而hibernate可以全自动的帮我们完成这个工作。
这个半自动的ORM实现可以让我们进行sql语句的优化。
在项目中我们是使用分库分表进行数据操作,使用的数据库是开源数据库MySql。
我问过师兄这个问题,MySql能不能承受的住这么大的数据库操作频率以及复杂的业务逻辑。
基于IBatisNet框架的工资上报系统的设计与实现
S p的配 置文 件 S l pcni Iai e 配置 的核 心 。从数据 库连接 到使 用 的 S l p文 件 的相关 QLMa qMa .o f g是 B tN t s qMa 配 置都 由此文件 提供 。其关 键 配置如 下所示 :
< ? x eso ml rin: “ . ”e c dn v 1 0 n o ig= “ t一 ” > uf ? 8 < s l a C n i m ls “ tp / ai. p c e o g d tM a p r x n : s = “ tp / www . . r / 0 1 qM p o f x n = h t : Ab ts a a h . r / aa p e” mls x i g ht : / w3 o g 2 0 /
工工资到中心数据库 , 导人导 出员工工资 , 月末处理 , 各部门考核分管理 , 专项奖管理 。 () 2工资查询处理 : 主要是对工资信息的查询 , 包括查询本月l 临时工资项 , 查询员工工资, 查询部 门工资额度 ,
收稿 日期 :0 80 —4 修订 日期 :0 80 .2 2 0 .32 ; 2 0 .42
这 两种 设 计 间 是 如 何 的 不 匹 配 ,B t Ne 会 有 效 。此 I ai t总 s
外 , a s e 不对企业系统 的架构作任何假设 。不论数据 I tN t B i 库 是按业 务功能纵 向划 分 , 是 从技 术上 横 向划分 ,B t — 还 Iai s
Ne都 能够将 它与 O t O应 用程 序 有效地 整合 起来 。
摘要 : 阐述 了开发工资系统 的意义 , 对 Iai e 框架进行简 要介绍 的基础上 , 在 BtN t s 探讨 了工资上报 系统 的设计思
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定义数据库类型到dotnet数据类型的处理,不同的数据库都有一些特殊的数据库字段类型需要特殊处理,就可以通过这个功能实现。
比如说Blob字段在不同的数据库中处理不一样。
大家可以去看看Ibatisnet源代码就清楚这个功能的实现原理,对于我们的设计会有很大的启发
(6) sqlMaps节点
sqlMap节点指定了映射文件的位置,配置中可以出现多个sqlMap节点,以指定项目内所包含的所有映射文件。
5.创建实体类
定义Person的实体类,该对象类将与数据库进行映射。
可以看到,映射文件主要分为两个部分:模块配置和 Statement配置。
模块配置包括:
(1)Type Alias节点
定义了本映射文件中的别名,以避免过长变量值的反复书写,此例中通过typeAlias节点为类“IBatisNetDemo.Domain.Person”定义了一个别名“Person”,这样在本配置文件中的其他部分,需要引用“IBatisNetDemo.Domain.Person”类时,只需以其别名替代即可。
(2)cacheModel节点
定义了本映射文件中使用的Cache机制:
这里声明了一个名为“person-cache”的cacheModel,之后可以在Statement声明中对其进行引用:
(3)resultMaps节点 resultMaps实现dotnet实体到数据库字段的映射配置:
⑴ ID
指定了操作ID,之后我们可以在代码中通过指定操作id 来执行此节点所定义的操作,如:
SqlMap.Update("UpdatePerson", person);
ID设定使得在一个配置文件中定义两个同名节点成为可能(两个update节点,以不同id区分)
⑵ parameterClass
指定了操作所需的参数类型,此例中update 操作以IBatisNetDemo.Domain.Person类型的对象作为参数,目标是将提供的Person实例更新到数据库。
parameterClass="Person"中,user为“IBatisNetDemo.Domain.Person”
类的别名,别名可通过typeAlias节点指定,如示例配置文件中的:
<typeAlias alias="Person" type="IBatisNetDemo.Domain.Person,IBatisNetDemo" />
⑶ <![CDATA[……]]>
通过<![CDATA[……]]>节点,可以避免SQL 中与XML 规范相冲突的字符对XML映射文件的合法性造成影响。
⑷执行更新操作的SQL,这里的SQL 即实际数据库支持的SQL 语句,将由IBatisNet填入参数后交给数据库执行。
⑸ SQL中所需的用户名参数,“# FirstName #”在运行期会由传入的Person对象的FirstName属性填充。
⑹ SQL 中所需的用户性别参数“# LastName #”,将在运行期由传入的user 对象的LastName属性填充。
⑺ SQL中所需的条件参数“#id#”,将在运行期由传入的Person对象的Person属性填充。
对于这个示例,IBatisNet在运行期会读取id 为“UpdatePerson”的update节点的SQL 定义,并调用指定的user对象的对应getter方法获取属性值,并用此属性值,对SQL中的参数进行填充后提交数据库执行。
Statement配置包含了数个与Sql Statement相关的节点,<statement>元素是一个通用的能够包容任意类型sql的元素。
我们可以用更多细节的元素。
这些细节元素提供更好的错误检查以及一些更多的功能。
(例如,一个插入函数能够返回数据库自动生成的key)。
以下表格总结了声明类型元素以及他们的特性和属性。
其中,statement最为通用,它可以代替其余的所有节点。
除statement之外的节点对应于SQL中的同名操作(procedure对应存储过程)。
使用Statement定义所有操作,缺乏直观性,建议在开发中根据操作目的,各自选用对应的节点名加以说明。
一方面,使得配置文件更加直观,另一方面,也可以借助xsd对i节点声明进行更有针对性的检查,以避免配置上的失误。
其中“[ ]”包围的部分为可能出现的配置项,各参数说明见下表。
具体的使用方法参见IBatisNet官方文档。
四.IBatisNet组件使用
1.DomSqlMapBuilder
DomSqlMapBuilder,其作用是根据配置文件创建SqlMap实例。
可以通过这个组件从Stream, Uri, FileInfo, or XmlDocument instance 来读取sqlMap.config文件。
2.SqlMap
SqlMapper是IBatisnet的核心组件,提供数据库操作的基础平台。
所有的操作均通过SqlMapper实例完成。
SqlMapper可通过DomSqlMapBuilder创建。
这个例子中我们可以将所有的配置文件按照嵌入资源文件方式存放,从程序集去加载sqlmap.config文件。
也可以直接以文件方式加载sqlmap.config。