mybatis框架详解(二)

接上,如果想要按id查找一条数据

这样拿值(#{}),引用类型时,拿到parameterType里的类的该字段的值

#{} 参数是采用预编译 防止sql注入

${}参数是采用sql拼接 无法防止sql注入

#{} 参数是简单类型 (基础类型和字符串),变量可以任意

${} 参数是简单类型 (基础类型和字符串),变量必须是value

#{} 参数是引用类型,变量是引用类型中的属性,不可任意

${} 参数是引用类型 ,变量是引用类型中的属性,不可任意

在数据库中,用navicat,区间查询是这样的

1.

从七号到八号范围内的数据

2.

 在mybatis配置文件中,如下可以做到查询多条

两者等价

这样调用

还可以用可变数组调用,创建一个vo类

可变数组的uservo类

另外区间查询

collection是集合。item是单个个体(联想foreach循环),和#{id}对应,叫什么都行,但是得对应,没有结尾就不用写close了

各种标签

if

 

配置文件里,条件语句

where

用where标签,开始的sql语句(select * from user)就不用写where 1=1了(符合条件才where)

有时候有重复的,可以公用

这样就可以实现公用,直接写from user就行,前边不用写,其他语句同理

一对多

sql语句

把这些数据封到一个对象里。用户对多个账户

(List是ArrayList的多态)

这样运行会发现数据没有被封进去

因为是多表,没有完整的表对应。所以用手动映射。方法如下

一对多这么干,查的类型是Account那个类

注意

这两个对应

多对多如图,原理差不多

 延迟加载

 延迟加载可以防止运行时浪费等,使另一个东西需要时再加载

多对一相当于把之前一句话,变成现在的两句话

x

先用方法把id查出来,才能用findByIdwhere

还需要开启识别延迟加载

调的时候是一样的

发现所有东西都出来了,因为上面这个account包含用户和账号

这样写就会只输出money

 

一对多

同理

这人俩账号

 mybatis的一级缓存和二级缓存

经常查的、不经常更改的放到缓存中,缓存没有再去数据库(磁盘)

4.查第二次返回地址是一样的说明是有缓存。是取出来了。不是覆盖。如果是两条。就说明没有缓存

关于map

map就是key(在这里是sql语句):value(在这里是sql语句查出来的对象)格式.key在数组。value在链表

一级缓存存在的证明

由此可见有一级缓存存在。刚刚地址一样没有重新查。现在提交了没有缓存了就得重新查 

二级缓存存的是一些离散的数据。不存放对象。存放的是零散的sql语句。语句用一个,但是对象是两个

存的是离散数据

二级缓存默认不开启。要在配置文件中加“<cache/>”开启,而且没有一级缓存才能用二级缓存

开启步骤 

执行顺序是:先找1级,一级没有再找二级。最后找数据库。所以测试的时候先把一级缓存干掉

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值