Java Mybatis 框架 VII 之 Mybatis 扩展
Java Mybatis 框架 VII 之 Mybatis 扩展
Mybatis 扩展
1.关于#{}和${}格式的占位符
● 在Mybatis中,配置SQL语句时,参数可以使用#{}或${}格式的占位符
● 例如存在需求:分页查询表中的所有数据。
● 需要执行的SQL语句大致是:
select * from ams_admin order by id limit ?, ?
● 则此功能的抽象方法应该是:
List<Admin> listPage(@Param("offset") Integer offset,
@Param("size") Integer size);
● 配置SQL语句:
<select id="listPage" resultMap="BaseResultMap">
select
<include refid="BaseQueryFields" />
from ams_admin
order by id
limit #{offset}, #{size}
</select>
● 执行测试:
@Test
public void testListPage() {Integer offset = 0;
Integer size = 3;
List<Admin> adminList = adminMapper.listPage(offset, size);
System.out.println("查询到的记录数:" + adminList.size());
for (Admin admin : adminList) {System.out.println(admin);
}
}
● 以上代码可以正常通过测试,并且观察结果也都是符合预期的,即使把
SQL语句中的#{}换成${}格式,也是完全没有问题的!
● 例如还存在需求:根据用户名查询此用户的详情
● 在“根据用户名查询用户详情”时,如果将username=#{username}换
成username=${username}会出现错误!
● 其实,使用#{}格式的占位符时,Mybatis在处理时会使用预编译的做法,
所以,在编写SQL语句时不必关心数据类型的问题(例如字符串值不需要
添加单引号),也不存在SQL注入的风险!这种占位符只能用于表示某个
值,而不能表示SQL语句片段!
● 当使用${}格式的占位符时,Mybatis在处理时会先将参数值代入到SQL语
句中,然后再执行编译相关过程,所以需要关心某些值的数据类型问题
(例如涉及字符串值时,需要在编写SQL语句时添加一对单引号框住字符
串),并且,存在SQL注入的风险!其优点是可以表示SQL语句中的任何
片段!
● 在一般情况下,应该尽可能的使用#{}格式的占位符,并不推荐使用 格式的占位符,即使它可以实现“泛用”的效果!●在一些特殊的情况下,如果一定要使用 {}格 式的占位符,即使它可以实现“泛用”的效果! ● 在一些特殊的情况下,如果一定要使用 格式的占位符,即使它可以实现“泛用”的效果!●在一些特殊的情况下,如果一定要使用{}格式的占位符,必须考虑SQL注
入的风险,应该使用正则表达式或其它做法避免出现SQL注入问题!
2.Mybatis的缓存机制
● 缓存:通常是一个临时存储的数据,在未来的某个时间点可能会被删除
● 通常,存储缓存数据的位置是读写效率较高的,相比其它“非缓存”的数
据有更高的处理效率
● 由于缓存的数据通常并不是必须的,则需要额外消耗一定的存储空间,同
时由于从缓存获取数据的效率更高,所以是一种牺牲空间、换取时间的做
法
● 另外,你必须知道,从数据库读取数据的效率是非常低下的
● Mybatis有2种缓存机制,分别称之一级缓存和二级缓存
● 一级缓存是基于SqlSession的缓存,也称之为“会话缓存”
,仅当是同一个会话、同一个Mapper、同一个抽象方法(同一个SQL语句)、同样的参数值时有效,一级缓存在集成框架的应用中默认是开启的,且整个过程不由人为控制(如果是自行得到SqlSession后的操作,可自行清理一级缓存)
● 二级缓存默认是全局开启的,它是基于namespace的,所以也称之为
“namespace缓存”,需要在配置SQL语句的XML中添加节点,以表示当前XML中的所有查询都允许开通二级缓存,并且,在节点上配置useCache=“true”,则对应的节点的查询结果将被二级缓存处理,并且,此查询返回的结果的类型必须是实现了Serializable接口的,如果使用了配置如何封装查询结果,则必须使用节点来封装主键的映射,满足以上条件后,二级缓存将可用,只要是当前namespace中查询出来的结果,都会根据所执行的SQL语句及参数进行结果的缓存
● 无论是一级缓存还是二级缓存,只要数据发生了写操作(增、删、改),
缓存数据都将被自动清理
● 由于Mybatis的缓存清理机制过于死板,所以,一般在开发实践中并不怎
么使用!更多的是使用其它的缓存工具并自行制定缓存策略
我是将军;我一直都在,。!
Java Mybatis 框架 VII 之 Mybatis 扩展相关推荐
- java day53【 Mybatis框架概述 、 Mybatis 框架快速入门、自定义 Mybatis 框架 】
第1章 框架概述 1.1 什么是框架 1.1.1 什么是框架 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种 定义认为,框架是可被应用开发者定 ...
- mybatis框架总体说明---Mybatis学习笔记(二)
mybatis是什么? mybatis是一个持久层的框架,是apache下的顶级项目,后来托管到googlecode下,再后来托管到github下(https://github.com/mybatis ...
- 【Mybatis框架】初识Mybatis
CSDN话题挑战赛第2期 参赛话题:学习笔记 MyBatis 1.MyBatis简介 1.1.MyBatis历史 1.2.MyBatis特性 2. 搭建MyBatis 2.1 创建一个Maven项目 ...
- Java SSM框架学习之Mybatis篇
文章目录 一.ResultMapper 以及 分页 ResultMapper: 分页: 书写代码的准备工作: 首先创建获取sqlsession的工具类: 书写Mybatis的配置文件: 一.Mybat ...
- 【java企业框架】 SpringMVC mybatis SSM java redis 集代码生成器
博文来源:http://www.fhadmin.org/webnewsdetail2.html A代码编辑器,在线模版编辑,仿开发工具编辑器,pdf在线预览,文件转换编码 B 集成代码生成器 [正反双 ...
- 【速学java】 java后台框架 springmvc整合mybatis框架源码
三大数据库 mysql oracle sqlsever 更专业.更强悍.适合不同用户群体 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] A 调用摄像头拍照,自定义裁剪编辑 ...
- 最详细的Spring+SpringMVC+Mybatis框架整合及mybatis分页讲解,适合初级者
最详细的关于idea整合ssm框架讲解 一个关于brand(品牌)的项目 [ssm框架搭建源代码及mysql数据库数据]链接:https://pan.baidu.com/s/1eBogklK0rFLj ...
- MySQL数据库事务、mybatis框架、spring框架、springmvc框架、永和大王门店管理系统(框架第二部分)
第十二章 MySQL数据库事务 一. 事务及四大特性 1.什么是事务 数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行 ...
- MyBatis框架学习DAY_01:概念/创建运行流程
MyBatis框架 1. MyBatis框架的作用 2. 创建MyBatis项目 3. 连接数据库 4. 创建数据表 5. 插入数据 5.1. 定义抽象方法 5.2. 配置SQL语句 5.3. 获取自 ...
最新文章
- bootstrap轮播如何支持移动端滑动手势
- java dateformat类_JAVA--常量池,Date类,SimpleDateFormat类与Calendar类
- ChromeDriver启动Chrome浏览器后,地址栏只显示data;——chromeDriver版本不对
- 处理Matlab Coder之后, Compiler can't find tmwtypes.h问题
- java web.xml_Java Web之XML基础
- JDK1.6历史版本的下载
- 看反病毒专家对EICAR检测代码的专业解读
- div超出不换行_div+CSS设置一行内文字超过宽度不换行且不显示
- java 并发测试main方法_Java并发测试
- selenium之 chromedriver与chrome版本映射表(更新至v2.43)
- SpringBoot实战(十):统一异常处理
- 计算机软件评估资料,软件项目工作量评估方法 计算机软件及应用 IT计算机 专业资料.doc...
- Linux 相关基础笔记
- jabber服务器搭建
- 散热风扇是吹风还是吸风,配电柜电气柜机柜散热风扇的原理。
- android模拟器安装frida
- Java解析X509证书代码
- oracle 日期格式筛选,oracle 日期格式怎么筛选
- sql like N#39;%%#39;,N 是代表什么意思 及Like语句详解
- WebPack+React.Js+BootStrap 实现进制转换工具
热门文章
- jquery实现截取pc图片_[置顶] JQuery在线截取图片
- matlab 求离散点的切线,在离散数据点的某个点上查找切线向量
- 2021-10-24为什么变压器(三角,星)外接零序电压时,零序电抗为无穷大?
- 备份 dup linux,如何用DéjàDup备份Ubuntu的简单方法
- 赏中华诗词,品生活之美。诗词类App——西窗烛。
- SequoiaDB分布式数据库2022.2月刊
- python语言的主网站网址-python官方网站
- 浅谈一下单片机的定时器功能
- 翻回头看自己走过的路
- 中红外激光行业调研报告 - 市场现状分析与发展前景预测