mybatis的#{}和${}的区别就像是 PreparedStatement 和statement , 使用${}接收的参数还需用@Param注解修饰 , 推荐用#{}

动态SQL

MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。

虽然在以前使用动态 SQL 并非一件易事,但正是 MyBatis 提供了可以被用在任意 SQL 映射语句中的强大的动态 SQL 语言得以改进这种情形。

动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多元素需要花时间了解。MyBatis 3 大大精简了元素种类,现在只需学习原来一半的元素便可。MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。

代码演示

select * from user

id = #{id}

select last_insert_id()

insert into user(name,password,address)values(#{name},#{pwd},#{address})

insert into user(name,password,address)values(#{name},#{pwd},#{address})

update user

name = #{name},

password = #{pwd},

address = #{address}

where id = #{id}

select *from user

and name=#{name}

and password=#{pwd}

and address=#{address}

select *from user

where id in

#{id}

select *from user

and name=#{name}

and password=#{pwd}

and address=#{address}

insert into user(name,password,address)

values

(#{user.name},#{user.pwd},#{user.address})

延迟查询

开启配置(1-1)

映射文件

select deptId,deptName from dept where deptId = #{deptId}

select

e.empId empId

,e.empName empName

,e.deptId deptId

from emp e

延迟查询

映射文件(一对多)

select empId,empName from emp where deptId = #{deptId}

select

d.deptId deptId

,d.deptName deptName

from dept d

测试

@Test

public void test1() throws IOException {

SqlSession session = Dbutil.getSqlSession();

List list = session.getMapper(IUserDao.class).query();

for (Dept dept : list) {

System.out.println(dept.getList());

}

session.close();

}

缓存开启二级缓存

select empId, empName,deptId from emp where empId = #{empId}

测试

@Test

public void test1() throws IOException {

SqlSession session = Dbutil.getSqlSession();

List list = session.getMapper(IUserDao.class).query(1);

for (Emp emp : list) {

System.out.println(emp);

}

session.close();

System.out.println("---------------");

session = Dbutil.getSqlSession();

list = session.getMapper(IUserDao.class).query(1);

for (Emp emp : list) {

System.out.println(emp);

}

session.close();

}

mysql二级缓存,mybatis的动态sql和二级缓存相关推荐

  1. MyBatis(三)——动态SQL

    文章目录 1. 简介 2. 搭建环境 2.1 在MySQL中创建blog表 2.2 编写实体类 2.3 编写实体类对应Mapper接口 2.4 编写Mapper接口对应的Mapper.xml文件 2. ...

  2. 9、mybatis中动态sql的使用

    对于初学者,如何进行mybatis的学习呢?我总结了几点,会慢慢的更新出来.首先大家需要了解mybatis是什么.用mybatis来做什么.为什么要用mybatis.有什么优缺点:当知道了为什么的时候 ...

  3. MyBatis 03 动态SQL

    MyBatis 03 动态SQL 文章目录 MyBatis 03 动态SQL 一.学习目标 二.动态SQL if 标签2-1 if 标签2-2 where标签2-1 where 标签2-2 choos ...

  4. Mybatis学习-动态SQL

    Mybatis学习-动态SQL Mybatis学习-动态SQL Mybatis学习-动态SQL 什么是动态SQL 搭建环境 IF 接口 Mapper 测试 trim (where, set) wher ...

  5. MyBatis的动态SQL详解

    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. MyBatis中用于实现动态SQL的元素主要有:   if choose(when,otherwis ...

  6. Mybatis解析动态sql原理分析

    前言 废话不多说,直接进入文章. 我们在使用mybatis的时候,会在xml中编写sql语句. 比如这段动态sql代码: <update id="update" parame ...

  7. MyBatis中动态sql实现时间范围比较的查询

    场景 前端传递两个时间参数,开始时间和结束时间,然后从数据库中筛选出某个时间属性在此范围的数据. Mybatis的动态sql的写法. 注: 博客: https://blog.csdn.net/bada ...

  8. MyBatis中动态sql的模糊搜索、foreach实现In集合的用法

    场景 在使用MyBatis的动态sql时,常见的是传递一个ID的数组,查询记录的 ID在这个数组中的记录和模糊搜索这两种场景. 注: 博客: https://blog.csdn.net/badao_l ...

  9. mybatis的动态sql的一些记录

    动态sql的作用:传统的使用JDBC的方法,相信大家在组合复杂的的SQL语句的时候,需要去拼接,稍不注意哪怕少了个空格,都会导致错误.Mybatis的动态SQL功能正是为了解决这种问题, 其通过 if ...

最新文章

  1. informix中if else使用_面试官:代码中出现大量的if/else,需要优化,你有什么好方案?...
  2. FastDFS 使用经验分享
  3. ORACLE初始化参数文件概述
  4. Openlayers中加载Geoserver切割的EPSG:900913离线瓦片图层组
  5. JAVA——TCP连接中Socket的正确关闭方式
  6. codeforces 909C. Python Indentation
  7. Apache Camel 3.1 –即将推出更多骆驼核心优化
  8. [Data Pump]expdp导出笔记
  9. 与你邂逅——软件工程
  10. docker制作容器(待更新)
  11. json-smart 使用示例(推荐fastjson)
  12. Java敏捷开发框架
  13. Qt视频播放器界面Demo
  14. 一个股票软件开发了三年的人如何画制iOS k线图
  15. 【新知实验室 腾讯云TRTC实时音视频体验】
  16. 算法基础-顺序统计量
  17. 电源管理IC的分类及智能变化
  18. JAVA架构演变过程
  19. 使用uni-app把h5网页封装成安卓app
  20. 德琪医药和上药控股达成合作;方达医药位于美国宾州新实验室投运;药明康德发布财报 | 医药健闻...

热门文章

  1. DSW:面向AI研发的集成开发平台
  2. Apache Cassandra 在 Facebook 的应用
  3. 一文纵览EMAS 到底内含多少阿里核心技术能力
  4. 专访阿里云专有云马劲,一个理性的理想主义者
  5. 一份帮助你更好地理解深度学习的资源清单
  6. 极验创始人吴渊:恶意流量威胁新趋势,洞察网络黑产3大核心本质
  7. 超 8 成软件存已知高危开源漏洞,奇安信发布《2021 中国软件供应链安全分析报告》
  8. 搞不定这三大难题,根本学不会Python,别不信!
  9. 滴滴全链路压测解决之道 | 技术头条
  10. 开源神器,无需一行代码就能搞定机器学习,不会数学也能上手