Mybatis Mapper XML文件-查询(select)

MyBatis真正的力量在于映射语句(Mapped Statements)。这是魔力发生的地方。尽管拥有强大的功能,Mapper XML文件相对来说比较简单。如果将其与等效的JDBC代码进行比较,您会立即看到代码减少了95%。MyBatis专注于SQL的编写,并尽最大努力不干扰您的方式。

Mapper XML文件仅有几个一级元素(按照定义的顺序):

  • cache – 针对给定命名空间的缓存配置。
  • cache-ref – 从另一个命名空间引用缓存配置。
  • resultMap – 最复杂和强大的元素,描述如何从数据库结果集加载对象。
  • sql – 可以被其他语句引用的可重用SQL代码片段。
  • insert – 映射的INSERT语句。
  • update – 映射的UPDATE语句。
  • delete – 映射的DELETE语句。
  • select – 映射的SELECT语句。
 select

在MyBatis中,select语句是最常用的元素之一。将数据存入数据库并不是非常有价值,直到你将其取回才变得有意义,因此大多数应用程序进行的操作更多是查询而不是修改数据。对于每个插入、更新或删除操作,可能会有很多查询操作。这是MyBatis的一个基本原则,也是为什么在查询和结果映射方面付出了如此多的关注和努力的原因。对于简单的情况,select元素非常简单。例如:

 这个语句被称为selectPerson,接受一个类型为int(或Integer)的参数,并返回一个以列名为键,行值为值的HashMap。

请注意参数表示方式:

#{id}

这告诉MyBatis要创建一个PreparedStatement参数。在JDBC中,这样的参数会被一个“?”来表示,在传递给新的PreparedStatement的SQL中会是这样的形式:

// Similar JDBC code, NOT MyBatis…
String selectPerson = "SELECT * FROM PERSON WHERE ID=?";
PreparedStatement ps = conn.prepareStatement(selectPerson);
ps.setInt(1,id);

当然,仅使用JDBC需要更多的代码来提取结果并将其映射到对象的实例中,而这正是MyBatis帮助您避免做的。

select元素还有更多的属性,允许您配置每个语句的详细行为。