多对多要设置中间表
多对多保存:
要处理好中间表以免插入失败:
插入时注意自增长
书写测试类,需要调用handlerRelation处理中间表:
多对多查询
1.常规多表查询:
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整合包
2.添加配置文件:
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)的数据依然可以从数据库中获取的时候:
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都不是缓存
flushCache属性
使用第三方缓存框架(暂未接触)