一、many2many:

多对多要设置中间表

多对多保存:

要处理好中间表以免插入失败:

JSP-MyBatis(四)补多对多表、缓存_缓存

插入时注意自增长

JSP-MyBatis(四)补多对多表、缓存_二级缓存_02

书写测试类,需要调用handlerRelation处理中间表:

JSP-MyBatis(四)补多对多表、缓存_java_03

多对多查询

1.常规多表查询:

JSP-MyBatis(四)补多对多表、缓存_缓存_04

2、内连方式:

1.先对查询语句进行测试:
 

SELECT t.id as t_id,t.name,s.id as stu_id,s.name as stu_name from teacher t LEFT JOIN tea_stu m on m.t_id=t.id LEFT JOIN student s ON m.s_id=s.id 

Notes:

多对多,左连接操作:Left Join 以左为准

 

二、mybatis+spring集成

手动配置:
Mapper的使用     

1.把mapper当做是Dao辅助工具     

2.直接将mapper当做是Dao.

1.导入相关的资源包:

1.myBatis自身的包     

2.spring相关的包     

3.spring-mybatis-plugins.jar整合包

JSP-MyBatis(四)补多对多表、缓存_二级缓存_05

2.添加配置文件:

JSP-MyBatis(四)补多对多表、缓存_mysql_06

3.编写配置文件:

<!-- 1.导入外部文件db.properties  -->   

 <!-- 2.配置数据源 -->     

<!-- 3.配置sessionFactory -->     

<!-- 4.配置事务管理器 -->     

<!-- 5.配置事务模板 -->     

<!-- 6.AOP切面配置 -->          

<!-- 定义service,Mapper对应bean --> 

全注解的方式:  

1.service全都变成注解配置的方式.

2.在配置文件中添加注解扫描的配置

<!-- 0.注解扫描 -->

<context:component-scan base-package="com._520it.crm"/>

3.<!-- 添加扫描mapper的类 -->

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">   

       <property name="basePackage" value="com._520it.crm.mapper"/>//mapper存在的包名 </bean>

 

二级缓存:  

1.回顾hibernate中的缓存:

     二级缓存的生命周期和sessionFactory一样的生命周期     

什么样类型的对象适合放入二级缓存         

读远远大于写的对象.   

一种非常常见:

的就是当我们第一次查询出get(1)的数据时存在缓存区中,我们希望下次执行完insert语句后get(1)的数据依然可以从数据库中获取的时候:

JSP-MyBatis(四)补多对多表、缓存_java_07

hibernate中的缓存:         

1.一级缓存         

2.二级缓存 (注意与查询缓存相区别)        

3.查询缓存(限制很多,命中率比较低)     开启二级缓存后,get (),insert(),get();  总共发2条sql

   查询缓存适合用于select *的情况因为在DML操作后数据会更新需要重新从数据库取数据

MyBatis中的二级缓存:

一般来说,我们不会直接说myBatis中二级缓存(说成是myBatis缓存) 步骤:     

查询缓存

1.需要在mapper文件中添加<cache />     

2.缓存的对象需要实现序列化接口 myBatis开启二级缓存后,get (),insert(),get();  总共发3条sql

接口有一个最大输出的属性所以要进行序列化

Notes:

在mybatis中无论是selectOne还是selectList都是使用查询缓存.当对象新增,更新,删除的时候,都回去清空查询缓存

让myBatis的缓存和hibernate中的二级缓存靠近

步骤:     

1.让所有list都不是缓存

JSP-MyBatis(四)补多对多表、缓存_mysql_08

flushCache属性

使用第三方缓存框架(暂未接触)