SQL映射文件:
mybatis的真正强大之处就在于它的SQL映射语句。
SQL映射文件几个顶级配置元素:
mapper:映射文件的根元素,只有一个namespace属性。用于区分不同的mapper,全局唯一
namespace必须和接口类同名。
cache:配置给定命名空间缓存。
cache-ref:从其他命名空间引用缓存配置。
resultMap:用来描述数据库结果集和对象的对应关系。
sql:可以重用的sql块,也可以被其他语句引用。
insert,update,select,delete:映射语句。
他们语句基本类似
id:命名空间唯一的标识符。指定对应的类接口中的方法。
parameterType:指定传入参数的类型的完全限名或别名。多个查询条件时,可以将条件封装成对象入参,也可以创建一个map集合(key,value)对应入参参数。
resultType:返回结果类型。
当有表连接关系查询时一般有两种方法:在原有实体类上加入想展示的数据库字段的属性,进行连表查询,使用resultType做自动映射。
可以使用resultMap做自定义的结果映射,字段名可以不一致,并且可以指定要显示的列。比较灵活。(为了方便可以一致)
resultType和resultMap两者只能用一个,不可同时使用。
resultMap对应的resultMap元素的id;
resultMap元素:
type:表示resultMap映射结果的类型。
result子节点:column属性对应数据库查询出的字段名,property对应查询出的字段赋值给类哪个属性。
resultType:直接表示返回类型,包括基础类型和复杂数据类型。
resultMap:是对外部resultMap的引用。
入参方式:在接口有@Param注解可以自定义入参参数名。在映射sql中使用#{参数名}
上图中association配置项:映射到javaBean的某个‘复杂属性’,比如javaBean类使用。
首先要在元实现类创建一个要映射的类为类型的属性。注意:association只处理一对一的关联关系。
property:对应你创建的那个类为类型属性。javaType:对应这个类型的类。
result子元素和resultMap的就是一个意思了。
还有
connection配置项和assocation元素作用差不多一样。非常类似。只不过这个对应的属性的类型是集合列表。
ofType:指定这个集合的类型。
有关resultMap还有他的三个映射级别:
NONE:禁止自动匹配。
Partial:自动匹配所有属性,内部嵌套除外(association,collection)。
full:自动匹配所有。
mybatis也提供了一级缓存和二级缓存。ps:最好别用,这个缓存的性能太低太低。
一级缓存:基于PerpetualCache(mybatis自带)的hashMap本地缓存,作用范围session,当session flush或close之后,该session中所有缓存清空。
二级缓存:就是global caching,它超出了session。可以被所有session共享。开启它只要在mybatis的核心配置文件
****-config.xnl中settings元素中开启。
总结:
sql映射文件入参方式根据场合来看。比较考验sql语句编写能力。数据库操作与代码分离,便于维护。