一、resultMap[结果映射 关系映射]
作用:当查询的数据与数据库中的数据不一致(表中字段和实体的属性不一样),通过resultMap进行一次映射。
可以使用简单的做法:(取别名)
二、多表查询
在实际中,数据不仅仅来源与一张表(多表查询)
通过Mybatis开发DAO的步骤:
1、建表
2、实体
3、类型别名
4、DAO接口
5、mapper文件实现DAO
6、mapper文件注册
7、测试(Service)
1、Mybatis进行多表操作时需要解决的问题
1、实体需要处理:实体与实体之间并不是孤立存在 ,存在关系从属有has a
2、Mybatis做多表查询表的处理
3、mapper文件处理
a、一对一关系(Person----Passport)
建表
实体
类型别名
DAO的接口
mapper文件实现DAO
注意:
1、在查询时,通常需要给字段取别名,防止查询是多表中出现相同的字段
2、实体之间如果需要建立双向关系,在两个实体中都需要添加关系属性
mapper文件注册
测试
b、一对多关系
建表
实体
mapper文件
c、多对多关系
建表
实体:
mapper文件
三、动态sql(Dynamic SQL)
作用:简化开发
1、sql片段:把重复使用的sql片段提取出来,方便使用
2、where标签
第二种处理:
3、set标签:
第二种处理:
4、jdbcType:当插入数据或者修改数据时,添加或者修改的值就为null
<update id="">
update t_person set name=#{pname,jdbcType=VARCHAR} where id=#{pid}
</update>
常用的jdbcType:TINYINT DOUBLE TIMESTAMP
5、${value} 动态sql拼接
四、Mybatis的缓存(cache)
问题:多次相同的查询操作,频繁的操作操作数据,频繁使用网络I/O和磁盘I/O,大大降 低软件效率。
缓存:缓冲存储,属于内存的一块区域。把第一次查询的结果保存在缓存,以后相同的查询 操作,可以避免与数据库的交互
缓存可能存在的风险:
脏读:数据库的数据和查询的结果(从缓存中)不一样,Mybatis规避,只要事务提交,Mybatis就会清空缓存
使用缓存:
1、在mybatis-conf.xml中配置,让缓存生效
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
2、在需要使用缓存查询的mapper文件中加上<cache></cache>
3、缓存在SQLSession关闭后生效
4、对实体进行序列化
注意:
查询完毕,关闭SQLSession,让缓存生效
DML操作完毕,SQLSession提交,清空缓存,避免脏读