Mybatis第二天
Day02Mybatis
一、 MyBatis的接口形式:
注意两点:
- 在UserMapper.xml中的nameSpace需要和创建的UserMapper类对应好
- UserMapper接口中的方法名要和UserMapper配置文件中的id一致
二、 MyBatis的缓存:
分为一级缓存和二级缓存:
- 一级缓存 是 共享同一session内部的数据
- 二级缓存 是 共享同一个sqlSesstionFactory内部的数据
注意:默认的二级缓存是关闭的 需要要在配置文件中进行配置打开
- 在核心配置文件中开启二级缓存的总开关
- 在指定mapper.xml中进行配置
- 必须让缓存的对象实现序列化接口
补充说明:缓存的数据 当数据库被修改之后 会被清楚,下次查询会再次查询数据库
2级缓存补充:二级缓存的数据只有当session会话 关闭的时候才把查询的数据缓存起来
三、 手动封装结果集
如果实体中的属性名称和数据库表中的字段名称不一致时则自动注入失败
自动注入的字段值要和set方法的字段值一致
四、 多表关系
- 一对一 :一夫一妻制
- 一堆多:皇帝 一对 后宫佳丽3000
- 多对多:动物世界
五、 一对一
Sql语句:
ResultMap配置:
注意:一对一查询中 ,主表可以讲非主键的进行自动注入(要保证表字段和属性名称一致),主键必须手动注入数据,从表 不能自动注入
六、 一对多
多表查询时 结果集中不能有重名的字段 不然没有办法进行结果集的封装
1对多 2张表联查
Sql语句:
Java代码:
Mapper映射文件:
1对多 三张表联查
七、 多对多
- 查询老师下面所有的学生
- 查询学生下面所有的老师
如果添加一个新的Teacher实体 针对这个实体进行数据查询的时候需要做的事儿:
1.创建TeacherMapper接口
2.创建TeacherMapper.xml映射文件 在映射文件里 把nameSpace改成 cn.tedu.mapper.TeacherMapper
3.在TeacherMapper.xml映射文件中写sql语句 在接口类中创建和sql语句id一致的方法名
4.在核心配置文件中 添加teacherMapper.xml的引入
注意:需要有三张表
Sql语句和mapper配置:
<resultMap type="cn.tedu.pojo.Student" id="studentRM">
<id column="sid" property="id"/>
<result column="sname" property="name"/>
<collection property="teachers" ofType="cn.tedu.pojo.Teacher">
<id column="tid" property="id"/>
<result column="tname" property="name"/>
</collection>
</resultMap>
<select id="findAllStudents" resultMap="studentRM">
SELECT s.id sid,s.name sname,t.`id` tid,t.`name` tname FROM
(SELECT * FROM
student s
LEFT JOIN
t_s ts
ON
s.`id`=ts.`sid`) s
LEFT JOIN
teacher t
ON
s.tid=t.`id`
</select>
八、 三大框架整合
- web.xml改动:不仅仅引入SpringMVC的核心配置 也引入Spring的核心配置文件
- Mybatis核心配置 删除所有的 但是文件留着 以后会用到
- 在Spring核心中添加sql会话工厂的配置
<!-- 配置sql会话工厂 -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 配置数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 引入Mybatis的核心配置文件 -->
<property name="configLocation"
value="classpath:/sqlMapConfig.xml"></property>
<!-- 引入所有的Mapper配置文件 -->
<property name="mapperLocations"
value="classpath:/cn/tedu/pojo/*.xml"></property>
</bean>
- 在Spring核心中配置Mapper接口的扫描器
<!-- 配置mapper接口扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.tedu.mapper"></property>
</bean>