`
argan
  • 浏览: 129550 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ibatis3 beta 1 发布,新功能介绍

阅读更多

ibatis 3 beta 1 发布,可以去下载试用一下了,http://ibatis.apache.org/java.cgi?Preferred=http://www.apache.org/dist

 

大概读了一下User Guide,值得关注的几点:

* Namespace 现在不是optional了,是required

* 可以使用Java Annotation来配置这些sql了,不过由于java本身和annotation本身的限制,更复杂的sql还是建议使用xml

* 强类型的接口(interface binding),可以使用:

 

BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
package org.apache.ibatis.example;
public interface BlogMapper {
  @Select("SELECT * FROM blog WHERE id = #{id}")
  Blog selectBlog(int id);
}

 

 * 增加了很多扩展点,可以写不用的plugin来扩展功能,

  Executor : (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) 

 

  ParameterHandler : (getParameterObject, setParameters) 

 

  ResultSetHandler :  (handleResultSets, handleOutputParameters) 

 

  StatementHandler :   (prepare, parameterize, batch, update, query) 

 

* Configuration本身可以被替换,这个是很核心的东西了

* 动态sql增强了不少:

<select id=”findActiveBlogLike”
      parameterType=”Blog” resultType=”Blog”>
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’
  <choose>
    <when test=”title != null”>
      AND title like ${title}
    </when>
    <when test=”author != null && author.name != null”>
      AND title like ${author.name}
    </when>
    <otherwise>
      AND featured = 1
    </otherwise>
  </choose>
</select> 

 * 其他的一些增强

 

看的出来,ibatis 3.0做了很多事情,开放了很多精心设计的扩展点,使用上灵活很多,也友好很多,非常值得关注啊

 

说实话,从wiki上最早的关于3.0的讨论开始,我就开始关注相关信息了,svn,wiki,maillist,非常不错,推荐大家看看。

 


分享到:
评论
33 楼 hst1189 2010-08-06  
evaspring 写道
是否增强了?


同问分页机制 ?
32 楼 evaspring 2010-07-21  
分页机制是否增强了?
31 楼 bluethink 2010-07-04  
还没用过,正要试试
30 楼 luoxj 2010-04-06  
3是否有解决1:M和M:N的问题了。
29 楼 kaki 2010-02-20  
Spring2.5 还是不支持啊!郁闷中!
28 楼 tobackfurture 2009-10-29  
要不我们一起把文档给翻译了吧,一人一张!
中不?
27 楼 reniaL 2009-09-29  
出来后有简单试用了一下。

文档还不完善,甚至有错误的地方(例如hyxw5890说的resultType和resultClass的问题),新人的话还是先用2吧,毕竟现在3还是beta。

还有那个iBatis Migrations,用来管理数据库变更的,感觉跟ROR的模式很像,不过功能也忒简单了点,还不实用。

希望正式版能有所改进吧~
26 楼 raymond2006k 2009-09-27  
ibatis 3 貌似对 SessionFactory 也支持了,向 Hibernate,toplink 等架构靠拢了。

ibatis 对分布式缓存支持的不太好,希望能有实质性的改进。
25 楼 lixjluck 2009-09-24  
jones_ahk 写道
下载了IBatis3的源码,编译通过后,结合Spring2.5,发现原来IBatis2中的一些class都不存在了,不知道是什么原因??
由于IBatis3与2的区别太大了,现在想用2吧又不敢(后续升级简直太困难了),不用2吧3又不稳定,而且与Spring集成有问题,现在都不知道咋办了!!


3不兼容2的,且spring目前也不支持3
如项目用,那就先用2.3的版本吧
24 楼 lggege 2009-09-18  
1. 我一直都觉得没必要写一个DAO impl类, 太麻烦了, 还不如直接使用DAO的方法名去SQL-MAP文件去找呢.

2. 我也认为namespace没有那么必要, 可以直接使用DAO的类名.
23 楼 lnaigg 2009-08-18  
一向对anotation不感兴趣,对动态SQL感兴趣。

不过不明白动态SQL这部分为什么不直接用模版语言实现(velocity或freemarker).
现在的风格像XSL,比较笨拙,看着累。
22 楼 argan 2009-08-17  
jones_ahk 写道
下载了IBatis3的源码,编译通过后,结合Spring2.5,发现原来IBatis2中的一些class都不存在了,不知道是什么原因??
由于IBatis3与2的区别太大了,现在想用2吧又不敢(后续升级简直太困难了),不用2吧3又不稳定,而且与Spring集成有问题,现在都不知道咋办了!!


ibatis3 现在还是beta,不建议在生产环境中使用,当然如果愿意承担一些风险另说
21 楼 jones_ahk 2009-08-17  
下载了IBatis3的源码,编译通过后,结合Spring2.5,发现原来IBatis2中的一些class都不存在了,不知道是什么原因??
由于IBatis3与2的区别太大了,现在想用2吧又不敢(后续升级简直太困难了),不用2吧3又不稳定,而且与Spring集成有问题,现在都不知道咋办了!!
20 楼 totobacoo 2009-08-16  
Spring 还没跟上,暂时只有等待
19 楼 jones_ahk 2009-08-16  
Spring还没有发布对其新版本的整合,com.ibatis.sqlmap.client.SqlMapClient这个文件不知道在新版本中哪个jar中,貌似新版本中没有找到该类。
18 楼 moss 2009-08-15  
弱弱的问下,如果 "".equals(title)类似这样的如何判断,或者num>10这样的条件如何来写呢?
如此来写吗?
<when test=”title != ‘’ ”> 
      AND title like ${title} 
</when> 

<when test=”num>10 ”> 
      AND title like ${title} 
</when> 
17 楼 lixjluck 2009-08-14  
动态SQL增强了
期待它的的稳定
16 楼 zeroxin 2009-08-14  
什么好东西用滥了都不好了,anotation在有的地方使用还是方便的。
15 楼 kqy929 2009-08-13  
<p>ibatis 3.0中将DAO Interface给完全真空了。</p>
<p>AuthorMapper.class</p>
<pre name="code" class="java">public interface AuthorMapper {

Author selectAuthor(int id);

void insertAuthor(Author author);

void updateAuthorIfNecessary(Author author);

}
</pre>
<p> </p>
<p>AuthorMapper.xml</p>
<pre name="code" class="java">&lt;mapper namespace="domain.blog.mappers.AuthorMapper"&gt;

  &lt;parameterMap id="selectAuthor" type="domain.blog.Author"&gt;
    &lt;parameter property="id"/&gt;
  &lt;/parameterMap&gt;
   &lt;!-- id 对应接口中的方法 --&gt;
  &lt;resultMap id="selectAuthor" type="domain.blog.Author"&gt;
    &lt;id column="id" property="id"/&gt;
    &lt;result property="username" column="username"/&gt;
    &lt;result property="password" column="password"/&gt;
    &lt;result property="email" column="email"/&gt;
    &lt;result property="bio" column="bio"/&gt;
    &lt;result property="favouriteSection" column="favourite_section"/&gt;
  &lt;/resultMap&gt;

  &lt;select id="selectAuthor"
          parameterMap="selectAuthor"
          resultMap="selectAuthor"&gt;
    select id, username, password, email, bio, favourite_section
    from author where id = ?
  &lt;/select&gt;

  &lt;insert id="insertAuthor"
          parameterType="domain.blog.Author"&gt;
    insert into Author (id,username,password,email,bio)
    values (#{id},#{username},#{password},#{email},#{bio})
  &lt;/insert&gt;

  &lt;update id="updateAuthorIfNecessary"
          parameterType="domain.blog.Author"&gt;
    update Author
      &lt;set&gt;
        &lt;if test="username != null"&gt;username=#{username},&lt;/if&gt;
        &lt;if test="password != null"&gt;password=#{password},&lt;/if&gt;
        &lt;if test="email != null"&gt;email=#{email},&lt;/if&gt;
        &lt;if test="bio != null"&gt;bio=#{bio}&lt;/if&gt;
      &lt;/set&gt;
    where id=#{id}
  &lt;/update&gt;
&lt;/mapper&gt;</pre>
<p>   Client:</p>
<p>   </p>
<pre name="code" class="java">public class SimpleSqlSessionTest {
private static SqlSessionFactory sqlMapper;

@Before
public void setUp() throws Exception {
final String resource = "org/apache/ibatis/builder/MapperConfig.xml";
final Reader reader = Resources.getResourceAsReader(resource);
sqlMapper = new SqlSessionFactoryBuilder().build(reader);
}

@Test
public void shouldSelectOneAuthor() throws Exception {
SqlSession session = sqlMapper.openSession();
try {
Author author = (Author) session.selectOne( "domain.blog.mappers.AuthorMapper.selectAuthor",
new Author(101));
assertEquals(101, author.getId());
assertEquals(Section.NEWS, author.getFavouriteSection());
} finally {
session.close();
}
}

@Test
public void shouldUpdateAuthorIfNecessary() throws Exception {
SqlSession session = sqlMapper.openSession();
Author original;
Author updated;
try {
original = (Author) session.selectOne( "domain.blog.mappers.AuthorMapper.selectAuthor", 101);
original.setEmail("new@email.com");
original.setBio(null);
session.update( "domain.blog.mappers.AuthorMapper.updateAuthorIfNecessary", original);

updated = (Author) session.selectOne( "domain.blog.mappers.AuthorMapper.selectAuthor", 101);
assertEquals(original.getEmail(), updated.getEmail());
session.commit();
} finally {
session.close();
}

try {
session = sqlMapper.openSession();
updated = (Author) session.selectOne( "domain.blog.mappers.AuthorMapper.selectAuthor", 101);
assertEquals(original.getEmail(), updated.getEmail());
} finally {
session.close();
}
}
}</pre>
<p> </p>
<p> </p>
<p>至于anotations<span style="">完全是画蛇添足,华而不实。</span></p>
14 楼 walle1027 2009-08-13  
期待出正式版

相关推荐

    ibatis3资料-介绍

    ### iBATIS 3:简介与新功能 iBATIS是一个开源框架,旨在简化Java应用程序中的数据访问层(DAO)的开发。它提供了一种基于SQL映射的方式,使开发者能够更加灵活地处理数据库交互,而无需编写繁琐的JDBC代码。iBATIS...

    iBATIS3 beta2 测试完整实例

    iBATIS3 beta2 是一个基于Java的持久层框架,它是对原先的iBATIS2的一个重大升级。这个测试完整实例旨在帮助开发者更好地理解和运用iBATIS3的新特性,特别是对于那些正在从早期版本迁移或者初次接触iBATIS3的人来说...

    Spring 3.0 整合 iBatis 3 Beta10 配置

    在Spring 3.0中整合iBatis 3 Beta10是一个相对复杂的过程,因为官方文档并未明确提及对iBatis 3的支持。不过,通过一些自定义配置和理解两个框架的基本原理,开发者可以实现这样的整合。下面我们将详细介绍如何进行...

    Ibatis3手册 Ibatis3参考手册

    本篇文章基于“Ibatis3手册 Ibatis3参考手册”的标题及描述,深入解析Ibatis3的核心概念、架构特点以及如何进行实际操作,旨在帮助读者全面理解Ibatis3的工作原理与应用场景。 ### 一、Ibatis3简介 Ibatis3是一款...

    iBATIS3 beta2 英文文档

    iBATIS 3是一款开源的持久层框架,它简化了Java应用程序与...总之,iBATIS 3是一个功能强大且灵活的持久层框架,通过丰富的配置选项和强大的动态SQL功能,为Java开发者提供了一种高效、简洁的数据库操作解决方案。

    ibatis3开发指南

    本文采用的是ibatis3 beta9版本,尽管是测试版,但接近通用版本(GA),因此其功能和稳定性值得信赖,预计在GA版本发布后,本文介绍的例子同样适用。 三、数据库选择与抽象层的重要性 ibatis3的核心价值在于它提供...

    IBATIS3代码生成器

    【标题】"IBATIS3代码生成器"是一款专为基于IBATIS3框架的项目设计的工具,它能够自动生成常见的SQL映射文件、Java DAO接口和实现类,大大提高了开发效率,降低了手动编写这些代码的工作量。该工具的核心理念是通过...

    ibatis系列 详细介绍

    1. **iBATIS概述**:介绍iBATIS的基本概念、设计理念和核心组件,包括SqlMapConfig.xml配置文件、SqlMap接口和SqlMapClient对象等。 2. **映射文件**:详述了SqlMap映射文件的结构和元素,如sql、select、insert、...

    ibatis3__发布_入门示例

    标题与描述概述的知识点主要集中在iBatis 3(现称为MyBatis)的入门级应用,特别是关于如何在Web项目中集成并使用这个框架。iBatis 3是一个持久层框架,它允许开发者通过XML配置文件或注解来映射SQL语句,从而简化了...

    ibatis最新

    3. ibator-1.2.1.681.jar:这是Ibatis Auto Generator(Ibator)的jar包,是一个代码生成工具,能够自动生成基于Ibatis的DAO层、实体类和XML配置文件,极大地提高了开发效率,降低了手动编写这些重复代码的工作量。...

    ibatis_struts2_spring_介绍

    ibatis_struts2_spring_介绍

    第一个ibatis3工程

    此外,iBatis3还提供了动态SQL的功能,使得在映射文件中可以编写条件语句,大大提高了SQL的可维护性。例如,可以使用`if`、`choose`、`when`、`otherwise`等标签来构建动态查询。 最后,运行工程并测试。通过JUnit...

    iBatis技术框架介绍

    iBatis技术框架介绍。ibatis2.x教程。

    iBATIS 3 内的新特性.pdf

    为了更好地理解iBATIS 3的新特性,我们首先需要了解其核心功能: 1. **持久化框架**:iBATIS 3是一个持久化框架,用于配置Java类的属性和RDBMS内的表列之间的映射。 2. **配置方式**:可以使用XML文件来配置iBATIS ...

    ibatis 3 核心包

    总的来说,Ibatis 3的核心包提供了完整的数据访问框架,包括配置管理、SQL执行、参数处理和结果转换等一系列功能,使得开发者可以方便地进行数据库操作,降低了数据访问层的复杂度,提升了开发效率。

    ibatis总结 ibatis ibatis ibatis ibatis

    1. Ibatis SQL映射: Ibatis的主要特点是通过XML或注解定义SQL映射文件,将SQL语句与Java对象绑定。例如,`&lt;select&gt;`标签用于定义查询语句,`&lt;insert&gt;`、`&lt;update&gt;`和`&lt;delete&gt;`分别对应增删改操作。在SQL映射文件...

    ibatis3应用实例(oracle数据库)

    Ibatis3与Oracle数据库的结合,既发挥了Oracle的强大数据库功能,又利用了Ibatis3的灵活性和易用性。通过深入理解并实践Ibatis3的动态SQL和CRUD操作,开发者可以在Oracle环境下构建高效、稳定的数据库应用系统。在...

    ibatis的增删改查功能

    总结,Ibatis以其简单易用、灵活高效的特性在Java开发中占据重要地位,其增删改查功能的实现让开发者能更加专注于业务逻辑,而不是繁琐的JDBC操作。对于初学者来说,深入理解Ibatis的CRUD操作及其相关配置,对提升...

    iBatis 3 用户指南

    在《iBatis 3 用户指南》中,不仅涵盖了上述基本概念和用法,还会详细介绍如何集成iBatis 3到Spring等其他框架中,以及如何处理复杂查询、事务管理和异常处理等问题。通过阅读这份指南,开发者可以全面掌握iBatis 3...

Global site tag (gtag.js) - Google Analytics