映射器

映射器:接口+xml文件(或注解)。

在映射器中可以配置参数,各类的SQL语句,存储过程,缓存,联级等,并通过建议的映射规则指定的POJO或者其他对象上。

虽然映射器可以用注解完成,但是应用不广,原因有3:

             1.面对复杂性,SQL会显得无力,尤其长SQL

             2.注解的可读性较差

             3.功能上,求是了xml上下文相互引用的功能

 

一.映射器的四种引入方式

      1.用文件路径引入映射器


    

      2.用包名引入映射器


    

      3.用类注册引入映射器


    

     4.用userMapper.xml引入映射器


    

二.映射器配置元素

select 查询语句 可自定义参数,返回结果集等
insert 插入语句 执行后返回整数,代表插入的条数
update 更新语句 执行后返回整数,代表更新的条数
delete 删除语句 执行后返回整数,代表删除的条数
sql 定义一部分SQL,其他地方引用 复用
resultMap 用来描述家在对象 提供映射规则
cache 给定命名空间的缓存配置  
cache-ref 其他命名空间缓存配置的引用  

三.select

常用的有id,parameterType,resultType,resultMap,缓存flushCache,useCache

四.insert

主键回填(userGeneratedKeys="true" keyProperty="用来匹配主键的属性")


    insert into t_role(role_name,note) values(#{roleName},#{note})

自定义主键(selectKey元素),例:角色表为空,id=1;角色表不为空,id=id+3


    
        select if (max(id))=null,1,max(id)+3) from t_role
    
    insert into t_role(id,role_name,note) values(${id},#{roleName},#{note})

五.update

执行完返回整数,表示影响的数量

六.delete

执行完返回整数,表示影响的数量

七.sql

定义一条SQL的一部分,方便其他SQL引用,代码复用。例如:列名


    
    
        id,name,addr,age
    
    

八.resultMap

resultMap定义映射规则,级联的更新,定制类型转换器等。但是目前Mybatis只支持resultMap的查询,不支持更新,保存,级联。

  1. Map存储(不推荐)
  2. POJO存储(推荐!)

(一)级联

级联分为三种,一对一,一对多,鉴别器。级联不是必须的,好处:获取关联数据方便快捷;缺点:级联过多会增加系统的复杂度,降低性能。当级联超过3层,就不使用级联!

  1. 一对一:学生证和学生,人和身份证
  2. 一对多:班主任和学生,顾客和账单
  3. 鉴别器:根据某些条件决定采用实现类级联的方案,比如体检表根据性别去区分。
  4. 没有多对多!多对多可以换成一对多的多次使用!

    <--一对一级联
        task和另一张表task_id级联
    -->
    
     
     <--一对多级联
        employeeTaskList表和另一张表的task_id级联
    -->
    

     <--鉴别器
        column代表使用哪个字段进行鉴别
    -->
    
        
        
    

(二)级联的N+1问题 

N+1:现有N个关系完成级联,再加一个关联关系,成了N+1,所有都被执行,但是有很多不需要的被查找,造成浪费、

延迟加载:一次性把常用的级联查询出来,不常用的级联数据不查找,等需要时再取出


    
    
    
    



--------------------- 

部分引用:https://blog.csdn.net/Malsako/article/details/78252104 

你可能感兴趣的:(框架)