jpa 动态sql拼接_jpa 如何优雅的实现动态sql
动态语言注解
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相关推荐
- SQL Server -- 如何书写优雅、漂亮的SQL脚本?
From: http://www.cnblogs.com/kerrycode/archive/2010/08/16/1800334.html 本篇来聊聊如何书写漂亮.整洁.优雅的SQL脚本,下面这些是 ...
- 防止sql拼接的Java方法,java程序防止sql注入的方法
12306刚爆出sql注入的漏洞(http://hyfw.12306.cn/hyinfo/action/ClcscxAction_index?cllx=G这个页面,自重输入1'),之前一些关于sql注 ...
- java 动态拼接sql_动态SQL拼接工具类
动态SQL拼接处理工具类,为了传动态参数sql语句拼接的灵活使用.具体源代码见: 下面简单介绍下使用Demo: public static void main(String[] args) throw ...
- jpa 动态sql拼接_MyBatis还是JPA?终于有答案了!
原创:猿逻辑,欢迎分享,转载请保留出处. 对于一个和数据库打交道的程序员来说,很快会面临着一个艰难的选择.到底是选择MyBatis还是JPA呢? 很多人说,技术选择,都要根据需求来,这个没错.但是,除 ...
- QueryBuilder : 打造优雅的Linq To SQL动态查询
首先我们来看看日常比较典型的一种查询Form 这个场景很简单:就是根据客户名.订单日期.负责人来作筛选条件,然后找出符合要求的订单. 在那遥远的时代,可能避免不了要写这样的简单接口: public i ...
- MySQL——动态SQL拼接
一.动态sql拼接 目标 能够使用mybatis的标签实现动态SQL拼接 分析 我们在前边的学习过程中,使用的SQL语句都非常简单.而在实际业务开发中,我们的SQL语句通常是动态拼接而成的,比如: ...
- COALESCE在SQL拼接中的大用途
SQL拼接可以使得代码比较灵活,不会那么死板,对于维护也比较方便. 下面是简单的SQL拼接,同时也包含了隐式游标的概念吧,可以遍历表中的每一个字段 -------------------------- ...
- 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL:
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 阿进的写字台 来源 | cnblogs.com ...
- 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 整理 ...
最新文章
- React从入门到精通系列之(1)安装React
- python实操培训_python实训day1
- 机器学习-cs229-线性回归-梯度下降法
- opencv视频读写和视频等间隔采样
- Python的发展方向
- 报错:error LNK2001:unresolved external symbol _WinMain@16
- 如何零成本录制一首单人ACAPPELLA
- shellcode免杀工具Go_Bypass的使用
- python三维图像切片成二维_python之画三维图像
- 计算机主板电感有正负极么,功率电感有没有方向?正负极区分
- hbuilder 断点_Hbuilder配置php断点调试
- 【Python Web】Flask框架(一)快速开发网站
- Android相机开发和遇到的坑
- 车联网---V2X介绍、V2X现有的两大通信标准DSRC和LTE V2X
- ubuntu16.04的HDMI没有输出不能外接显示器
- 拦截器重定义及user系统的安全问题
- 女人不得不学的七个人生规律
- AJAX——发送GET请求
- 软件开发团队在苹果iPhone上日进千金
- 用什么方法操作才能一键去除原声同时添加一个新的音频?
热门文章
- jvm原理总结转载来的
- python开发题库-进阶(持续更新2020-3-18)
- Python 单引号、双引号和三引号混用时一定要注意!!!
- NVM, PROM, OTP, eFuse傻傻分不清楚
- springboot系列学习(十九):springboot项目整合Druid,Druid到底是什么,他是在项目中如何使用的
- 用 badblocks 检测硬盘坏道
- 神器面世:快速生成你的专属卡通头像!
- 造化之门中8条鸿蒙,神预测造化之门和鸿蒙造化决有关系 ?
- 索尼z5p android 8,索尼良心!9款手机率先推送安卓8.0正式版
- nginx重启,关闭