MyBaits入门完结篇

news2024/12/26 17:37:31
  • 不仅可以判断参数,还可以判断_parameter和_databasedId

  • bind标签

  • sql标签配合include标签完成对重复sql语句的抽取

  • 要在带注解的映射器接口类中使用动态 SQL,可以使用 script 元素

  • 缓存

    • 一级缓存
    • 一级缓存失效情况
    • 手动清空缓冲的函数:
  • 二级缓存: namespace级别的缓存,隔一段时间会自动刷新缓存

    • 只有在sqlSession关闭或提交后,才会把数据从一级缓存中,搬家来到二级缓存
  • 第一步:配置文件中开启二级缓存

  • 第二步:在需要使用二级缓存的映射文件中使用cache配置缓存

  • 第三步: POJO对象需要实现序列化接口

  • 二级缓存cache标签里面的相关属性

  • 缓存的查询顺序

  • 缓存原理----每一个dao有他自己的二级缓存

  • 缓存有关的设置

  • 整合第三方缓存—这里整合ehcache—java进程内的缓存框架

    • 1.导入依赖
  • 2.ehcache要工作需要一个配置文件,文件名叫ehcache.xml,放在类路径的根目录下

  • 3.在Dao.xml的mapper标签中配置使用自定义的缓存

  • 4.如果要和别的dao共用一个缓存,只需要在当前dao.xml的mapper标签里面引用别的dao的缓存即可

动态sql----简化sql语句动态拼串操作

=====================================================================================

if标签—OGNL表达式


环境搭建:

在这里插入图片描述

Lock类:

public class main {

static SqlSessionFactory sqlSessionFactory;

static public void initSqlSessionFactory() throws IOException {

String resource = “MyBaits-config.xml”;

InputStream inputStream = Resources.getResourceAsStream(resource);

sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

}

public static void main(String[] args) throws IOException

{

initSqlSessionFactory();

SqlSession sqlSession = sqlSessionFactory.openSession(true);

try{

LockDao lock = sqlSession.getMapper(LockDao.class);

Lock l1=new Lock();

l1.setId(1);

l1.setName(“%锁”);

l1.setPrice(1000);

Lock l = lock.getLockByCondition(l1);

System.out.println(l);

}finally

{

sqlSession.close();

}

}

}

LockDao接口类:

public interface LockDao {

public Lock getLockByCondition(Lock lock);

}

LockDao.xml:

<?xml version="1.0" encoding="UTF-8" ?>

SELECT l.id,l.lockName name,l.price FROM lock l where

id > #{id} and

lockName like #{name} and

price < #{price}

MyBaits-config.xml:

main:

public class main {

static SqlSessionFactory sqlSessionFactory;

static public void initSqlSessionFactory() throws IOException {

String resource = “MyBaits-config.xml”;

InputStream inputStream = Resources.getResourceAsStream(resource);

sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

}

public static void main(String[] args) throws IOException

{

initSqlSessionFactory();

SqlSession sqlSession = sqlSessionFactory.openSession(true);

try{

LockDao lock = sqlSession.getMapper(LockDao.class);

Lock l1=new Lock();

l1.setId(1);

l1.setName(“%锁”);

l1.setPrice(1000);

Lock l = lock.getLockByCondition(l1);

System.out.println(l);

}finally

{

sqlSession.close();

}

}

}

结果:

在这里插入图片描述


where标签


where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。

写了where标签后,后自动在sql语句后面拼接一个where

我们查询的条件就放在where标签中,每个and写在前面,where自动帮我们取出多余的and

<?xml version="1.0" encoding="UTF-8" ?>

SELECT l.id,l.lockName name,l.price FROM lock l

id > #{id} and

lockName like #{name} and

price < #{price}

在这里插入图片描述


trim标签


截取字符串

prefix=“” :前缀,为我们下面的sql语句整体添加一个前缀

prefixOverrides=“” :取出整体字符串前面可能多余的字符

suffix=“” :为整体添加一个后缀

suffixOverrides=“”:取出整体字符串后面可能多用的字符


下面自动帮我们添加一个where前缀,去掉整体最开始的and和最后的and

<?xml version="1.0" encoding="UTF-8" ?>

SELECT l.id,l.lockName name,l.price FROM lock l

and id > #{id}

and lockName like #{name}

and price < #{price} and

在这里插入图片描述


foreach标签


在这里插入图片描述

LockDao接口类:

public interface LockDao {

public List getLockByCondition(@Param(“list”) List listId);

}

LockDao.xml:

<?xml version="1.0" encoding="UTF-8" ?>

SELECT l.id,l.lockName name,l.price FROM lock l WHERE id IN

/对应list集合来说,key默认为list,我们也可以自己指定参数的key值/

#{id_item}

main:

public class main {

static SqlSessionFactory sqlSessionFactory;

static public void initSqlSessionFactory() throws IOException {

String resource = “MyBaits-config.xml”;

InputStream inputStream = Resources.getResourceAsStream(resource);

sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

}

public static void main(String[] args) throws IOException

{

initSqlSessionFactory();

SqlSession sqlSession = sqlSessionFactory.openSession(true);

try{

LockDao lock = sqlSession.getMapper(LockDao.class);

List idList=new LinkedList();

idList.add(1);

idList.add(2);

idList.add(3);

idList.add(4);

idList.add(5);

List lockList = lock.getLockByCondition(idList);

for(Lock l:lockList)

{

System.out.println(1);

}

}finally

{

sqlSession.close();

}

}

}

在这里插入图片描述


chose标签—当做if…else或者switch使用


LockDao.xml :

<?xml version="1.0" encoding="UTF-8" ?>

SELECT l.id,l.lockName name,l.price FROM lock l

id=#{id}

id=2

LockDao接口:

public interface LockDao {

public Lock getLockByCondition(@Param(“id”) Integer id);

}

在这里插入图片描述


如果传入对象,那么在使用属性名的时候可以识别

传入基本数据类型时,防止如下错误发生:There is no getter for property named id in class java.lang.Integer ,给参数设置key名

在这里插入图片描述


字段部分更新-----》if结合set

在这里插入图片描述

update lock

lockName=#{name},

price=#{price},

id=#{id}

在这里插入图片描述

在这里插入图片描述


OGNL表达式


![在这里插入

图片描述](https://img-blog.csdnimg.cn/adf8b6a9bce6471298a24709fe38f629.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzUzMTU3MTcz,size_16,color_FFFFFF,t_70)

不仅可以直接调用属性,还可以调用方法

OGNL表达式里面的集合伪属性

在这里插入图片描述

//前提,list是集合


不仅可以判断参数,还可以判断_parameter和_databasedId

在这里插入图片描述


bind标签


bind 元素允许你在 OGNL 表达式以外创建一个变量,并将其绑定到当前的上下文。比如:

SELECT * FROM BLOG

WHERE title LIKE #{pattern}



sql标签配合include标签完成对重复sql语句的抽取


在这里插入图片描述


要在带注解的映射器接口类中使用动态 SQL,可以使用 script 元素


在这里插入图片描述


缓存

=================================================================

在这里插入图片描述


一级缓存


在这里插入图片描述

在这里插入图片描述

一级缓存失效情况

在这里插入图片描述

在这里插入图片描述

手动清空缓冲的函数:

sqlSession.clearCache();


二级缓存: namespace级别的缓存,隔一段时间会自动刷新缓存


只有在sqlSession关闭或提交后,才会把数据从一级缓存中,搬家来到二级缓存

在这里插入图片描述


第一步:配置文件中开启二级缓存

第二步:在需要使用二级缓存的映射文件中使用cache配置缓存

第三步: POJO对象需要实现序列化接口

在这里插入图片描述


二级缓存cache标签里面的相关属性

在这里插入图片描述


缓存的查询顺序


在这里插入图片描述


缓存原理----每一个dao有他自己的二级缓存


在这里插入图片描述


缓存有关的设置


在这里插入图片描述
缓存的查询顺序


在这里插入图片描述


缓存原理----每一个dao有他自己的二级缓存


在这里插入图片描述


缓存有关的设置


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/86988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【众筹】百问网DShanMCU-Mio开源掌机(爻-澪)项目,完美支持运行10多个模拟器!

众筹说明 定金翻倍&#xff0c;即定金19.9元&#xff0c;在付尾款时可抵40元(成品售价不会超过120元)&#xff01;达标当天就开搞&#xff0c;满100人加速搞尽量在年前发货&#xff0c;让大家先玩起来&#xff01;如果不达标则原路退款&#xff0c;项目取消。 众筹时间&#…

ADI Blackfin DSP处理器-BF533的开发详解44:图像处理专题-StenciFilter (图像的平滑处理)(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 代码实现了图像的平滑处理&#xff08;高斯模板&#xff09;&#xff0c;代码运行时&#xff0c;会通过文件系统打开工程文件根目下&qu…

NetCore基于Roslyn的动态编译实现

目录 一. AvalonEdit文本器 1.功能实现 2. 高亮 3. 代码提示 二. 运行效果展示 三. 源码链接 四. 参考资料 一. AvalonEdit文本器 1.功能实现 直接用Github上的源码进行实现&#xff0c;icsharpcode/AvalonEdit&#xff1a;The WPF-based text editor component used i…

在R语言中使用概率分布:dnorm,pnorm,qnorm和rnorm

在这里&#xff0c;我将讨论哪些函数可用于处理正态分布&#xff1a;dnorm&#xff0c;pnorm&#xff0c;qnorm和rnorm。 R中的分布函数 有四个关联的函数&#xff0c; 四个正态分布函数是&#xff1a; d范数&#xff1a;正态分布的密度函数p范数&#xff1a;正态分布的累积密…

【Spring】SpringBoot 配置 log4j2 日志

1. 概述 Apache Log4j2 是对原先的 Log4j 项目的升级版本&#xff0c;参考了 logback 的一些优秀的设计&#xff0c;并且修复了一些问题&#xff0c;因此带来了一些重大的提升。 2. 案例与解析 2.1 引入依赖 SpringBoot 的 starter 自带的是 logback 日志&#xff0c;若要使…

数据结构Data Structure和算法Algorithm导航目录(持续更新)

文章目录1. 大纲2. 算法基础3. 数据结构3.1 线性结构3.1.1 字符串3.1.2 线性表3.1.3 Hash表3.1.4 栈3.1.5 队列3.1.6 位图3.2 逻辑结构3.2.1 树3.2.1.1 二叉树3.2.1.2 动态查找树3.2.1.3 多路查找树3.2.2 图3.2.4 堆4. 算法4.1 排序4.2 查找5. 领域算法6. 优秀算法赏析1. 大纲 …

STM32F4 | 按键输入实验

文章目录一、STM32F4 IO 口简介二、硬件设计三、软件设计四、实验现象五、STM32CubeMX 配置 IO 口输出这一章&#xff0c;我们将通过 ALIENTEK阿波罗 STM32 开发板上载有的 4 个按钮&#xff08; KEY_UP、 KEY0、 KEY1 和 KEY2&#xff09;&#xff0c;来控制板上的 2 个 L…

成功的项目管理需要做好哪些方面?

每一个项目都代表了为公司建立同行竞争优势和提高利润的方式&#xff0c;成功交付的项目会将公司与那些竞争激烈的公司区分开来。而项目的成功取决于不同的因素。这也是项目经理所需要关注的问题&#xff0c;在每一个项目成功标准方面保持一致可以消除项目失败的风险&#xff0…

【数据库课程设计】SQLServer数据库课程设计(学生宿舍管理),课设报告+源码+数据库关系图

数据库课程设计——学生宿舍管理&#xff0c;需要全部源码可以关注私信我&#xff0c;把邮箱发在评论区前言一、课题背景和开发环境1、课题背景2、开发环境二、系统功能及示意图1、系统实现功能2、功能示意图2.1学生模块2.2管理人员模块三、概念结构设计1、管理员分配宿舍E_R图…

传染病模型3

一、研究方向 建立传染病的数学模型描述传染病的传播过程 分析感染人数的变化规律&#xff0c;预测传染病高峰的到来 探索控制、根除、预防传染病传播蔓延的手段 二、舱室 流行病学中的一大类模型&#xff0c;称为“舱室”模型&#xff0c;它是将人群分成若干个“舱室…

为什么机器码、汇编不可移植,而C语言可以移植?

1、机器码不可移植的原因 机器码&#xff08;二进制&#xff09;是处理器能直接识别的语言&#xff0c;不同的机器码代表不同的运算指令&#xff0c;处理器可以识别哪些机器码是由处理器的硬件设备决定的&#xff0c;不同的处理器机器码可能不同。 比如在ARM处理器上加法可能…

Linux 线程池

文章目录线程池的定义使用线程池的原因基于POSIX实现的线程池基于block队列的线程池实现基于ring队列的线程池实现设计单例模式线程池线程池的定义 线程池就一堆已经创建好的任务线程&#xff0c;初始它们都处于空闲等待状态&#xff0c;当有新的任务需要处理的时候&#xff0…

大话设计模型 Task01:设计原则

目录1. 单一职责原则&#xff08;SRP&#xff09;使用动机如何使用2. 开闭原则&#xff08;OCP&#xff09;使用动机如何使用使用原则3. 依赖倒置原则&#xff08;DIP&#xff09;使用动机使用原则4. 里氏替换原则&#xff08;LSP&#xff09;使用动机5. 迪米特法则&#xff08…

12、MInio文件系统的使用小记一

前言&#xff1a;文档存储从最初的文本文档发展到现在的图片视频存储&#xff0c;存储容器也从数据库演变成了文件系统&#xff0c;目前市面上提供云存储的公司很多&#xff0c;百度腾讯阿里华为等&#xff0c;这些公司都有成熟的文件存储方案及restapi接口&#xff0c;很方便&…

Docker-网络配置

目录 一&#xff0c;网络模式 1.bridge模式&#xff08;默认模式&#xff09; 2.host模式 二&#xff0c;bridge模式 三&#xff0c;host模式 网络模式与数据卷容器挂载的操作 三&#xff0c;如何创建自定义网络 一&#xff0c;网络模式 Docker在创建容器时有四种网络模式…

Sulfo CY5-马来酰亚胺|Cyanine5 MAL菁染料CY5标记

Sulfo CY5-马来酰亚胺|Cyanine5 MAL菁染料CY5标记 Cyanine5 maleimide是单一活性染料&#xff0c;有选择性的与硫醇基团&#xff08;比如蛋白和多肽的半胱氨酸&#xff09;结合以进行标记。我们使用水溶的Sulfo-Cyanine5 maleimide标记抗体和其他敏感蛋白。Cyanine5是Cy5的类似…

web前端设计与开发期末作品_期末大作业【使用HTML制作汽车首页】

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

校园二手商品交易平台的设计与实现(J2EE)

目 录 摘要 I Abstract II 目录 III 1 绪论 1 1.1 课题研究背景及意义 1 1.2 本课题主要工作 1 2 系统相关技术 3 2.1 J2EE技术 3 2.2 MVC模式 4 2.3 B/S结构 4 2.4 数据库技术 4 3 系统需求分析 6 3.1 用户功能需求 6 3.2 系统可行性分析 6 3.2.1 技术可行性 6 3.2.2 经济可行…

Qt扫盲-QComboBox理论总结

QComboBox理论总结1. 简述2. 显示内容3. 信号4. 常用功能5. model/view 使用1. 简述 QComboBox 提供了一种以占用最小屏幕空间的方式向用户显示选项列表的方法。QCombox是显示当前项目的选择小部件&#xff0c;可以弹出可选项目的列表。QComBox其实就是一个下拉列表。选择的项…

做短视频开直播要不要买流量?

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 做短视频要不要买流量&#xff0c;开直播要不要买流量&#xff0c;买了流量以后是不是就要一直买&#xff0c;不买就没有免费流量了? 在这儿给大家普及一下这件事&#xff1a; 在买流量之前呢&…