Mybaits介绍与简单入门

Mybaits介绍与简单入门
MyBatis持久层与数据库交互的半自动ORM(Object Relation Mapping)、轻量级的框架
Hibernate全自动全映射ORM(Object Relation Mapping)框架

  1. #和$区别
    a) #会对传入的参数进行预编译,在传入的值两边添加’’,所以在一定程度上可以防止SQL注入,PreparedStatement;
    b) KaTeX parse error: Expected 'EOF', got '#' at position 30: …洞的问题; c) 一般推荐使用#̲,然而,在要传入表名或者字段名…
  2. 缓存
    SqlSessionFactory级别的二级缓存;
    在常见的MVC架构中,一级缓存会在service调用结束的时候清除(因为service结束,会提交事务,就会关闭sqlSession);
    一级缓存(本地缓存):SqlSession级别,默认情况下,一级缓存是开启的,与数据库同一次会话期间查询到的数据会放到本地缓存中,以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库。
    一级缓存失效情况(没有使用到当前一级缓存的情况,还需要再向数据库发出查询):
    1.sqlSession不同。
    2.sqlSession相同,查询条件不同(当前缓存中没有这个数据)3. .sqlSession相同,两次查询之间执行了增删改操作(这次操作可能会对当前数据操作)
    4 .sqlSession相同,手动清除了缓存,(.clearCache)。
    二级缓存(全局缓存):基于namespace级别的缓存,一个namespace对应一个二级缓存。
    工作机制:
  3. 一个会话,查询一条数据,这个数据就会被放在当前会话的一级缓存中。
  4. 如果会话关闭,一级缓存中的数据会被保存到二级缓存中,新的会话查询信息,就可以参照二级缓存。
  5. 不同的namespace查出的数据会放在自己对应的缓存中二级缓存需要我们在mybatis映射文件中加入标签来开启入图片描述
  6. ![二级缓存需要我们在mybatis映射文件中加入标签来开启入图片描述]描述](https://img-blog.csdnimg.cn/20191108092639352.png)
  7. 缓存原理图
  8. 3.动态SQL
    动态SQL帮助我们在不同的条件下生产不同的SQL语句,非常灵活。
    常见的动态SQL标签:
    if,choose…when…otherwise,where,set,trim,foreach,bind

where
查询的时候如果某些条件没带可能sql拼装会有问题,解决方案:
1.给where后面加上1=1,以后的条件都andXXX。
2.mybaits使用where标签来将所有查询条件包括在内。Mybaits就会将where标签中拼装的sql多出来的and或者or去掉(只能去掉第一个)。
trimtrim
foreach
foreach
foreach
4.resultType,resutMap,结果封装
把查询出来的结果封装到类里面 使用resultType和resultMap封装返回的结果;
区别:
resultType:只能给一个普通java类型,如:User。适用于简单的JAVA对象,并且数据库字段和java类里面的属性名一致的时候。
在这里插入图片描述
resultMap:给一个resultMap的ID,在映射文件需要定义一个resultMap,这个将数据库字段和java对象属性进行映射,用于有一对一/一对多关联关系的,或者类属性和数据库字段不一致的时候。
在这里插入图片描述
Select元素:
Id:唯一标志符 ——用来引用这条语句,需要和接口的方法名一致
parameterType:参数类型 ——可以不传,mybaits根据TypeHandler自动推断
resultType:返回值类型。——别名或者全类名。如果返回的是集合,定义集合中元素的类型,不能和resultMap同时使用。
5.Mapper传递多个参数:使用@Param注解,参数多时会封装map,为了不混乱我们是用@Param来指定封装时使用的key;#{key}就可以取出map中的值。
在这里插入图片描述
6.一对一、一对多
使用标签配置一对一关联关系(定义关联的单个对象的封装规则):association可以指定联合javaBean对象,property:指定哪个属性是联合的对象,javaType:指定这个属性对象的类型(不能省略的)
使用标签来配置一对多关联关系。
编写SQL有嵌套查询和嵌套结果两种方式。
7.Mybatis中namespace用于绑定dao接口,dao接口的方法对应mapper中的sql语名
Mybaits运行原理:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44293888/article/details/102966695