MyBatis

1、认识MyBatis

      Mybatis is a first class persistence framework with support for custom SQL,stored Procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results.  MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJO(Plain Old Java Objects) to database records.

      MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

2、使用mybatis

       A.作用域SCOPE生命周期

    B.XML

(1)Generator 生成代码   http://www.mybatis.org/generator/quickstart.html

       i、引入plugin

       ii、generatorConfig.xml

      Iii.执行 mvn mybatis-generator : generate

(2)Xml 与annotation 对比

3、Mybatis配置文件

Mapper.Xml 配置文件

resultType 直接返回到实体类

resultMap 联合查询

Sql 公用和复用的东西

分页

  1、逻辑分页  把所有的结果查出来进行分页  相当于内存分页(不可取)

  2、物理分页  如:Select.... limit 0,10

 通常做法就是前段传来pageIndex 和pageSize 进行拼sql

分页插件   如pageHelper

批量操作 Batch 批量查询数据,批量更新数据

 3、联合查询

  a)嵌套结果(就是join)  不存在n+1 问题

  1对1 的嵌套结果

  b)  嵌套查询  存在n+1问题  一对多的属性在多的这一边  对多的一边会有多次查询,避免n条数据的查询可以启动懒加载

   1对1

1对N

一对1 与 1对多的sql 是一样的,结果集不一样

4、缓存

一级缓存

一级缓存是默认开启的

每次查询都会需要一个sqlSession,一级缓存是基于sqlSession 级别的即线程级别的

第二次查询会命中第一次的缓存

1、为什么会使用一级缓存?

   减小数据库压力

2、如何验证有一级缓存 ?

   同一个sqlSession去查询两次,第二次不会进行数据库的访问

3、一级缓存有没有问题?

      若在一个sqlSession的两次查询之间进行了数据的更新,就会导致第二次从缓存中获取的是脏数据

二级缓存

 二级缓存默认是关闭的,也不建议使用,一般用redis三方代替

  二级缓存是基于namespce的,也就是说基于mapper.xml的

  关联查询写在哪个namespace下,关联查询就属于哪个结果

二级缓存是基于namespace的,若要开启二级缓存就要在相应的namespace中打开

二级缓存如何验证:

开启多个sqlSession 去查询同一个方法,将第一次查询的耗时,和后几次查询的耗时作对比。

二级缓存的问题:

  1. 非常容易出现脏数据
  2. 失效问题,全部失效,更新的话是全部失效(就是id=1的变了,其他也全部都变了)

5、mybaits中用的到设计模式

  1. Builder模式 :

    例如 SqlSessionFactoryBuilderXMLConfigBuilderXMLMapperBuilderXMLStatementBuilderCacheBuilder

  2. 工厂模式 :

    例如SqlSessionFactoryObjectFactoryMapperProxyFactory

  3. 单例模式 :例如ErrorContextLogFactory

  4. 代理模式 :Mybatis实现的核心,比如MapperProxyConnectionLogger,用的jdk的动态代理;还有executor.loader包使用了cglib或者javassist达到延迟加载的效果;

  5. 组合模式 :例如SqlNode和各个子类ChooseSqlNode等;

  6. 模板方法模式 : 例如BaseExecutorSimpleExecutor,还有BaseTypeHandler和所有的子类例如IntegerTypeHandler

  7. 适配器模式 : 例如Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现;

  8. 装饰者模式 : 例如cache包中的cache.decorators子包中等各个装饰者的实现;

  9. 迭代器模式 : 例如迭代器模式PropertyTokenizer

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records. Contents What is MyBatis? .. 5 Getting Started ...... 5 Building SqlSessionFactory from XML ............. 5 Building SqlSessionFactory without XML ........ 6 Acquiring a SqlSession from SqlSessionFactory ............. 6 Exploring Mapped SQL Statements . 7 A Note about Namespaces........... 8 Scope and Lifecycle .......... 9 Mapper Configuration XML  10 properties ........ 11 settings ............ 12 typeAliases ...... 13 typeHandlers ... 14 objectFactory .. 15 plugins ............. 16 environments .. 17 transactionManager .... 18 dataSource .. 19 mappers .......... 21 SQL Map XML Files ............. 21 select  22 insert, update, delete ...... 24 sql ..... 26 Parameters ...... 26 MyBatis 3 - User Guide 5 November 2010 4 resultMap ........ 28 Advanced Result Mapping ......... 30 id, result ...... 32 Supported JDBC Types  33 constructor .. 33 association .. 34 collection ..... 37 discriminator .............. 40 cache  41 Using a Custom Cache . 43 cache-ref ......... 44 Dynamic SQL ....... 44 if ....... 44 choose, when, otherwise  45 trim, where, set .............. 45 foreach ............ 47 Java API  49 Directory Structure ........ 49 SqlSessions ...... 50 SqlSessionFactoryBuilder ........... 50 SqlSessionFactory....... 52 SqlSession .... 54 SelectBuilder ....... 60 SqlBuilder ............ 63

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值