技术标签: 动态SQL SpringBoot Groovy Mybatis
SpringBoot的超简洁配置,为我们省去了宝贵的配置时间。
Mybatis3在这方面也提供了很好的支持,通过注解让我们摆脱了繁琐的mapper xml,写DAO层的时候再也不用在java接口和xml配置来回切换了,无疑提升了代码的可读性。
但很不幸,Mybatis3在复杂的动态SQL方面的支持,需要再写**Provider
来构建SQL语句,这样的设计感觉有点顾此失彼,本来好端端的通过注解省去了xml配置,但是一遇到动态SQL,又得构建类来处理,让人又爱又恨。看看下面的代码:
package com.syj.test.mybatis;
import com.syj.test.thread.People;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.SelectProvider;
import java.util.List;
/**
* Created by syj on 2019/2/3.
*/
@Mapper
public interface PeopleDAO {
//使用UserDaoProvider类的findUserByName方法来生成sql
@SelectProvider(type = UserDaoProvider.class, method = "findUserByName")
List<People> findPeople(People people);
class UserDaoProvider {
public String findUserByName(People peo) {
String sql = "SELECT * FROM user";
if(peo.getName()!=null){
sql += " where name = #{name}";
}
return sql;
}
}
}
那有没有更好的方式,不需要引入新的代码复杂度来实现简洁的DAO层代码呢?
答案是肯定的,Groovy堪当重任,先来了解下Groovy
:
Apache的Groovy是Java平台上设计的面向对象编程语言。这门动态语言拥有类似Python、Ruby和Smalltalk中的一些特性,可以作为Java平台的脚本语言使用,Groovy代码动态地编译成运行于Java虚拟机(JVM)上的Java字节码,并与其他Java代码和库进行互操作。由于其运行在JVM上的特性,Groovy可以使用其他Java语言编写的库。Groovy的语法与Java非常相似,大多数Java代码也匹配Groovy的语法规则,尽管可能语义不同。 Groovy 1.0于2007年1月2日发布,并于2012年7月发布了Groovy 2.0。从版本2开始,Groovy也可以静态编译,提供类型推论和Java相近的性能。Groovy 2.4是Pivotal软件赞助的最后一个主要版本,截止于2015年3月。Groovy已经将其治理结构更改为Apache软件基金会的项目管理委员会(PMC)[1]。
以上引自维基百科 ,当然这样班门弄斧的拷贝不太好,一句话来说明白:Groovy
语言同样能生成字节码文件,通过jvm运行,这门动态语言,可以理解为Java语言的兄弟,只不过这个兄弟让你的代码更简洁。
那接下来我们一步一步的让我们的代码更简洁:
1.构建SpringBoot项目,版本2.0.0-release,自动引入的Mybatis版本为3.4.6
2.application.properties中进行mybatis的配置
# mybatis配置(下划线到驼峰的自动转换)
mybatis.configuration.map-underscore-to-camel-case=true
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.8</version>
</dependency>
Source Root
,然后在该包下新建groovy文件作为Mapper:对应的包下New–>File,填写对应的文件名,如下
填写对应的接口名,及对应的SQL,注意,这里引入<script>
标签后可以使用SQL标签,比如if、where、foreach
等,这种效果就像在类里写以前xml中的SQL语句,把xml和接口方法完整的合二为一,如下:
import com.jd.id.activity.domain.wps.People
import org.apache.ibatis.annotations.Mapper
import org.apache.ibatis.annotations.Param
import org.apache.ibatis.annotations.Select
@Mapper
interface PeopleDAO {
@Select("""<script>
SELECT * FROM user
WHERE 1=1
<if test="query.name != null"> AND name like #{query.name}</if>
<if test="query.addr != null"> AND addr = #{query.addr}</if>
<if test="query.age != null"> AND age = #{query.age}</if>
</script>
""")
List<People> findPeople(@Param("query") People people);
}
对应的目录结构如图:
~ End ~
文章浏览阅读1.1k次。随着计算机的飞速发展,人工智能技术的逐渐成熟,越来越多的人开始关注这个新兴的领域,开始开发出新的产品和服务。在这个信息爆炸的时代,数据量的呈几何级增长,需要人们对海量数据的分析、处理和决策,而机器学习就是人工智能的一个重要组成部分。从传统的统计学习到深度学习(如卷积神经网络CNN),人工智能技术不断的进步,已经引起了很大的社会影响。在这个过程中,生成模型是一个非常重要的工具,它可以用来帮助理解复杂的数据集。通过训练一个生成模型,可以从父亲的基因中产生出一个系列可能的孩子的基因序列,_父母基因怎么组合
文章浏览阅读470次。解决办法:在model library添加dio_tt的model。原因:model library 没设置二极管的model。ADE后仿时出现error。_后仿真 referencing an undefined model or subcircuit
文章浏览阅读1k次,点赞12次,收藏16次。参考视频。_双向gru
文章浏览阅读926次,点赞12次,收藏8次。欢迎大家能看到我的文章,这篇文章收录了东方博宜OJ 1011~1020所有题目的答案,后续还会往后出,敬请关注!如遇不足,欢迎指出!(不要喷我┭┮﹏┭┮)_东方博宜oj答案1062
文章浏览阅读6.9k次,点赞12次,收藏60次。 我尝试通过移位寄存器级联+三八译码器,实现用3跟控制线,驱动16*16LED点阵屏的效果。这是第一篇博客,讲述74HC595芯片的工作原理 一般情况下,使用单片机来控制LED。一个引脚,控制一个LED,是最直观的方法。但也是最笨的方法。引脚对于单片机来说是珍贵的资源,同样性能的芯片引脚越多,价格就越贵。然而有些外设会占用很多引脚,例如LED屏幕。理论上来讲,一个LED需要一个引脚来操作,64个LED组成8×8屏幕,就需要多达64个引脚。但聪明的工程师会节省引脚,把LED按照行列连接,形成矩阵,只需要_16*16点阵引脚
文章浏览阅读1.3k次,点赞2次,收藏8次。docker小白的学习笔记,将自己之前做的Springboot项目做成容器进行试验,新建的PG数据库并没有导入数据,但是此过程可用。一:部署 postgresql镜像。1:搜索postgresql镜像。docker search postgres;2:拉取postgres镜像docker pull postgres3:创建本地目录映射到容..._docker spring boot nacos连接postgresql数据库
文章浏览阅读984次,点赞2次,收藏4次。前言人人都有大厂梦,对于程序员来说,BAT 为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀上一层金,让人瞻仰。同样的,小编的好朋友的个人目标也是阿里,但之前一直在一家小公司,一呆就是好几年,现在通过不断学习和实践,提升了自己很多,也有了信心来阿里挑战。下面,就是朋友分享的这次面试阿里 P6 的一些经历和心得。阿里 P6 岗面试经历这次阿里的面试经历实朋友说实在是在太紧张+刺激+尴尬了,面试前还自信_阿里p6二面
文章浏览阅读8.9k次,点赞12次,收藏121次。在Buck开关中,常使用N-MOS管作为功率开关管。相比于P-MOS,N-MOS具有导通电阻低价格便宜且流过电流较大等优势。在同步结构中对于开关管的使用一般有两种方式:上管为P-MOS,下管为N-MOS;无需外部自举电路上下管均为N-MOS;需要外部自举电路从上图可知,由于N-MOS导通条件是栅极电压比源极电压高。对于上管而言必须增加自举电路才能保证上管完全导通。下面就介绍下自举电路..._自举驱动的buck电路
文章浏览阅读2.2k次。YOLOv4 介绍及其模型优化方法一、YOLOv4 介绍2020 年 4 月,YOLOv4 在悄无声息中重磅发布,在目标检测领域引起广泛的讨论。在 YOLO 系列的原作者 Joseph R..._yolo模型剪枝和蒸馏
文章浏览阅读617次,点赞27次,收藏21次。感觉现在好多人都在说什么安卓快凉了,工作越来越难找了。又是说什么程序员中年危机啥的,为啥我这年近30的老农根本没有这种感觉,反倒觉得那些贩卖焦虑的都是瞎j8扯谈。当然,职业危机意识确实是要有的,但根本没到那种草木皆兵的地步好吗?Android凉了都是弱者的借口和说辞。虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。
文章浏览阅读103次。动态人像抓拍比对系统由前端人脸抓拍采集子系统、网络传输子系统和后端解析管理子系统组成,实现对通行人脸信息的采集、传输、处理、分析与集中管理。系统中,前端人脸采集设备负责人脸图像的采集,接入服务器主要实现图片及信息的接收和转发功能,可为多种型号、多个厂家的抓拍机提供统一接入服务,接收到的抓拍图片存入云存储单元,并由人脸结构化分析服务器对抓拍的视频及图像进行建模以及黑名单实时比对报警,建模得到的人脸信..._bootstrap fileinput request.form.files获取不到
文章浏览阅读115次。抖音SEO矩阵系统是基于抖音平台的搜索引擎优化技术的一种系统,其主要作用是通过一系列的技术手段,提高抖音视频的曝光和排名,使其获得更多的流量和粉丝。在本文中,我们将介绍抖音SEO矩阵系统的开发技术,包括系统设计、代码实现等方面。将源码上传到服务器上,并修改相关配置参数,包括数据库连接参数、域名配置、后台管理员账号等。从公开的代码托管网站上下载抖音SEO账号矩阵系统的源码,例如Github、码云等。将配置好的源码部署到Nginx服务器上,并设置网站的根目录指向源码的入口文件。并在网站上购买一个域名。_云索seo矩阵系统