zoukankan      html  css  js  c++  java
  • mybitis的理解即使用

     mybitis简介:    

        mybitis是持久层框架,它对jdbc操作数据库的过程进行了封装,使得开发者只需要关心sql本身,而不用花费太多精力去管理整个操作过程。mybitis 与其他的对象关系映射框架不同,它并没用将java对象与数据库表关联在一块,而是将java方法与数据库关联在一起。允许用户从分利用数据库的功能,例如,视图,存储过程,和一些复杂的查询。

    mybitis的工作流程:

    第一步:读取配置文件,也就是porperties文件中对数据库的配置,主要有用户名,密码,driver(驱动程序),以及地址。

    第二步:连接数据库的相关信息,只有连接上数据库,才会有对数据库的操作。

    第三步:有了数据库的相关信息后,SqlSessionFactoryBuilder会创建SqlSessionFactory,数据库回话工厂。

    第四步:SqlSessionFactory创建SqlSession,数据库会话,它的目的是为了执行sql语句。

    第五步:执行sql语句返回结果。

    mybitis的优点:

    1.数据库的连接释放频繁造成资源的浪费,从而影响了系统的性能,如果使用数据库连接池的话,可以解决这个问题,但是在mybitis中,自带有数据库连接池去管理数据库连接。

    2.sql代码从程序代码中分离,简化开发,提高重用性。

    3.提供xml标签,支持动态sql。

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

    mybitis的全局配置:

    1.在properties中对数据库连接的配置,用户名,密码,程序驱动,数据库地址,以及数据源,

    2.typeAliases ,别名的定义

    3.mapper,mapper接口与mapper的映射文件。

    mybitis中的mapper映射文件

    1.permeterType:输入的参数类型,简单 类型,int,String等,对象,map

    2.mapper中的变量的引用(#{}或${}),这也是面试中最常问的一个问题。我对此详细解释一下,在mybitis中#{}或${}都可以用于一个变量的引用,那么为什么经常使用#{},而不适用${}呢,我们可以在resources目录下,创建一个log4j.properties,将MyBatis 执行时的 SQL 打印出来,然后添加日志依赖,就可以看到$和#的区别, $ 符号执行的日志,SQL 直接就拼接好了, # 执行的日志,可以看到使用了预编译的方式。

    在 JDBC 调用中,SQL 的执行,我们可以通过字符串拼接的方式来解决参数的传递问题,也可以通过占位符的方式来解决参数的传递问题。当然,这种方式也传递到 MyBatis 中,在 MyBatis 中,$ 相当于是参数拼接的方式,而 # 则相当于是占位符的方式。

    一般来说,由于参数拼接的方式存在 SQL 注入的风险,因此我们使用较少,但是在一些特殊的场景下,又不得不使用这种方式。

    3.resultType:它是返回类型,只能用于一些简单类型的返回,如对象,集合。

    4.resultmap:也是返回类型,如果返回数据类型比较丰富的时候,比如字段和属性匹配不上,一对多。

    5.动态Sql:动态 SQL 是 MyBatis 中非常强大的一个功能。例如一些常见的查询场景:

    • 查询条件不确定
    • 批量插入

    mybitis中提供的动态sql的节点非常多,if,where,foreach,set,

    查询的进阶:

    在工作中,我们经常使用的就是查找,它对应的就是数据库表的关系,一对一,一对多,多对多。在开发中,经常遇到一对一查询,一对多查询.

    查询缓存,mybitis中默认是开启一级缓存的,一级缓存的作用域是同一个sqlsession,在同一个sqlsession中,同时执行两次相同的sql,第一次执行,会在数据苦衷查询数据并写入缓存,第二次查询的时候会直接从缓存中取数据。这样提高了查询的效率。当一个 sqlSession 结束后该 sqlSession 中的一级缓存也就不存在了。

     

  • 相关阅读:
    C# 下 WebService 初探: 构建Web Service 服务及 WinForm和浏览器 httpget调用
    Action<T> 泛型委托 在跨线程访问控件委托中的应用
    C# 网络连接中异常断线的处理:ReceiveTimeout, SendTimeout 及 KeepAliveValues(设置心跳)
    DOS下的批处理文件(老东西了)
    typedef struct和struct定义结构体的区别
    多线程idhttp下载文件源代码
    JQUERY获取DOM对象
    学习笔记:delphi实现网络通信之select模型
    学习笔记之WSAAsyncSelect模式
    delphi 函数指针 方法指针
  • 原文地址:https://www.cnblogs.com/javazl/p/12618776.html
Copyright © 2011-2022 走看看