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 中的一级缓存也就不存在了。

 

原文地址:https://www.cnblogs.com/javazl/p/12618776.html