SpringBoot集成Groovy、Mybatis注解 实现动态SQL,帮你摆脱繁琐的XML配置

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 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

  • 3.引入pom文件中引入groovy包,支持对groovy文件的编译:

		org.codehaus.groovy
		groovy-all
		2.4.8

  • 4.在DAO层创建groovy文件夹,并且Mark Direction as Source Root,然后在该包下新建groovy文件作为Mapper:对应的包下New–>File,填写对应的文件名,如下

SpringBoot集成Groovy、Mybatis注解 实现动态SQL,帮你摆脱繁琐的XML配置_第1张图片
填写对应的接口名,及对应的SQL,注意,这里引入 """) List findPeople(@Param("query") People people); }

对应的目录结构如图:
SpringBoot集成Groovy、Mybatis注解 实现动态SQL,帮你摆脱繁琐的XML配置_第2张图片

  • 5.最后,就可以在你的service层引入该DAO,这里就不再详细描述了,最后自由的进行数据库操作。

~ End ~

你可能感兴趣的:(SpringBoot)