java-mybatis

几个关键点:

1.parameterType,一般默认可以省略,要注意的地方是如何给sql里面的属性赋值,${},#{arg0,arg1...,param1,param2,...}

2.resultType ,insert语句,update语句,delete语句默认会返回Long,Integer,boolean类型的数值 ,当查询出来的列名和封装的对象

                     属性不一致时,一个可以给sql列名取别名,另一个可以用resultMap,自定义映射规则。mybatis有默认的自动映射                       (列名和属性名完全一致,自动映射) 或者开启严格驼峰映射(满足驼峰映射对应规则)

3.resultMap  type="要映射的javabean全路径类名或别名"  id="取的id"

          |a) id  :    javabean里面的哪个属性,对应数据库表的主键

         |b) result :  javabean里面普通属性,对应数据库表普通列

         |c)  当存在一对一映射时,可以使用result  column=""  property="dept.prop" 或者使用association

         | 1)  association :当javabean里面有引用对象属性时,association解决一对一关联,property,javabean里面的哪一个属                                          性,javatype,映射类的全路径类名

         | 2) collection : 解决一对多映射 property 对应javabean里面的哪一个属性,oftype,collection属性的每个元素的全路径类名

         | 3) 分步association : 在association里面写了property 后,写select属性,引用到具体的select上,然后写column属性,即用哪个column当作select语句的输入

         |4)分步collection  同上

         |5) 懒加载,延迟加载的全局配置和每一个上面的单独配置fetchtype

4. 动态sql

     1.if

      2.where 只能去掉紧随其后多余的and,or

      3.trim 通过指定prefixOverrides,suffixOverrides 来显示去掉可能会出现的多余and,or, 或者 逗号等

      4.choose,when,otherwise 只会执行一个

      5.set 用于设置更改值时使用,可以去掉多余的逗号

      6.foreach (List,map批量查询,List,map批量修改,批量插入)

      7. bind 用于osgl表达式值引用

      8.sql片段

5.缓存机制

      两级缓存

      一级缓存: 本地缓存:

                      与数据库同一次会话期间查询到的数据会放到本地缓存中,

                      以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库

                      是sqlsession级别的缓存, 其实是根据查询条件,存储了一个map,如果缓存有效就直接根据查询条件到map里面查结果

                      缓存失效的4种情况:

                      1.用不同的sqlsession

                       2.同一个sqlsession不同的查询条件

                      3.调用session.clearCache()方法使得清空缓存

                       4.同一个session,同样的查询条件,如果两个中间有增删改操作,缓存无效(因为可能会更改到缓存中的数据)

     二级缓存:全局缓存

                      1.二级缓存是namspace级别的缓存,即属于一个mapper的查询结果都存在该mapper的缓存中进行管理

                      2.二级缓存的机制: 一个session会话的查询结果会先存储在该session中,如果session关闭,会被转移到二级缓存中,即该查询条件和结果对应的mapper中。如果一个session生成了多个不同的mapper,同样的,也是会把结果按照对应的mapper进行缓存。

                          注意:查出的数据都会先放在一级缓存中,只有会话关闭后,才会转移到二级缓存中,所以如果没关闭会话,不同session还是自己取自己的。

                                  readonly就是是否由mybatis发送序列化的结果还是直接返回缓存中的对象引用。序列化的每个对象都是不同的,引用来的对象相等==,但是由于可能被修改,不安全。

                     二级缓存的使用:

                     1.在全局settings文件中设置:

                        <setting name="cacheEnabled" value="true"/>

                    2.在具体的mapper中设置缓存策略

                        <cache eviction="" flushInterval="" readOnly="" blocking="" size="" type=""></cache>

                        1.eviction:缓存回收策略,

                                   LRU: 最近最久未使用,默认方式

                                   FIFO:先进先出策略

                                   SOFT: 软引用,移除基于垃圾回收器状态和软引用规则的对象

                                   WEAK:弱引用,更积极地基于垃圾回收器状态和弱引用规则的对象

                        2.flushInterval:缓存刷新间隔,缓存多长时间清空一次,默认不清空,单位毫秒

                        3.readOnly: 是否只读

                                             true: 只读:mybatis 认为所有从缓存中获取的数据的操作都是只读操作,不会修改数据,mybatis为了加快获取速度,直接会将数据在缓存中的引用交给用户,不安全,速度快

                                             false: 非只读,mybatis觉得获取的数据可能会被修改,会利用序列化和反序列化技术克隆一份新的数据,安全,速度慢。

                         4.size:缓存存放多少元素

                         5.type="",指定自定义缓存的全类名,需要自己实现cache接口

                   3)pojo需要实现序列化接口

==========================================================================================

1.与缓存相关的几个设置

       1.如果在一个session中间执行了session.clearCache()那么两个相同的查询是不能使用到缓存的。但是当session.close()后,另外的session,在同一个mapper下能够得到二级缓存。

        2.当全局的cacheEnabled = false时,会关闭二级缓存

        3.每次增,删,改后,一级缓存,二级缓存都会被关闭。

        4.每个select标签下的useCache=true,如果被设置为false,二级缓存关闭,一级缓存始终打开

        5.localCacheScope 本地缓存作用域,一级缓存SESSION,如果设置为STATEMENT,为执行一条语句,相当于禁用一级缓存

           在全局settings中配置。

==========================================================================================

当执行一条查询sql时,流程为:

1.查看二级缓存有没有记录,如果有直接用

2.查看一级缓存有没有记录,如果有直接用

3.查JDBC

当使用第三方缓存时,主要是由第三方缓存实现mybatis的cache接口,用于实现二级缓存。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值