Mybatis学习(叁)

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

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

Mybatis学习(叁)

Mybatis学习(叁)

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

Mybatis学习(叁)

二、多表查询

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

通过Mybatis开发DAO的步骤:

1、建表

2、实体

3、类型别名

4、DAO接口

5、mapper文件实现DAO

6、mapper文件注册

7、测试(Service)

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

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

Mybatis学习(叁)

Mybatis学习(叁)

2、Mybatis做多表查询表的处理

Mybatis学习(叁)

3、mapper文件处理

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

建表

Mybatis学习(叁)

实体

Mybatis学习(叁)

类型别名

DAO的接口

mapper文件实现DAO

Mybatis学习(叁)

注意:

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

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

mapper文件注册

测试

b、一对多关系

建表

Mybatis学习(叁)

实体

Mybatis学习(叁)

mapper文件

Mybatis学习(叁)

c、多对多关系

Mybatis学习(叁)

建表

Mybatis学习(叁)

实体:

Mybatis学习(叁)

mapper文件

Mybatis学习(叁)

三、动态sql(Dynamic SQL)

作用:简化开发

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

Mybatis学习(叁)

Mybatis学习(叁)

2、where标签

Mybatis学习(叁)

Mybatis学习(叁)

第二种处理:

Mybatis学习(叁)

3、set标签:

Mybatis学习(叁)

第二种处理:

Mybatis学习(叁)

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

<update  id="">

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

</update>

Mybatis学习(叁)

常用的jdbcType:TINYINT  DOUBLE  TIMESTAMP

5、${value}  动态sql拼接

Mybatis学习(叁)

四、Mybatis的缓存(cache)

Mybatis学习(叁)

问题:多次相同的查询操作,频繁的操作操作数据,频繁使用网络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提交,清空缓存,避免脏读

上一篇:python3.6环境中django2.0与xadmin0.6结合的后台管理


下一篇:socket网络编程中read与recv区别