浅谈mybatis的映射文件
我们知道mybatis数据半自动化的持久性存储的数据操作工具,在mybatis的使用中,我们通常知道的需要具备三个部分,分别是entity实体类,mapper接口和mapper的映射文件,当我们使用springboot注入mybatis接口的时候,如果找不到映射文件就出现Invalid
bound statement (not found)
的报错,那么映射文件的处于什么样的位置和级联的时候为什么可以根据需求任意地书写sql语句呢?
<select id="getByClassName" resultType="com.fanjun.mybatisplus.entity.TName" parameterType="java.lang.String">
select a.id,a.name
from t_name a join t_class b on a.id=b.name_id where b.t_class= #{className}
</select>
用过jdbc的伙伴应该知道,每次的数据操作,就是sql访问数据库,所以mybatis也是一样,需要先获取sql,mybatis的获取方式就是与接口对应的映射文件,所以映射文件的名字也会与接口的名字相同。
那么,如何从映射文件中获取sql呢,有两个比较重要的配置,一个就是mapper标签下的namespace属性,该属性指明对应的接口,另一个就是crud的标签的id属性,该属性匹配接口的对应方法名,这样就实现了sql的获取。
而sql的占位赋值就依靠parameterType和parameterMap属性进行赋值,返回值根据resultType和resultMap就行ORM转换。如果这四个属性不懂的伙伴请移步百度。
所以综上所得,mybatis的映射文件就是为接口的方法找到对应的sql,存在预编译的,就根据配置属性将方法参数进行处理后添加到sql,然后查找数据库,返回的数据记录再根据配置属性转成java的对象类型。这也是为什么可以在映射文件中任意写sql,比如级联处理的sql,只要parameter和result配置正确,就能实现ORM转换。