Mybatis学习(叁)

一、resultMap[结果映射  关系映射]

作用:当查询的数据与数据库中的数据不一致(表中字段和实体的属性不一样),通过resultMap进行一次映射。

可以使用简单的做法:(取别名)

二、多表查询

在实际中,数据不仅仅来源与一张表(多表查询)

通过Mybatis开发DAO的步骤:

 

1、建表

 

2、实体

 

3、类型别名

 

4DAO接口

 

5mapper文件实现DAO

 

6mapper文件注册

 

7、测试(Service)

 

 

1Mybatis进行多表操作时需要解决的问题

 

1、实体需要处理:实体与实体之间并不是孤立存在 ,存在关系从属有has a

 

2Mybatis做多表查询表的处理

3mapper文件处理

a、一对一关系(Person----Passport)

建表

实体

类型别名

DAO的接口

mapper文件实现DAO

注意:

1、在查询时,通常需要给字段取别名,防止查询是多表中出现相同的字段

2、实体之间如果需要建立双向关系,在两个实体中都需要添加关系属性

mapper文件注册

测试

b、一对多关系

建表

实体

mapper文件

c、多对多关系

建表

实体:

mapper文件

三、动态sql(Dynamic SQL)

作用:简化开发

1sql片段:把重复使用的sql片段提取出来,方便使用

 

2where标签

第二种处理:

3set标签:

第二种处理:

4jdbcType:当插入数据或者修改数据时,添加或者修改的值就为null

<update  id="">

   update t_person set name=#{pname,jdbcType=VARCHAR} where id=#{pid}

</update>

常用的jdbcTypeTINYINT  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提交,清空缓存,避免脏读

原文地址:https://www.cnblogs.com/ClassNotFoundException/p/5976982.html