mybatis的注解开发之三种动态sql
脚本sql
@Select("<script>select * from user <if test=\"id !=null \">where id = #{id} </if></script>") public List<User> findUserById(User user);
在方法中构建sql
@Mapper public interface MybatisDao { //使用UserDaoProvider类的findUserById方法来生成sql @SelectProvider(type = UserDaoProvider.class, method = "findUserById") public List<User> findUserById(User user); class UserDaoProvider { public String findUserById(User user) { String sql = "SELECT * FROM user"; if(user.getId()!=null){ sql += " where id = #{id}"; } return sql; } }
这比<script>更加清晰,适用于查询语句不是很长、条件不多的场景,SQL很直观。但是在写很长的SQL时,这样拼接SQL同样会很痛苦
结构化SQL
public String findUserById(User user) { return new SQL(){{ SELECT("id,name"); SELECT("other"); FROM("user"); if(user.getId()!=null){ WHERE("id = #{id}"); } if(user.getName()!=null){ WHERE("name = #{name}"); } //从这个toString可以看出,其内部使用高效的StringBuilder实现SQL拼接 }}.toString(); }
List传值错误
@SelectProvider(type = UserDaoProvider.class, method = "find") public List<Map> find(List list); class UserDaoProvider { public String find(List list) {
这是一个最简单的list传参,但是在运行时会报传参错误。这是mybatis内部机制造成的,其参数需要是key/value结构,当遇到这里不是key/value结构的list时,mybatis会自己把它转换成key/value结构,key就是他的名字"list",value就是他的值List,要正确传参需要使用key/value结构的map,如下
@SelectProvider(type = UserDaoProvider.class, method = "find") public List<Map> find(List list); class UserDaoProvider { public String find(Map map) { List list = (List) map.get("list");
转载于:https://www.cnblogs.com/guoyafenghome/p/9123442.html
mybatis的注解开发之三种动态sql相关推荐
- SSM—mybatis框架-注解开发-动态sql(where,set,trim,choose,when,foreach)-模糊查询写法-特殊符号处理-缓存
文章目录 2.0.注解 2.1.动态sql 2.1.1.where 2.1.2.set 2.1.3.trim 2.1.3.1.trim的where 2.1.3.2.trim的set 2.1.4.1.c ...
- mybatis使用注解开发
mybatis使用注解开发 面向接口编程 在之前我们是通过面向对象编程,但是在真正开发的时候我们会选择面向接口编程. 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的 ...
- Mybatis学习日记(四)——动态SQL第一部分
Mybatis的强大特性之一是它的动态SQL,在进行项目开发的时候,我们对数据库的操作不可能全部是定式的,当对数据库的操作根据不同情况发生变化时,就可以用到Mybatis的动态SQL.而Mybatis ...
- Mybatis整体学习笔记-CRUD-配置解析-结果集映射-日志-注解开发-复杂环境-动态SQL-缓存
MyBatis 要多对官方文档进行学习 https://mybatis.org/mybatis-3/zh/index.html 简介 MyBatis 持久层框架 Dao Access Objects ...
- mybatis入门(四)之动态SQL
转载自 mybatis 动态SQL 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦. ...
- Spring+SpringMVC+MyBatis深入学习及搭建(五)——动态sql
mybatis核心:对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. mybatis提供各种标签方法实现动态拼接sql. 1. if&where 1.2 需求 用户信 ...
- mybatis之注解开发与逆向工程
注解开发 MyBatis 最初是一个 XML 驱动的框架.配置信息是基于 XML 的,而且映射语句也是定义在 XML 中的.随着技术的更新发展,对于开发效率要求也原来越高,特别是一些小型项目;越来越多 ...
- MyBatis之注解开发
mybatis常用注解: @Insert:实现新增 @Update:实现更新 @Delete:实现删除 @Select:实现查询 @Result:实现结果集封装 @Results:可以与@Result ...
- 【Mybatis 之应用篇】 4_动态SQL、缓存
文章目录 Mybatis 十二.动态SQL 1.IF 2.choose(when,otherwise) 3.where,set 4.SQL片段 5.Foreach 十三.缓存 (了解) 1.简介 2. ...
最新文章
- w ndows7启动后没有图标,Windows7下双击桌面图标无法打开怎么解决?
- pandas使用pd.concat纵向合并多个dataframe实战:纵向合并(ignore_index参数)、为纵向合并的多个dataframe设置标识符指定数据来源(通过字典方式设置数据来源键)
- 城市大脑全球标准研究3:如何理解城市大脑中的“大脑”?
- linux手机刷机包制作工具_刷GitHub提交记录工具制作
- java Runtime.getRuntime().exec 获取反弹shell
- 磐石云服务器_磐石云爆款高防云服务器3年仅699元 限量100台 BGP线路 1核2G
- linux学习笔记-9.查找
- 论调用约定__stdcall,__cdecl,__fastcall,thiscall,naked call
- kafka集群为什么需要三个节点_大白话带你认识 Kafka
- 以links方式安装eclipse插件
- 再学C++ Primer(9)-类
- mysql数据库逻辑备份与恢复_Mysqldump逻辑备份与恢复
- 从 1 加到 55 的值
- IDM最强大的多线程下载器 Internet Download Manager v2021 中文版+超多皮肤
- python中装饰函数的使用:
- PLSQL官方下载、安装和使用完全指南
- 计算机类普刊有哪些,计算机类普刊期刊发表推荐
- EXCEL如何快速拆分合并单元格数据
- 论文投稿指南——准研究生们建议早点发小论文
- sublime package control 速度很慢_可怜的ACRH17,它的USB3.0速度被华硕压制了!
热门文章
- (转)layoutSubviews总结
- hdu 1116 Play on Words
- 让弹出窗口变得“体贴”一些
- StringTokenizer(字符串标记)
- linux 使cpu使用率升高_Linux系统中CPU占用率较高问题排查思路与解决方法
- 现代浏览器博物馆_云旅游!Tableau 为你揭秘纽约现代艺术博物馆的珍贵馆藏
- 全球科技大会鸿蒙,华为开发者大会:全球瞩目的“鸿蒙”面子和里子大格局
- java.lang.arr_jxl操作java.lang.ArrayIndexOutOfBoundsException: 441 错误的解决
- bigdicmal除法精度设置_Java BigDecimal浮点数运算--如何保证运算精度不溢出
- 如何在 Kubernetes 中对无状态应用进行分批发布