翻译:iBATIS 3.0 草案——约定俗成的配置方式

Posted on 2007-06-26 09:47 Tommy Jian 阅读(1746) 评论(1)  编辑  收藏 所属分类: iBATIS

约定俗成

   Clinton说:这一点是与我们以前所坚持的原则不相符合的。认识我的人都知道我基本上算是一个完美的人。但是如果我们从最佳实践的角度去考虑,我们必须在解决复杂问题的时候也使用尽量简单的解决方案。当然,那些不太喜欢约定俗成式配置的人可以忽略这种配置方式。但是我相信这是非常有用的,特别是对插入、删除和更新操作来说。使用这种配置方式,一些简单的查询也将从中受益。

   默认情况下,iBATIS 3.0将使用约定俗成式的配置方式。Java 5的方法语义中已经包含了生成SQL、进行参数和结果映射足够的信息。例如:

Employee getEmployee (int id);

   这些信息对于生成以下SQL已经足够了:

SELECT id, firstName, lastName FROM Employee WHERE id = ?

   结果类型与方法的返回值类型是一致的。因为方法的返回值类型不是集合类型,所以我们知道正在处理“Select One”语义。表的名称被假定为与结果类型的名称一致。而查询参数就被假定为方法对应的参数。在使用其他的配置方式的时候,我们可以更改默认ID参数的配置。SQL语句中的各数据列假定与方法返回类型的同名属性一一对应,当然这些配置都是可以更改的。

   集合类型也是以同样的方式工作:

List listAllEmployees ();

   这个例子将产生以下SQL语句:

SELECT id, firstName, lastName FROM Employee

   我们可以将这个例子叫做“Select Many”,因为这个方法返回了一个集合类型。我们知道Where子句为空,因为这个方法没有任何参数。

   如果我们想使用参数式查询,我们可以这样来做:

List findEmployeesLike(Employee employee);

   假设只有参数的lastName,而其他引用类型都为null值,原始类型都被设置为非法无意义的值(比如-1),我们将得到以下的SQL语句:

SELECT id, firstName, lastName FROM Employee WHERE lastName = 'Begin'

   或者可以直接按参数来进行:

List findEmployeeByLastNameAndFirstName (String last, String first);

   这将生成以下的SQL语句:

SELECT id, firstName, lastName FROM Employee WHERE lastName = 'Begin' AND firstName = 'Clinton'

   因为C#支持参数名称的反射,所以C#对这种方法提供了更好的支持。形式上也变得相对清晰,当然实质是一样的:

// C#
IList FindEmployeesLike(string lastName, string firstName);
// And in C# 3.0, we can use anonymous types:
IList FindEmployeesLike(object obj);
//...
IList employees = mapper.FindEmployeesLike(new {LastName="Begin", FirstName="Clinton"});

   更新操作也以相同的方式操作:

void insertEmployee (Employee emp);
void updateEmployee (Employee emp);
void deleteEmployee (Employee emp);

   也可以自动接受集合参数:

int insertEmployee (List emps); // returns rows inserted
int updateEmployee (List emps); // returns rows updated
int deleteEmployee (List emps); // returns rows deleted

   生成器相当的灵活,而且可以为大多数删除甚至更新操作生成一条SQL语句。

Feedback

# re: 翻译:iBATIS 3.0 草案——约定俗成的配置方式  回复  更多评论   

2009-12-17 21:41 by 团派家园
什么时候会好用呢?

只有注册用户登录后才能发表评论。


网站导航: