动态语言注解

import www.ijava.com.entity.User;

/*

* (1)动态语言注解

对于创建动态的查的语言。MyBatis提供了多个注解如:

@e68a843231313335323631343130323136353331333365656563InsertProvider,

@UpdateProvider,

@DeleteProvider和

@SelectProvider,

这些都是建立动态语言和让MyBatis执行这些语言。

(2)@Provider使用思路

对于MyBatis提供的几个@Provider,

里面最主要的参数是type,

也就是sql类的Calss对象,

另外就是对应的方法名,

我们看SelectProvider的源代码:

@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

public @interface SelectProvider {

Class> type();

String method();

}

所以要实现动态的SQL查询,那么大体的思路就是,编写一个SqlProvider,比如:DemoSqlProvider,在此方法中返回一条SQL语句即可。然后在Mapper类中使用@SelectProvider注解,指定provider类和对应的SQL方法。

问题:有一个表中有id,name,email等字段,有这么一个查询要求:我们希望的是如果name不为null的话,那么就当做条件,否则就不要当做条件;如果email不为null,那么就当做条件,否则不当做条件。

接下里看看怎么使用@SelectProvider破。

Provider:供应者

*/

public class UserSqlProvider {

/**

* 查询语句.

*/

public String select1(User user ){

StringBuffer sql = new StringBuffer("select * from tb_user1 where 1=1 ");

if(user.getAge() != 0){

sql.append(" and age=#{age}");

}

if(user.getUsername() != null){

if("张三----".contains(user.getUsername())){

sql.append(" and username=#{username}");

}

}

return sql.toString();

}

}

UserMapper

@SelectProvider(type=UserSqlProvider.class,method="select1")

List getUserByIdAndUsername(User user);

jpa 动态sql拼接_jpa 如何优雅的实现动态sql相关推荐

  1. SQL Server -- 如何书写优雅、漂亮的SQL脚本?

    From: http://www.cnblogs.com/kerrycode/archive/2010/08/16/1800334.html 本篇来聊聊如何书写漂亮.整洁.优雅的SQL脚本,下面这些是 ...

  2. 防止sql拼接的Java方法,java程序防止sql注入的方法

    12306刚爆出sql注入的漏洞(http://hyfw.12306.cn/hyinfo/action/ClcscxAction_index?cllx=G这个页面,自重输入1'),之前一些关于sql注 ...

  3. java 动态拼接sql_动态SQL拼接工具类

    动态SQL拼接处理工具类,为了传动态参数sql语句拼接的灵活使用.具体源代码见: 下面简单介绍下使用Demo: public static void main(String[] args) throw ...

  4. jpa 动态sql拼接_MyBatis还是JPA?终于有答案了!

    原创:猿逻辑,欢迎分享,转载请保留出处. 对于一个和数据库打交道的程序员来说,很快会面临着一个艰难的选择.到底是选择MyBatis还是JPA呢? 很多人说,技术选择,都要根据需求来,这个没错.但是,除 ...

  5. QueryBuilder : 打造优雅的Linq To SQL动态查询

    首先我们来看看日常比较典型的一种查询Form 这个场景很简单:就是根据客户名.订单日期.负责人来作筛选条件,然后找出符合要求的订单. 在那遥远的时代,可能避免不了要写这样的简单接口: public i ...

  6. MySQL——动态SQL拼接

    一.动态sql拼接 目标 能够使用mybatis的标签实现动态SQL拼接 分析 ​ 我们在前边的学习过程中,使用的SQL语句都非常简单.而在实际业务开发中,我们的SQL语句通常是动态拼接而成的,比如: ...

  7. COALESCE在SQL拼接中的大用途

    SQL拼接可以使得代码比较灵活,不会那么死板,对于维护也比较方便. 下面是简单的SQL拼接,同时也包含了隐式游标的概念吧,可以遍历表中的每一个字段 -------------------------- ...

  8. 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL:

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 阿进的写字台 来源 | cnblogs.com ...

  9. 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 整理 ...

最新文章

  1. React从入门到精通系列之(1)安装React
  2. python实操培训_python实训day1
  3. 机器学习-cs229-线性回归-梯度下降法
  4. opencv视频读写和视频等间隔采样
  5. Python的发展方向
  6. 报错:error LNK2001:unresolved external symbol _WinMain@16
  7. 如何零成本录制一首单人ACAPPELLA
  8. shellcode免杀工具Go_Bypass的使用
  9. python三维图像切片成二维_python之画三维图像
  10. 计算机主板电感有正负极么,功率电感有没有方向?正负极区分
  11. hbuilder 断点_Hbuilder配置php断点调试
  12. 【Python Web】Flask框架(一)快速开发网站
  13. Android相机开发和遇到的坑
  14. 车联网---V2X介绍、V2X现有的两大通信标准DSRC和LTE V2X
  15. ubuntu16.04的HDMI没有输出不能外接显示器
  16. 拦截器重定义及user系统的安全问题
  17. 女人不得不学的七个人生规律
  18. AJAX——发送GET请求
  19. 软件开发团队在苹果iPhone上日进千金
  20. 用什么方法操作才能一键去除原声同时添加一个新的音频?

热门文章

  1. jvm原理总结转载来的
  2. python开发题库-进阶(持续更新2020-3-18)
  3. Python 单引号、双引号和三引号混用时一定要注意!!!
  4. NVM, PROM, OTP, eFuse傻傻分不清楚
  5. springboot系列学习(十九):springboot项目整合Druid,Druid到底是什么,他是在项目中如何使用的
  6. 用 badblocks 检测硬盘坏道
  7. 神器面世:快速生成你的专属卡通头像!
  8. 造化之门中8条鸿蒙,神预测造化之门和鸿蒙造化决有关系 ?
  9. 索尼z5p android 8,索尼良心!9款手机率先推送安卓8.0正式版
  10. nginx重启,关闭