zoukankan      html  css  js  c++  java
  • MyBatis总结+心得

    1、MyBatis框架描述:
         MyBatis是支持普通SQL查询,存储过程和高 级映射的优秀持久层框架。
         MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。
        MyBatis使用简单的XML或注解用于配置 和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.
        MyBatis和ibatis的区别:     
          Mybatis是ibatis的升级,Mybatis不需要写dao的实现类,只需要接口和xml配置文件,接口中声明的方法和xml中的操作id名称相同
         

    2、ORM框架结构分析:
    1)框架的总体配置文件:指定驱动、连接、事务、其他属性配置等;
    2)从配置文件中获取sesssionFactory
    3)从sessionfactory中获取session
    4)从session中完成对数据的增删改查和事务控制等
    5)用完之后关闭session
    6)bean和数据表之间的一个映射关系文件
     

    3、MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息。文档的顶层结构如下:  

    ---------------------------xml配置:  

    configuration 配置  

    properties 属性  

    settings 设置  

    environments 环境  

    environment 环境变量 

    mappers 映射器 

     

    4、 MyBatis框架的优点:

    1. 与JDBC相比,减少了50%以上的代码量。

    2. MyBatis是最简单的持久化框架,小巧并且简单易学。

    3. MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。

    4. 提供XML标签,支持编写动态SQL语句。

    5. 提供映射标签,支持对象与数据库的ORM字段关系映射。

    5、MyBatis框架的缺点:

    1. SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。

    2. SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

    6、MyBatis框架适用场合:

    MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案。

    对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。

    7、增删改查操作总结:

    SQL映射文件的几个顶级元素
    mapper - namespace

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

    cache-ref – 从其他命名空间引用缓存配置

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

    sql – 可以重用的SQL块,也可以被其他语句引用

    insert – 映射插入语句

    update – 映射更新语句

    delete – 映射删除语句

    select – 映射查询语句

    注意:按照定义的顺序

    mapper
    namespace:命名空间.(dtd)

    namespace和子元素的id联合保证唯一,区别不同的mapper

    注意:
    namespace的命名必须跟某个接口同名

    接口中的方法与映射文件中SQL语句id一一对应

    select
    a.查询语句的标签

    b.常用属性

    id

    命名空间中唯一的标识符

    接口中的方法与映射文件中的SQL语句id一一对应

    parameterType

    传入SQL语句的参数类型

    resultType

    SQL语句返回值类型的完整类名或别名

    c. parameterType

    基础数据类型

    int、String、Date等

    只能传入一个,通过#{参数名}即可获取传入的值

    复杂数据类型

    Java实体类、Map等

    通过#{属性名}或者#{map的keyName}即可获取传入值

    注意:#{}和${}的区别

    ${}是原样输出.(可以导致sql注入)

    #{}是会给值加入一对双引号.'value'.(建议适用这个)

    d. resultMap

    <resultMap type="数据类型" id="id">

    <result property="d性名" column="数据库列名"/>

    <result property="userCode" column="userCode"/>

    </resultMap>

    注意:resultType和resultMap的区别

    resultType :直接表示返回类型

    基本数据类型

    复杂数据类型

    resultMap :对外部resultMap的引用

    应用场景:

    数据库字段信息与对象属性不一致

    复杂的联合查询,自由控制映射结果

    resultType和resultMap的关联

    当使用resultType的时候,直接在后台就能接收到其相应的对象属性值。

    二者不能同时存在,本质上都是Map数据结构

    e.resultMap的自动映射

    前提:字段名与属性名一致

    设置级别autoMappingBehavior:

    NONE : 禁止映射

    PARTIAL:自动匹配所有(没有嵌套association,collection)

    FULL: 自动匹配所有.

    例:<setting name="autoMappingBehavior" value="FULL"/>

    f.属性

    id 在命名空间中唯一的标识符,可以被用来引用这条语句

    parameterType 将会传入这条语句的参数类的完全限定名或别名

    resultType 从这条语句中返回的期望类型的类的完全限定名或别名。注意集合情形,那应该是集合可以包含的类型,而不能是集合本身。使用resultType或resultMap,但不能同时使用

    resultMap 命名引用外部的resultMap

    flushCache 将其设置为true,不论语句什么时候被调用,都会导致缓存被清空。默认值:false

    useCache 将其设置为true,将会导致本条语句的结果被缓存。默认值:true

    timeout 这个设置驱动程序等待数据库返回请求结果,并抛出异常时间的最大等待值。默认不设置(驱动自行处理)

    fetchSize 这是暗示驱动程序每次批量返回的结果行数

    statementType STATEMENT,PREPARED或CALLABLE的一种。让MyBatis选择使用Statement,PreparedStatement或CallableStatement。默认值:PREPARED

    resultSetType FORWARD_ONLY|SCROLL_SENSITIVE|SCROLL_INSENSITIVE中的一种。默认是不设置(驱动自行处理)

    insert(增加)
    id

    parameterType

    例:

    <insert id="add" parameterType="User" >

    insert into smbms_user (userCode,userName,userPassword)

    values ( #{userCode},#{userName},#{userPassword})

    </insert>

    注意:insert、update、delete元素均没有resultType属性

    默认返回int类型.

    update
    例:

    <update id ="modify" parameterType="User">

    update smbms_user

    set userCode = #{userCode},

    userName = #{userName},

    userPassword = #{userPassword}

    where id = #{id}

    </update>

    delete
    例:

    <delete id ="deleteUserById" parameterType="int">

    delete from smbms_user where id = #{id}

    </delete>

    DAO层接口方法常见的返回类型
    Java对象、Map、List等复杂数据类型
    int
    (增删改)更新操作时,影响的数据行数
    MyBatis参数入参
    @Param注解参数
    封装成对象入参

    resultMap属性
    id:
    resultMap的唯一标识
    type:
    Java实体类
    resultMap子元素
    id
    一般对应数据库中该行的主键id,设置此项可提高MyBatis性能
    result
    映射到JavaBean的某个“简单类型”属性
    association
    映射到JavaBean的某个“复杂类型”属性,比如JavaBean类
    collection

    映射到JavaBean的某个“复杂类型”属性,比如集合

    association
    复杂的类型关联,一对一
    内部嵌套
    映射一个嵌套JavaBean属性
    属性
    property:映射数据库列的实体对象的属性
    javaType:完整Java类名或者别名
    resultMap:引用外部resultMap
    子元素
    id
    result
    property:映射数据库列的实体对象的属性
    column:数据库列名或者别名
    在association和collection两个演示示例的基础上进行测试
    在控制台输出没有在resultMap中进行匹配的属性,并观察输出结果


    resultMap自动映射(autoMappingBehavior)的三个匹配级别
    NONE
    禁止自动匹配
    PARTIAL(默认)
    自动匹配所有属性,内部嵌套除外
    FULL
    自动匹配所有

    8、动态SQL总结:

      动态SQL是MyBatis的一个强大的特性

      动态SQL的元素如下:

      if:利用if实现简单的条件选择

      choose:相当于java中的switch,

      where:简化SQL语句中的条件判断,

      set:解决动态更新语句,

      trim:可以领过的去除多余的关键字,

      foreach:迭代一个集和,通常用于in条件

  • 相关阅读:
    使用SQLite数据库实现登陆注册
    使用高德地图api(一)获取调试版和发布版SHA1,包名
    三个痛点简析与启蒙
    统计字符数,行数
    签到app需求分析
    三位数的四则运算
    蒸汽朋克与游戏的结合————《机械迷城》
    结对项目——My note(四)
    结对项目——My note(三)
    结对项目——My note(二)
  • 原文地址:https://www.cnblogs.com/lx3306/p/9198731.html
Copyright © 2011-2022 走看看