from emp and ename=#{eName} and addr=#{addr}
foreach迭代标签update emp where empno=#{empNo} ename=#{eName}, job=#{job}, addr=#{addr},
如果参数是一个数组,使用foreach遍历数组
//批量删除 public int deleteEmpByBatch(String[] ary);
delete from emp where empno in #{ary}
collection:参数的所属容器的类型:如果参数是数组array List集合—list Map集合—map
item:参数的名字
index: 索引
2、重点:mybatis缓存机制目的:把查询存放起来,下次查询时,直接从存放的位置获取即可,提升查询效率
问题:数据容易过期
mybatis的缓存机制有两种:
一级缓存机制:默认的,session级别的缓存原理:使用一个sqlsession查询时,把查到的结果用session缓存
如果session没有关闭,下次还执行同样sql查询,则直接返回session中缓存的数据
一级缓存失效的场景:提交事务,清空session缓存
关闭session,清空数据
flush(),清空缓存数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bWcSjgtU-1634362215716)(C:UsersASUSDesktop笔记老师笔记三阶段day5picimage-20211015094739813.png)]
二级缓存:对查询结果进行序列化,跨session要求:实体类支持可序列化
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DFNbIgWa-1634362215720)(C:UsersASUSDesktop笔记老师笔记三阶段day5picimage-20211015133456503.png)]
二级缓存的设置:
1、在mybatis-config.xml开启二级缓存,mybatis的所有查询可以使用了
2、在对应mapper文件中开启
【说明】此mapper中的所有查询都进行二级缓存
如果某个查询不使用二级缓存,直接查数据库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i3Y73kOZ-1634362215722)(C:UsersASUSDesktop笔记老师笔记三阶段day5picimage-20211015134215934.png)]
测试代码
public class TestCache2 {
public static void main(String[] args) {
EmpDao empDao= MybatisUtil.getMapper(EmpDao.class);
//查询一次
List list=empDao.findEmp();
for (Emp e: list
) {
System.out.println(e);
}
//提交事务为了关闭sqlSession
MybatisUtil.commitSession();
System.out.println("----------------------------------------------");
EmpDao empDao1= MybatisUtil.getMapper(EmpDao.class);
List list1=empDao1.findEmp();
for (Emp e: list1
) {
System.out.println(e);
}
}
}
清空二级缓存:
package com.qf.mybatis2103.test.day5;
import com.qf.mybatis2103.dao.EmpDao;
import com.qf.mybatis2103.pojo.Emp;
import com.qf.mybatis2103.util.MybatisUtil;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class TestCache2 {
public static void main(String[] args) {
EmpDao empDao= MybatisUtil.getMapper(EmpDao.class);
//查询一次
List list=empDao.findEmp();
for (Emp e: list
) {
System.out.println(e);
}
//关闭sqlSession,查询结果才被进行二级缓存
MybatisUtil.commitSession();
//数据变化
//数据删除后,提交事务
//只要数据有变化,且提交事务,二级缓存就删除
EmpDao empDao2=MybatisUtil.getMapper(EmpDao.class);
int result=empDao2.deleteEmpById("1003");
System.out.println("删除结果:"+(result==1));
MybatisUtil.commitSession();
System.out.println("----------------------------------------------");
EmpDao empDao1= MybatisUtil.getMapper(EmpDao.class);
List list1=empDao1.findEmp();
for (Emp e: list1
) {
System.out.println(e);
}
}
}
3、Druid连接池配置
1、添加依赖
com.alibaba druid 1.1.16
2、新建类,继承PooledDataSourceFactory
package com.qf.mybatis2103.util;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.datasource.pooled.PooledDataSourceFactory;
public class MyDataSource extends PooledDataSourceFactory {
public MyDataSource(){
//替换
this.dataSource=new DruidDataSource();
}
}
3、配置Druid连接池
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7wClEDXs-1634362215725)(C:UsersASUSDesktop笔记老师笔记三阶段day5picimage-20211015143700019.png)]
3、分页分页方式:
1、后台分页:从数据库查询时,只查询当前页的数据
2、前端分页:查询所有数据返回给前端
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ORfC8nL-1634362215727)(C:UsersASUSDesktop笔记老师笔记三阶段day5picimage-20211015144930171.png)]
分页实现:
1、添加分页插件的依赖:
com.github.pagehelper pagehelper5.1.10
2、在mybatis-config.xml中配置分页插件
3、分页代码
public static void main(String[] args) {
//【注意】在获取所有数据之前设置查询的页码的信息
//设置查询的页数及数据条数
PageHelper.startPage(3,2);
//获取所有数据
List empList= MybatisUtil.getMapper(EmpDao.class).findEmp();
//设置PageInfo
PageInfo pageInfo=new PageInfo(empList);
System.out.println(pageInfo);
List pageEmp=pageInfo.getList();
for (Emp emp: pageEmp
) {
System.out.println(emp);
}
}
til.getMapper(EmpDao.class).findEmp();
//设置PageInfo PageInfopageInfo=new PageInfo (empList); System.out.println(pageInfo); List pageEmp=pageInfo.getList(); for (Emp emp: pageEmp ) { System.out.println(emp); }
}



