全国首批9所重点马院网站建设,广州企业公司大全,免费的推广引流软件下载,网店设计与装修MyBatis真正的力量在于映射语句#xff08;Mapped Statements#xff09;。这是魔力发生的地方。尽管拥有强大的功能#xff0c;Mapper XML文件相对来说比较简单。如果将其与等效的JDBC代码进行比较#xff0c;您会立即看到代码减少了95%。MyBatis专注于SQL的编写#xff…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元素非常简单。例如
select idselectPerson parameterTypeint resultTypehashmapSELECT * FROM PERSON WHERE ID #{id}
/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元素还有更多的属性允许您配置每个语句的详细行为。
selectidselectPersonparameterTypeintparameterMapdeprecatedresultTypehashmapresultMappersonResultMapflushCachefalseuseCachetruetimeout10fetchSize256statementTypePREPAREDresultSetTypeFORWARD_ONLY
Attribute属性Description描述id在这个命名空间中的一个唯一标识符可以用来引用这个语句。parameterType完全限定的类名或参数的别名将传递给这个语句。这个属性是可选的因为MyBatis可以通过实际传递给语句的参数来计算要使用的TypeHandler。默认是未设置的。parameterMap这是一种已过时的引用外部参数映射的方法。请使用内联参数映射和parameterType属性。resultType这是期望从该语句返回的结果类型的完全限定类名或别名。请注意在集合的情况下应该是集合所包含的类型而不是集合本身的类型。使用resultType或resultMap而不要同时使用两者。resultMap对外部resultMap的命名引用。结果映射是MyBatis最强大的特性通过对其进行良好理解可以解决许多复杂的映射情况。使用resultMap或resultType而不要同时使用两者。flushCache将此设置为true将导致在每次调用该语句时刷新本地缓存和二级缓存。对于select语句默认值为false。useCache将此设置为true将导致该语句的结果被缓存在二级缓存中。对于select语句默认值为true。timeout这个属性设置驱动程序在请求后等待数据库返回的时间超过该时间将抛出异常。默认值是未设置的依赖于驱动程序。fetchSize这是一个驱动程序提示它会尝试使驱动程序以指定大小的行批量返回结果。默认值是未设置的依赖于驱动程序。statementType可以选择其中的一个STATEMENT、PREPARED或CALLABLE。这会让MyBatis分别使用Statement、PreparedStatement或CallableStatement。默认值为PREPARED。resultSetType可以选择其中之一FORWARD_ONLY、SCROLL_SENSITIVE、SCROLL_INSENSITIVE或DEFAULT与未设置相同。默认值为unset依赖于驱动程序。databaseId如果配置了databaseIdProviderMyBatis将加载所有没有databaseId属性或者其databaseId与当前数据库Id匹配的语句。如果发现相同的语句既有databaseId又没有databaseId后者将被丢弃。resultOrdered这仅适用于嵌套的结果选择语句如果设置为true则假定嵌套结果被包含或分组在一起以便当返回新的主结果行时不会再出现对以前结果行的引用。这样可以使嵌套结果填充更加友好地使用内存。默认值为false。resultSets这仅适用于多个结果集。它列出了语句将返回的结果集并为每个结果集提供一个名称。名称之间用逗号分隔。affectData当编写返回数据的INSERT、UPDATE或DELETE语句时将其设置为true以便正确控制事务。还可参见事务控制方法。默认值为false自3.5.12版起。