(本文章于2010-06-30更新以适应mybatis的最新版本)
作为rapid-framework路线图的一部分,集成ibatis3也是以后要更新的内容之一.
现编写了ibatis3的代码例子.
一.首先我们来看现在的xml mapper关于增删改查的编写
<mapper namespace="UserInfo">
<resultMap id="RM.UserInfo" type="com.company.project.model.UserInfo">
<result property="userId" column="USER_ID"/>
<result property="username" column="USERNAME"/>
<result property="password" column="PASSWORD"/>
<result property="birthDate" column="BIRTH_DATE"/>
<result property="sex" column="SEX"/>
<result property="age" column="AGE"/>
</resultMap>
<!-- 用于select查询公用抽取的列 -->
<sql id="UserInfo.columns">
<![CDATA[
USER_ID,
USERNAME,
PASSWORD,
BIRTH_DATE,
SEX,
AGE
]]>
</sql>
<!-- useGeneratedKeys="true" keyProperty="xxx" for sqlserver and mysql -->
<insert id="UserInfo.insert" useGeneratedKeys="true" keyProperty="userId">
<![CDATA[
INSERT INTO USER_INFO (
USER_ID ,
USERNAME ,
PASSWORD ,
BIRTH_DATE ,
SEX ,
AGE
) VALUES (
#{userId} ,
#{username} ,
#{password} ,
#{birthDate} ,
#{sex} ,
#{age}
)
]]>
<!--
oracle: order="BEFORE" SELECT sequenceName.nextval AS ID FROM DUAL
DB2: order="BEFORE"" values nextval for sequenceName
<selectKey resultType="java.lang.Long" order="BEFORE" keyProperty="userId">
SELECT sequenceName.nextval AS ID FROM DUAL
</selectKey>
-->
</insert>
<update id="UserInfo.update" >
<![CDATA[
UPDATE USER_INFO SET
USERNAME = #{username} ,
PASSWORD = #{password} ,
BIRTH_DATE = #{birthDate} ,
SEX = #{sex} ,
AGE = #{age}
WHERE
USER_ID = #{userId}
]]>
</update>
<delete id="UserInfo.delete">
<![CDATA[
DELETE FROM USER_INFO WHERE
USER_ID = #{id}
]]>
</delete>
<select id="UserInfo.getById" resultMap="RM.UserInfo">
SELECT <include refid="UserInfo.columns" />
<![CDATA[
FROM USER_INFO
WHERE
USER_ID = #{id}
]]>
</select>
<sql id="UserInfo.findPage.where">
<!-- ognl访问静态方法的表达式 为@class@method(args),以下为调用rapid中的Ognl.isNotEmpty()方法,还有其它方法如isNotBlank()可以使用,具体请查看Ognl类 -->
<where>
<if test="@Ognl@isNotEmpty(userId)">
AND USER_ID = #{userId}
</if>
<if test="@Ognl@isNotEmpty(username)">
AND USERNAME = #{username}
</if>
<if test="@Ognl@isNotEmpty(password)">
AND PASSWORD = #{password}
</if>
<if test="@Ognl@isNotEmpty(birthDateBegin)">
AND BIRTH_DATE >= #{birthDateBegin}
</if>
<if test="@Ognl@isNotEmpty(birthDateEnd)">
AND BIRTH_DATE <= #{birthDateEnd}
</if>
<if test="@Ognl@isNotEmpty(sex)">
AND SEX = #{sex}
</if>
<if test="@Ognl@isNotEmpty(age)">
AND AGE = #{age}
</if>
</where>
</sql>
<select id="UserInfo.findPage.count" resultType="long">
SELECT count(*) FROM USER_INFO
<include refid="UserInfo.findPage.where"/>
</select>
<!--
分页查询已经使用Dialect进行分页,也可以不使用Dialect直接编写分页
因为分页查询将传 offset,pageSize,lastRows 三个参数,不同的数据库可以根于此三个参数属性应用不同的分页实现
-->
<select id="UserInfo.findPage" resultMap="RM.UserInfo">
SELECT <include refid="UserInfo.columns" />
FROM USER_INFO
<include refid="UserInfo.findPage.where"/>
<if test="@Ognl@isNotEmpty(sortColumns)">
ORDER BY ${sortColumns}
</if>
</select>
</mapper>
与ibatis2 sqlmap的主要异同:
1. insert节点现在可以直接指定mysql auto_increment(或是sqlserver identity)的主键生成策略
useGeneratedKeys="true" keyProperty="userId"
2.动态构造sql部分,test部分采用的是struts2 ognl表达式,还有choose,foreach语句等,跟struts2 tag是否很像呢?
(注:此处现可以使用ONGL访问静态方法来解决:@Ognl@isNotEmpty(userId))
Ognl静态方法调用
二.构造SqlSessionFactory,以前的SqlMapClient
Reader reader = Resources.getResourceAsReader("Configuration.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
三. 配置文件Configuration.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/company/project/model/mapper/UserInfoMapper.xml" />
</mappers>
</configuration>
以上就是完整的示例, 具体demo代码下载: http://rapid-framework.googlecode.com/files/ibatis3_demo.zip
ibatis3 annotation评价:
难听点,根本是个脑残方案,如果用annotation写,我还不如使用类似jdbc的java代码. 不知道自己优势是在xml文件,瞎跟风.
而spring现在还没有对ibatis3集成,不过以后rapid会先与spring发布ibatis3的插件, 只提供生成器模板,现不自己开发集成,等待spring. 当然以后对提供类似ibatis2的基于方言Dialect的分页还是会提供的.
最后仍然做下广告: rapid-framework, 现最好的项目脚手架
http://code.google.com/p/rapid-framework/
分享到:
相关推荐
《Ibatis/mybatis代码生成工具详解》 在Java开发领域,Ibatis和Mybatis作为两款广泛应用的持久层框架,极大地简化了数据库操作。为了进一步提高开发效率,开发者们设计了一系列的代码生成工具,如"Ibatis Helper"和...
同时,通过对源码的分析,开发者可以更好地利用这两个框架提供的功能,例如:利用Mybatis的注解简化开发,或者使用Ibatis的动态SQL提高查询效率。 在实践中,IbatisExer和MybatisExer这两个项目提供了一系列的示例...
总的来说,`iBatis` 和 `MyBatis` 通过提供直观的接口和灵活的SQL映射,大大降低了数据库操作的复杂性,使得开发者可以专注于业务逻辑,而不是繁琐的JDBC代码。通过熟练掌握这两个框架,你可以轻松地进行`CRUD`操作...
标题“ibatis2mybatis-master.zip”所指的是一款工具或服务,用于将基于iBATIS的数据访问框架的代码自动转换为使用MyBatis框架的代码。iBATIS和MyBatis都是Java开发中常用的持久层框架,它们帮助开发者简化数据库...
压缩包中的"books"可能是一个示例项目,包含了使用Ibatis和Mybatis进行CRUD和分页操作的代码实例。通过阅读和分析这些代码,开发者可以更深入地理解如何在实际项目中应用这两个框架。 总的来说,这份资源对于学习...
标题 "从iBatis迁移到MyBatis" 暗示了本次讨论的主题是关于数据库持久层框架的升级,从较早的iBatis转向更现代的MyBatis。iBatis是一个Java语言中的SQL映射框架,而MyBatis是在iBatis的基础上发展起来的,提供了更多...
本篇文章将探讨从ibatis2.x升级到mybatis3.x的过程,揭示其中的技术变迁和核心变化。 Ibatis2.x是一款轻量级的ORM框架,它允许开发者通过SQL Map配置文件来编写SQL语句,提供了灵活的SQL控制。然而,随着技术的发展...
可以帮你将 ibatis 2.x sqlmap 文件转换为 myBatis 3.x mapper 文件,该工具是使用了 Ant 构建任务进行 XSTL 转换和一些语法文字替换 该工具下载下来使用非常简单,把你要转换的所有 sqlmap 文件放到 source 文件夹...
ibatis和mybatis对比
MyBatis和iBatis是两个著名的Java持久层框架,它们都致力于简化数据库与Java代码之间的交互。在Java开发中,代码生成工具可以极大地提高开发效率,减少手动编写重复的CRUD(创建、读取、更新、删除)操作。本压缩包...
Spring MVC、iBatis 和 MyBatis 是Java开发中常用的三个框架,它们分别在Web层、数据访问层有着重要作用。让我们深入探讨这三个框架的核心概念、使用场景以及它们之间的关系。 **Spring MVC** Spring MVC是Spring...
在Java EE开发领域,iBatis和MyBatis是两个广受欢迎的持久层框架,它们都提供了SQL映射的功能,帮助开发者处理数据库操作。iBatis作为早期的代表,以其简洁和灵活性赢得了开发者们的青睐,特别是对于熟悉SQL的程序员...
在里面总结了ibatis和mybatis的主要区别,包括xml文件等
《2011最新ibatis+Mybatis+Spring整合文档全集以及案例》是一份珍贵的资源,包含了关于这三个著名Java技术的详细信息和实践案例。这篇文章将深入探讨ibatis、Mybatis和Spring框架的整合,以及它们在实际开发中的应用...
spring mybatis ibatis 实例(源代码)
MyBatis3用户指南中文版.pdf涵盖了MyBatis的全部内容,包括MyBatis的安装、配置、Mapper接口的使用、XML和注解方式的SQL映射、结果映射、参数映射、缓存机制、动态SQL以及如何自定义插件等。 在学习这两个框架时,...
MyBatis 3 User Guide Simplified Chinese.pdf MyBatis-3.0.3-Migrations.pdf MyBatis-3.0.3-User-Guide.pdf MyBatis-3-Migrations.doc MyBatis-3-Migrations.pdf MyBatis-3-User-Guide.doc MyBatis-3-User-Guide....
注意,ibatis(ibatis2)和mybaits(ibatis3)的xml文件中有一些语法不一样,例如 select 等元素的 parameterClass 属性改为了 parameterType 属性,resultClasss 属性改为了 resultType 属性; parameterMap 等元素的 class...
通过对ibatis与myBatis之间区别的详细分析,我们可以看到myBatis不仅继承了ibatis的优点,还在很多方面进行了改进和优化,使得其在功能性和易用性上都有了显著提升。对于开发者而言,选择myBatis作为持久层框架可以...
它将SQL语句与Java代码分离,提供了一种灵活的方式来控制数据库操作,避免了传统的JDBC中的大量模板代码,提高了开发效率。iBatis 2.3.5是其在2.x系列中的一个重要版本,具备稳定性高、灵活性强等特点。 二、iBatis...