zoukankan      html  css  js  c++  java
  • mybatis基本介绍(1)

    一.mybatis底层执行流程

    1. mybatis配置SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
    2. 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂.
    3. 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
    4. mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器
    5. Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象sql的id即是Mapped statement的id
    6. Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中输入参数映射就是jdbc编程中对preparedStatement设置参数。
    7. Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

    二.Dao开发:接口的动态代理方式(mapper接口动态代理)

    Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法.

    Mapper接口开发需要遵循以下规范:

    接口路径,方法返回值类型,方法名,形参类型 - namespace,resultType,sql的id,parameterType一致

    1. Mapper.xml文件中的namespace与mapper接口的类路径相同
    2. Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
    3. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
    4. Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

    三.SqlMapConfig.xml文件说明

    SqlMapConfig.xml中配置的内容和顺序如下:

    1. properties(属性):引用java属性文件中的配置信息

      MyBatis 将按照下面的顺序来加载属性:在 properties 元素体内定义的属性首先被读取。 然后会读取properties元素中resource或url加载的属性,它会覆盖已读取的同名属性.

      settings(全局配置参数)

    2. typeAliases(类型别名)

      别名 映射类型
      _int/_integer int
      int/integer Integer
    3. typeHandlers(类型处理器)
      objectFactory(对象工厂)
      plugins(插件)
      environments(环境集合属性对象)
      environment(环境子属性对象)
      transactionManager(事务管理)
      dataSource(数据源)

    4. mappers(映射器)

      <mapper resource=" " /> -- 适用于xml文件
      使用相对于类路径的资源(现在的使用方式)
      如:<mapper resource="sqlmap/User.xml" />
      		
      <mapper class=" " /> -- 适用于注解或xml文件
      使用mapper接口类路径
      如:<mapper class="cn.itcast.mybatis.mapper.UserMapper"/>
      注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中
      		
      <package name=""/> -- 适用于注解或xml文件
      注册指定包下的所有mapper接口
      如:<package name="cn.itcast.mybatis.mapper"/>
      注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中
      

    四.小结

    1.#{}和${}

    • #{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。
    • #{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
    • ${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换,
    • ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value

    2.parameterType和resultType

    • parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中
    • resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到容器List中

    3.selectOne和selectList

    • selectOne查询一条记录,如果使用selectOne查询多条记录则抛出异常;
    • selectList可以查询一条或多条记录
    • 动态代理对象调用sqlSession.selectOne()和sqlSession.selectList()是根据mapper接口方法的返回值决定,如果返回list则调用selectList方法,如果返回单个对象则调用selectOne方法

    4.namespace映射器名称空间

    mybatis官方推荐使用mapper代理方法开发mapper接口,程序员不用编写mapper接口实现类,使用mapper代理方法时,输入参数可以使用pojo包装对象或map对象,保证dao的通用性.

  • 相关阅读:
    响应式注意要添加“视口”约束标记---viewport
    js检测浏览器屏幕宽度
    Fragment中退出报错异常
    ListView和Gridview与滚动冲突解决
    APK反编译
    走出来,就要扛住
    与设备无法进行调试怎么走
    OC基础-protocol
    OC基础-变量可见对与方法
    OC基础-面向对象编程简介
  • 原文地址:https://www.cnblogs.com/itzlg/p/10699022.html
Copyright © 2011-2022 走看看