Spring Jpa + Query-Dsl查询使用位运算

放几个阿里云的优惠链接 代金券 / 高性能服务器2折起 / 高性能服务器5折

本例项目源码地址
本文内容前提建立在自己对Jpa和hibernate有所了解。由于自己比较喜欢使用Gradle作为构建工具,所以项目基本都使用Gradle为例。如果本文有存在错误,希望大家指出说明。

准备工作

使用Spring boot作为基本环境,添加相关依赖。数据库这里采用Mysql

dependencies {
	compile('org.springframework.boot:spring-boot-starter-data-jpa')
	compile('com.querydsl:querydsl-jpa:+')
	compileOnly('com.querydsl:querydsl-apt:+:jpa')
	compile 'mysql:mysql-connector-java'
}

添加位运算函数

  • 为hibernate创建添加位运算函数,具体方法参考 这里 。

  • 使用NumberTemplate创建位运算表达式

public abstract class BitwiseExpressions {

	public static NumberTemplate bitand(Object arg1, Object arg2) {
		return Expressions.numberTemplate(Integer.class, "function('bitand', {0}, {1})", arg1, arg2);
	}

	public static NumberTemplate bitor(Object arg1, Object arg2) {
		return Expressions.numberTemplate(Integer.class, "function('bitor', {0}, {1})", arg1, arg2);
	}

	public static NumberTemplate bitxor(Object arg1, Object arg2) {
		return Expressions.numberTemplate(Integer.class, "function('bitxor', {0}, {1})", arg1, arg2);
	}
}

使用方法

具体参考源码内容

animalRepo.findAll(qAnimal.name.endsWith("3").and(BitwiseExpressions.bitand(qAnimal.id, 2).eq(2)));
animalRepo.findAll(BitwiseExpressions.bitor(qAnimal.id, 2).eq(2));
animalRepo.findAll(qAnimal.age.goe(BitwiseExpressions.bitxor(qAnimal.id, 2)));

你可能感兴趣的:(spring)