一、JPA SQL判null
在JPA中使用SQL语句的时候,我们经常需要判断某个属性是否为空,常见的方法有:
1.1. 使用IS NULL/IS NOT NULL
TypedQuery<User> query = entityManager.createQuery(
"SELECT u FROM User u WHERE u.name IS NULL", User.class);
这种方式适合单个属性是否为null的情况。
1.2. 使用COALESCE
TypedQuery<User> query = entityManager.createQuery(
"SELECT u FROM User u WHERE COALESCE(u.name, '') = ''", User.class);
这种方式适合多个属性都可能为null,需要用一个默认值来代替的情况。COALESCE的第一个参数表示要判断的属性,后面的参数表示默认值。
1.3. 使用CASE WHEN
TypedQuery<User> query = entityManager.createQuery(
"SELECT u FROM User u WHERE (CASE WHEN u.name IS NULL THEN '' ELSE u.name END) = ''", User.class);
这种方式用法和COALESCE类似,只不过它可以根据不同的情况返回不同的值。
二、JPA SQL怎么赋值
在使用JPA SQL的过程中,我们经常需要给参数赋值,常见的方法有:
2.1. setParameter
TypedQuery<User> query = entityManager.createQuery(
"SELECT u FROM User u WHERE u.name = :name", User.class);
query.setParameter("name", "张三");
这种方式是最常用的,可以根据参数名直接设置参数的值。
2.2. setParameterList
List<String> names = Arrays.asList("张三", "李四", "王五");
TypedQuery<User> query = entityManager.createQuery(
"SELECT u FROM User u WHERE u.name IN :names", User.class);
query.setParameter("names", names);
这种方式用于设置List类型的参数。
2.3. setParameters
TypedQuery<User> query = entityManager.createQuery(
"SELECT u FROM User u WHERE u.name = ?1 AND u.age = ?2", User.class);
query.setParameter(1, "张三").setParameter(2, 20);
这种方式和JDBC的预编译语句类似,用?+数字来表示参数的位置。
2.4. setFlushMode
entityManager.setFlushMode(FlushModeType.COMMIT);
这种方式用于设置刷新模式,可以在Session关闭的时候自动刷新数据。
三、JPA SQL的选取
在使用JPA SQL的过程中,我们经常需要进行选取,常见的方法有:
3.1. SELECT * FROM
TypedQuery<User> query = entityManager.createQuery(
"SELECT u FROM User u", User.class);
这种方式是最常用的,可以选取某个实体类的所有属性。
3.2. SELECT COUNT(*) FROM
TypedQuery<Long> query = entityManager.createQuery(
"SELECT COUNT(*) FROM User u", Long.class);
这种方式用于统计数据条数。
3.3. SELECT CONCAT
TypedQuery<String> query = entityManager.createQuery(
"SELECT CONCAT(u.name, '(', u.age, ')') FROM User u", String.class);
这种方式用于拼接字符串。
3.4. SELECT DISTINCT
TypedQuery<String> query = entityManager.createQuery(
"SELECT DISTINCT u.name FROM User u", String.class);
这种方式用于去重。
3.5. SELECT SUM/COUNT/MIN/MAX/AVG
TypedQuery<Long> query = entityManager.createQuery(
"SELECT COUNT(u.id) FROM User u", Long.class);
这种方式用于对某个属性进行统计,比如求和、平均值等。
总结
JPA SQL提供了丰富的功能,能够满足各种各样的需求。在使用JPA SQL的时候,需要注意一些细节,比如参数类型、参数个数、参数顺序等等。通过对JPA SQL的学习,我们可以更好地掌握JPA的使用,提高系统的开发效率和质量。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/150376.html