一、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提交,清空缓存,避免脏读

最新文章

  1. java中的URLConnection
  2. 一种在视频OBJECT标签上放置均分四个区域的框选方法
  3. BZOJ 4034 BIT &amp; Dfs序
  4. (转)Python rsa 签名与验证 sign and verify
  5. java四舍五入的取舍
  6. CentOS6.5升级内核到3.10.28 --已验证
  7. Html.Listbox的用法(实例)
  8. 第四周 更新Scrum站立会议
  9. laravel查询构造器中别名的问题
  10. 常用的CSSreset整理
  11. jqGrid中实现radiobutton的两种做法
  12. Linux操作系统中,.zip、.tar、.tar.gz、.tar.bz2、.tar.xz、.jar、.7z等格式的压缩与解压
  13. Oracle 关于V$OPEN_CURSOR
  14. 国内为什么没有好的 Stack Overflow 的模仿者?,因为素质太低?没有分享精神?
  15. shell脚本 expect 实现自动登陆
  16. C#将dataGridView中显示的数据导出到Excel(大数据量超有用版)
  17. unity(c# ioc框架) 使用总结
  18. xueping wang 记录
  19. 英语口语练习系列-C30-生日-年历的周日和月份-如果白昼落进
  20. java_20 LinkedList类

热门文章

  1. Infragistics UltraGrid的使用
  2. 在Struts2中配置Action
  3. FCKeditor使用方法技术详解
  4. Python3基础 print 自带换行功能
  5. SqlSever基础 datepart函数 返回这一秒已经过去了多少毫秒
  6. C#控制台基础 函数的参数是接口 实现接口的类都可以作为参数,很好用
  7. Problem W UVA 662 二十三 Fast Food
  8. 关于directX最近的学习方案
  9. CUBRID学习笔记 12防火墙设置 linux
  10. ubuntu14.04 64位系统下编译3.13.11内核源码