什么是iBatis:
使用ibatis 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象, 这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate 会自动生成SQL 语句,而ibatis 则要求开发者编写具体的SQL 语句。相对Hibernate等 “全自动”ORM机制而言,ibatis 以SQL开发的工作量和数据库移植性上的让步,为系统 设计提供了更大的自由空间。作为“全自动”ORM 实现的一种有益补充,ibatis 的出现显 得别具意义。
使用iBatis开发项目工作量比较大,因为每个sql语句都必须自己写。一般的CRUD sql都是sql 92规范,基本上都通用所有数据库。我想如果可以通过hack ibatis源代码实现自动生成iql(ibatis sql)可以简化多少开发量啊。(最开始有这个想法是因为ibatis for .net实现了这个功能,而ibatis for java没有)
说干就干,决定依照ibatis for .net的实现方式来实现,通过sql-map的parametermap来实现。以最小代码来实现该功能。
查看了相关dtd后,发现《parameter》节点没有column定义,《parameterMap》节点没有extends定义,《result》和《resultMap》这倒是有。于是修改dtd定义和BasicParameterMapping类,使其支持column。并且修改SqlMapParser类,使其初始化的时候支持column和extends。加入column的目的是为了支持java属性对应到不同的字段上。加入extends的目的是为了重用parametermap。
parameter修改完成后,就要修改dtd文档定义,使其支持《generate》节点,我们只需要《insert》、《update》、《delete》、《select》这四个节点支持就行,《statement》和《sql》节点考虑在下一版支持。generate需要三个属性,分别是table、where、excludes。其中table表示是对应的表,适用于所有;where表示查询条件字段,适用于select、update、delete;excludes表示要排除哪些parameter,适用于select、update。
dtd文档定义修改完成后,就可以修改ibatis加载类,使其支持generate。这个切入点比较难找,因为要仔细分析他的源代码。经过仔细思考后,发现ibatis和sql-map支持《include》,决定在include后面加入generate的解析代码。这样比较方便的找到了切入点。
找到SqlStatementParser类,找到了parseDynamicTags方法,里面就有include的解析。这里面的判断代码是else if,我再加入一个generate的else if 就OK啦。经过一天的修改,完成。工作量也不是太大。
哈哈,下篇日志发布出hack过后的ibatis代码和demo。
原创文章,如果要转载请注明出处、原始地址和作者信息。
分享到:
相关推荐
本项目提供的"mybatis自动sql生成插件源码"则进一步提升了开发效率,通过拦截器(Interceptor)在运行时自动生成SQL语句,适用于具有主键或唯一索引的单表操作。 首先,`AutoMapperInterceptor.java`是这个插件的...
XML文件中的每个元素都将对应数据库表的字段,使你可以直接在代码中调用这些预定义的SQL语句。 XML映射文件的生成包括以下几个关键部分: 1. `select`标签:用于查询操作,通常包含`id`(唯一标识符)、`resultMap`...
1. **代码生成器工具**:市面上存在多种Ibatis代码生成器,如MyBatis Generator(MBG)、Ibatis Code Generator等。这些工具通常需要用户配置数据库连接信息、表名和字段信息,然后能够自动生成对应的Mapper XML文件...
根据MyBatis或iBatis的SQLMapper文件解析生成数据库表,通常是指通过解析MyBatis或iBatis的SQLMapper文件中的SQL语句,然后根据这些SQL语句来生成对应的数据库表结构。这样的需求可能源于需要将已有的SQLMapper文件...
总的来说,这个Ibatis生成工具通过自动化的方式,减轻了开发过程中重复性的工作,使得开发者可以更专注于业务逻辑的实现。它的特点是生成的代码简洁,没有冗余的注释或其他不必要内容,同时配置过程简单明了。对于...
iBatis框架中的动态SQL主要通过XML映射文件来实现,它允许在映射文件中使用各种标签来控制SQL语句的生成过程。这些标签包括但不限于`<if>`、`<choose>`、`<when>`、`<otherwise>`、`<trim>`、`<where>`、`<set>`、`...
iBATIS通过`<iterate>`标签支持数组的遍历,将数组中的每个元素作为独立的值插入到SQL语句中。例如,`(" close=")" conjunction=",">`这段代码会将`actionIds`数组中的每个元素以逗号分隔的形式插入到SQL语句中,...
总结来说,Ibatis SQL生成工具是一款强大的开发辅助工具,它通过Web应用的方式提供多数据库支持,能够帮助开发者快速生成Ibatis所需的SQL语句和相关Java代码,提高开发效率,降低出错率,是现代企业级开发中的得力...
使用Ibatis生成工具,我们可以方便地根据数据库表结构自动生成实体类。实体类中的每个属性都与数据库表的列相对应,且自动带有getter和setter方法。此外,实体类还可能包含一些与Ibatis映射相关的注解,如`@Table`, ...
Ibatis作为轻量级的ORM(对象关系映射)框架,其核心功能是通过XML或注解的方式将Java对象与SQL语句进行映射,避免了直接编写大量的JDBC代码。这大大提高了开发效率,降低了出错的可能性,并且支持动态SQL,提供了...
ibatis还支持动态SQL,允许根据不同的条件生成不同的SQL语句,这对于复杂的查询非常有用。 ##### 4.1 `if`标签 ```xml SELECT * FROM USERS != null"> AND name = #{name} ``` 这里使用`<if>`标签来...
通过自动生成SQLMapper脚本,开发者可以快速地构建数据访问层,减少手动编写SQL和映射文件的工作量,使项目更加规范且易于维护。这不仅提高了开发效率,也为团队协作提供了便利,确保代码的一致性和可读性。在实际...
2. **分析表结构**:连接成功后,工具会读取指定库中的表信息,包括表名、字段名、字段类型等,这是生成SQL语句的基础。 3. **生成Mapper接口**:基于表结构,工具会自动生成对应表的Mapper接口,包含CRUD(Create...
【ibatis代码自动生成代码程序】是一个实用工具,旨在帮助开发者快速生成基于iBATIS框架的Java代码。iBATIS,作为一个数据访问层框架,它允许程序员将SQL语句与Java代码分离,提供了一种简单但强大的方式来处理...
在Java开发中,MyBatis Generator(MBG)是一个强大的工具,它可以帮助开发者自动生成SQL映射文件、Java实体类以及对应的DAO接口。标题“自动生成iBatis 实体类文件”表明我们要讨论的是如何利用MBG来自动化创建与...
Ibatis允许开发者直接编写SQL语句,将数据库操作与Java代码解耦,提供更灵活的数据访问控制。在主键生成方面,Ibatis提供了多种策略,以适应不同的数据库环境和业务需求。 1. **手工指定主键**:这是最基础的方式,...
WAS 上 log4j 日志不能...解决 WAS 上 log4j 日志不能输出(ibatis)sql 语句的问题需要改变 WAS 的默认 LogFactory 实现类,使其使用 log4j 框架下的 LogFactory 实现类,并且需要正确配置 log4j.properties 文件。
iBatis提供了动态SQL片段的功能,可以将SQL语句拆分成小的、独立的片段,然后根据不同的条件组合这些片段生成最终的SQL语句。这可以提高代码的可重用性和灵活性。 例如,在上面的代码中,我们定义了三个动态SQL片段...