zoukankan      html  css  js  c++  java
  • MyBatis—mapper.xml映射配置

    SQL文件映射(mapper文件),几个顶级元素的配置:

     

    mapper元素:根节点只有一个属性namespace(命名空间)作用:

    1:用于区分不同的mapper,全局唯一。

    2:绑定DAO接口,即面向接口编程。当namespace绑定某一接口之后,可以不用写该接口的实现类,MyBatis会通过接口的完全限定名来查找对应的mapper配置,执行SQL语句,因此namespa

    ce的命名必须和接口名相同。

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

    namespace属性的要求:

    1:namespace的命名必须和某个DAO接口同名,同属于DAO层,

    故代码结构上,mapper映射文件个接口必须放在同一个包下。

    2:在不同的mapper文件中,元素的id是可以相同的,MyBatis

    是通过namespace和子元素的id联合区分的。接口中的方法和映射文件的SQL中的id一一对应。

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

    cache:配置给定命名空间的缓存

    cache-ref:从其它命名空间引用缓存配置

    reaultMap:用来描述数据库结果集和对象的对应关系

    sql:可以重用的SQL块,也可以被其它语句引用

    insert:映射插入语句

    updata:映射更新语句

    delete:映射删除语句

    select:映射查询语句

     

    resultMap的应用

    resultType:直接表示返回类型

    基础数据类型

    复杂数据类型

    resultMap:对外部resultMap的引用

    应用场景

    1:数据库的字段信息与属性不一致的情况

    2:复杂的联表查询,可以自由地控制要展现的映射字段个数

    ==================================

    其实返回的都是Map集合,当resultType返回user时候,MyBatis通过setter()方法自动进行关系映射赋值。返回resultMap时,则需要手动赋值,更自由。二者不能同时存在

    ==================================

    设置resultMap的自动映射级别:

    resultMap的自动映射匹配的前提:字段名和属性名一致

    resultMap的自动映射级别:

    属性: aotuMappingBehavior

    值: PARTIAL(默认):自动匹配所有属性

    NONE:关闭自动映射

     

    resultMap的自动映射三个匹配级别:

    1:NONE:禁止自动匹配

    2:PARTIAL:(默认)自动匹配所有属性

    有内部嵌套(collection,association)的除外

    3:FULL:自动匹配所有

    ==================================

    resultMap的基本配置项

     

    resultMap的属性:

    id:它是resultMap的唯一标识

    type:java实体类

    resultMap的子元素

    id:对应数据库中该行的主键id,设置此项可提高MyBatis的性能

    result:映射到javaBean的某个简单类型属性

    property: 映射数据库列的实体对象的属性

    column:数据库列名或者别名

    association:映射到javaBean的某个复杂类型属性如javaBean

    1: 复杂的类型关联,一对一(一个实体类嵌套另一个实

    体类属性)

    2:内部嵌套:映射一个嵌套javaBean属性

    3:属性:

    a:property: 映射数据库列的实体对象的属性

    b:javaType:完整java类名或者别名

    c:resultMap:应用外部的resultMap

    4:子元素

    id:同resultMap的id一样对应该javaBean表的主键

    result:

    property: 映射数据库列的实体对象的属性

    column:数据库列名或者别名

    collection:映射到javaBean的某个复杂类型属性,例如集合

    1:复杂类型集合,一对多(一个实体类嵌套另一个实体类集合)

    2:内部嵌套:映射一个嵌套结果集到一个列表

    3:属性

    property:映射数据库列的实体对象的属性

    ofType : 完整的java类名或者别名(集合所包含的类型)

    resultMap : 应用外部的resultMap,代码重用

    4:子元素

    id:同resultMap的id一样对应该javaBean表的主键

    result:

    property: 映射数据库列的实体对象的属性

    column:数据库列名或者别名

     

     

    使用select完成单条件查询

     

    select标签:及其属性:

    1:id:命名空间的唯一标识符,与接口中的方法名相对应

    2:parameterType:传入的SQL语句的参数类型的限定名或别名

    基础数据类型:int String Date等, 只能传入一个,通过#{参数名}来获取传入值

    复杂数据类型:java实体类,Map集合通过#{属性名}或#{Map的Key}获取传入值

    3:resultType:SQL语句的返回值的完整类名或别名

    2,3都支持内建的别名,大小写不区分。可以参考P37别名表#{userName}:userName和接口方法中传入的参数名是一样的

     

    a:单参数入参

     

    b:多参数之javaBean对象入参

     

    C:多参数之Map集合入参

     

    使用insert完成增加操作

     

     

     

    insert标签及其属性:

    1:id:命名空间的唯一标识符,与接口中的方法名相对应

    2:parameterType:传入的SQL语句的参数类型的限定名或别名

     

    关于增删改的返回类型:

    1:默认返回影响的行数,所以接口方法中的返回值类型要设置为int类型最好不要返回boolean。

    2:insert,update,delete元素是没有返回属性resultType只有查询操作select才有相应的指定。

     

    使用update完成增加操作

    insert标签及其属性:

    1:id:命名空间的唯一标识符,与接口中的方法名相对应

    2:parameterType:传入的SQL语句的参数类型的限定名或别名

     

    1:对象入参

    同insert用法相同,没有set赋值的属性,在表中为NULL显示,因此用参数入参可以解决此问题

     

    2:参数入参,不写入参类型

    1:接口方法入参要使用注解

    2 : 映射SQL中用#{注解名}来获取参数值

    附:超过4个参数最好封装为对象入参,多参入参,不写入参类型 参数固定的,最好直接多参数入参.int类型的入参都要使用包装类.

    DAO层接口的常见的返回类型

    复杂数据类型:1:JAVA对象 2:Map集合 3:List集合

    int类型:增删改更新操作,返回影响的行数

    MyBatis参数的入参:

    1:使用注解进行参数的传递

    2:封装成对象入参

     

    使用delete完成删除操作

    insert标签及其属性:

    1:id:命名空间的唯一标识符,与接口中的方法名相对应

    2:parameterType:传入的SQL语句的参数类型的限定名或别名

     

    MyBatis的缓存

     

    1:一级缓存

    2:二级缓存

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

    二级缓存的配置:

    1:MyBatis的全局cache配置

    2:在Mapper XML文件中设置缓存,默认情况下:未开启

    3:在Mapper XML文件配置支持cache后,需要对个别查询做调

    整可以单独设置cache。

    <select id="selectALL" resultType="Emp" useCache="true">

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

    实际上,MyBatis的缓存很少用到,当面对一定规模的数据量时,内置的cache方式也派不上用场,我们一般会选择OS cache,mamer cache等专

    门的缓存服务器来做。因此,MyBatis专心做的还是SQL映射!

  • 相关阅读:
    rest framework 认证 权限 频率
    rest framework 视图,路由
    rest framework 序列化
    10.3 Vue 路由系统
    10.4 Vue 父子传值
    10.2 Vue 环境安装
    10.1 ES6 的新增特性以及简单语法
    Django 跨域请求处理
    20190827 On Java8 第十四章 流式编程
    20190825 On Java8 第十三章 函数式编程
  • 原文地址:https://www.cnblogs.com/domi22/p/8047863.html
Copyright © 2011-2022 走看看