006_Spring Data JPA基于方法名称命名规则查询

1. Repository接口 

1.1. Repository接口是Spring Data JPA中为我我们提供的所有接口中的顶层接口。

1.2. Repository提供了两种查询方式的支持 

1.2.1. 基于方法名称命名规则查询。

1.2.2. 基于@Query注解查询。

2. 方法名称命名规则查询

2.1. 规则: findBy(关键字)+属性名称(属性名称的首字母大写)+查询条件(首字母大写)。

2.2. 方法名称命名规则查询列表

关键字

方法命名

sql语句

findByName(String name)

where name=?

Is

findByNameIs(String name)

where name=?

Equals

findByNameEquals(String name)

where name=?

And

findByNameAndSex(String name, String sex)

where name=? and sex=?

Or

findByIdOrName(Integer id, String name)

where id=? or name=?

Between

findByIdBetween(Integer x, Integer y)

where id between ? and ?

LessThan

findByIdLessThan(Integer x)

where id<?

LessThanEqual

findByIdLessThanEqual(Integer x)

where id<=?

GreaterThan

findByIdGreaterThan(Integer x)

where id>?

GreaterThanEqual

findByIdGreaterThanEqual(Integer x)

where id>=?

After

findByIdAfter(Integer x)

where id>?

Before

findByIdBefore(Integer x)

where id<?

IsNull

findByNameIsNull()

where name is null

IsNotNull

findByNameIsNotNull()

where name is not null

NotNull

findByNameNotNull()

where name is not null

Like

findByNameLike(String name)

where name like ?

NotLike

findByNameNotLike(String name)

where name not like ?

StartingWith

findByNameStartingWith(String name)

where name like ?%

EndingWith

findByNameEndingWith(String name)

where name like %?

Containing

findByNameContaining(String name)

where name like %?%

OrderBy

findBySexOrderByIdDesc(String sex)

where sex=? order by id desc

Not

findByNameNot(String name)

where name <> ?

In

findByIdIn(Collection<Integer> c)

where id in (?)

NotIn

findByIdNotIn(Collection<Integer> c)

where id not in (?)

3. 方法名称命名规则查询例子 

3.1. 创建一个名为spring-data-jpa-naming的Java项目, 同时添加相关jar包, 并添加JUnit能力。

3.2. 新建User.java 

package com.bjbs.pojo;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.springframework.format.annotation.DateTimeFormat;

@Entity // 指定该类是实体类
@Table(name = "user") // 指定数据库表名(表名和实体类对应)
public class User implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id // 指定为主键
	@GeneratedValue(strategy = GenerationType.IDENTITY) // 指定主键生成策略
	@Column(name = "id") // 指定表中列名(列名和属性名对应)
	private Integer id;

	@Column(name = "name")
	private String name;

	@Column(name = "sex")
	private String sex;
	
	@Column(name = "birthday")
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	private Date birthday;

	@Column(name = "address")
	private String address;

	public User() {
	}

	public User(String name, String sex, Date birthday, String address) {
		this.name = name;
		this.sex = sex;
		this.birthday = birthday;
		this.address = address;
	}

	public User(Integer id, String name, String sex, Date birthday, String address) {
		this.id = id;
		this.name = name;
		this.sex = sex;
		this.birthday = birthday;
		this.address = address;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", sex=" + sex + ", birthday=" + birthday + ", address=" + address
				+ "]";
	}
}

3.3. 新建UserRepository.java, 实现Repository

package com.bjbs.dao;

import java.util.Collection;
import java.util.List;
import org.springframework.data.repository.Repository;
import com.bjbs.pojo.User;

/**
 * 参数一T: 当前需要映射的实体; 参数二 T: 当前映射的实体中的id的类型
 */
public interface UserRepository extends Repository<User, Integer> {
	/**
	 * 判断相等
	 */
	User findByName(String name);
	User findByNameIs(String name);
	User findByNameEquals(String name);
	
	/**
	 * And语句
	 */
	User findByNameAndSex(String name, String sex);
	
	/**
	 * Or语句
	 */
	List<User> findByIdOrName(Integer id, String name);
	
	/**
	 * Between语句
	 */
	List<User> findByIdBetween(Integer x, Integer y);
	
	/**
	 * < x
	 */
	List<User> findByIdLessThan(Integer x);
	/**
	 * <= x
	 */
	List<User> findByIdLessThanEqual(Integer x);
	/**
	 * > x
	 */
	List<User> findByIdGreaterThan(Integer x);
	/**
	 * >= x
	 */
	List<User> findByIdGreaterThanEqual(Integer x);
	/**
	 * > x
	 */
	List<User> findByIdAfter(Integer x);
	/**
	 * < x
	 */
	List<User> findByIdBefore(Integer x);
	
	/**
	 * IsNull语句
	 */
	List<User> findByNameIsNull();
	/**
	 * IsNotNull语句
	 */
	List<User> findByNameIsNotNull();
	/**
	 * NotNull语句
	 */
	List<User> findByNameNotNull();
	
	/**
	 * Like语句
	 */
	List<User> findByNameLike(String name);
	/**
	 * NotLike语句
	 */
	List<User> findByNameNotLike(String name);
	/**
	 * Like name%
	 */
	List<User> findByNameStartingWith(String name);
	/**
	 * Like %name
	 */
	List<User> findByNameEndingWith(String name);
	/**
	 * Like %name%
	 */
	List<User> findByNameContaining(String name);
	
	/**
	 * OrderBy语句
	 */
	List<User> findBySexOrderByIdDesc(String sex);
	
	/**
	 * Not语句
	 */
	List<User> findByNameNot(String name);
	
	/**
	 * In语句
	 */
	List<User> findByIdIn(Collection<Integer> c);
	/**
	 * NotIn语句
	 */
	List<User> findByIdNotIn(Collection<Integer> c);
}

3.4. 新建UserService.java

package com.bjbs.service;

import java.util.Collection;
import java.util.List;
import com.bjbs.pojo.User;

public interface UserService {
	User findByName(String name);
	User findByNameIs(String name);
	User findByNameEquals(String name);
	
	User findByNameAndSex(String name, String sex);
	
	List<User> findByIdOrName(Integer id, String name);
	
	List<User> findByIdBetween(Integer x, Integer y);
	
	List<User> findByIdLessThan(Integer x);
	List<User> findByIdLessThanEqual(Integer x);
	List<User> findByIdGreaterThan(Integer x);
	List<User> findByIdGreaterThanEqual(Integer x);
	List<User> findByIdAfter(Integer x);
	List<User> findByIdBefore(Integer x);
	
	List<User> findByNameIsNull();
	List<User> findByNameIsNotNull();
	List<User> findByNameNotNull();
	
	List<User> findByNameLike(String name);
	List<User> findByNameNotLike(String name);
	List<User> findByNameStartingWith(String name);
	List<User> findByNameEndingWith(String name);
	List<User> findByNameContaining(String name);
	
	List<User> findBySexOrderByIdDesc(String sex);
	
	List<User> findByNameNot(String name);
	
	List<User> findByIdIn(Collection<Integer> c);
	List<User> findByIdNotIn(Collection<Integer> c);
}

3.5. 新建UserServiceImpl.java

package com.bjbs.service.impl;

import java.util.Collection;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.bjbs.dao.UserRepository;
import com.bjbs.pojo.User;
import com.bjbs.service.UserService;

@Service
@Transactional
public class UserServiceImpl implements UserService {
	@Autowired
	private UserRepository userRepository;
	
	@Override
	public User findByName(String name) {
		return userRepository.findByName(name);
	}

	@Override
	public User findByNameIs(String name) {
		return userRepository.findByNameIs(name);
	}

	@Override
	public User findByNameEquals(String name) {
		return userRepository.findByNameEquals(name);
	}

	@Override
	public User findByNameAndSex(String name, String sex) {
		return userRepository.findByNameAndSex(name, sex);
	}

	@Override
	public List<User> findByIdOrName(Integer id, String name) {
		return userRepository.findByIdOrName(id, name);
	}

	@Override
	public List<User> findByIdBetween(Integer x, Integer y) {
		return userRepository.findByIdBetween(x, y);
	}

	@Override
	public List<User> findByIdLessThan(Integer x) {
		return userRepository.findByIdLessThan(x);
	}

	@Override
	public List<User> findByIdLessThanEqual(Integer x) {
		return userRepository.findByIdLessThanEqual(x);
	}

	@Override
	public List<User> findByIdGreaterThan(Integer x) {
		return userRepository.findByIdGreaterThan(x);
	}

	@Override
	public List<User> findByIdGreaterThanEqual(Integer x) {
		return userRepository.findByIdGreaterThanEqual(x);
	}

	@Override
	public List<User> findByIdAfter(Integer x) {
		return userRepository.findByIdAfter(x);
	}

	@Override
	public List<User> findByIdBefore(Integer x) {
		return userRepository.findByIdBefore(x);
	}

	@Override
	public List<User> findByNameIsNull() {
		return userRepository.findByNameIsNull();
	}

	@Override
	public List<User> findByNameIsNotNull() {
		return userRepository.findByNameIsNotNull();
	}

	@Override
	public List<User> findByNameNotNull() {
		return userRepository.findByNameIsNotNull();
	}

	@Override
	public List<User> findByNameLike(String name) {
		return userRepository.findByNameLike(name);
	}

	@Override
	public List<User> findByNameNotLike(String name) {
		return userRepository.findByNameNotLike(name);
	}

	@Override
	public List<User> findByNameStartingWith(String name) {
		return userRepository.findByNameStartingWith(name);
	}

	@Override
	public List<User> findByNameEndingWith(String name) {
		return userRepository.findByNameEndingWith(name);
	}

	@Override
	public List<User> findByNameContaining(String name) {
		return userRepository.findByNameContaining(name);
	}

	@Override
	public List<User> findBySexOrderByIdDesc(String sex) {
		return userRepository.findBySexOrderByIdDesc(sex);
	}

	@Override
	public List<User> findByNameNot(String name) {
		return userRepository.findByNameNot(name);
	}

	@Override
	public List<User> findByIdIn(Collection<Integer> c) {
		return userRepository.findByIdIn(c);
	}

	@Override
	public List<User> findByIdNotIn(Collection<Integer> c) {
		return userRepository.findByIdNotIn(c);
	}
	
}

3.6. 新建TestUserRepository.java

package com.bjbs.test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.bjbs.pojo.User;
import com.bjbs.service.UserService;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestUserRepository {
	@Autowired
	private UserService userService;
	
	/**
	 * 查询姓名等于'曹操'的用户
	 */
	@Test
	public void findByName() {
		User user = userService.findByName("曹操");
		System.out.println(user);
	}

	/**
	 * 查询姓名等于'曹操'的用户
	 */
	@Test
	public void findByNameIs() {
		User user = userService.findByNameIs("曹操");
		System.out.println(user);
	}

	/**
	 * 查询姓名等于'曹操'的用户
	 */
	@Test
	public void findByNameEquals() {
		User user = userService.findByNameEquals("曹操");
		System.out.println(user);
	}

	/**
	 * 查询姓名等于'曹操'并且性别等于'男'的用户
	 */
	@Test
	public void findByNameAndSex() {
		User user = userService.findByNameAndSex("曹操", "男");
		System.out.println(user);
	}

	/**
	 * 查询id等于37或的姓名等于'曹操'所有用户
	 */
	@Test
	public void findByIdOrName() {
		List<User> list = userService.findByIdOrName(37, "曹操");
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询id在30-35之间的所有用户(包括id是30和35的用户)
	 */
	@Test
	public void findByIdBetween() {
		List<User> list = userService.findByIdBetween(30, 35);
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询id<33的所有用户
	 */
	@Test
	public void findByIdLessThan() {
		List<User> list = userService.findByIdLessThan(33);
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询id<=33的所有用户
	 */
	@Test
	public void findByIdLessThanEqual() {
		List<User> list = userService.findByIdLessThanEqual(33);
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询id>55的所有用户
	 */
	@Test
	public void findByIdGreaterThan() {
		List<User> list = userService.findByIdGreaterThan(55);
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询id>=55的所有用户
	 */
	@Test
	public void findByIdGreaterThanEqual() {
		List<User> list = userService.findByIdGreaterThanEqual(55);
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询id>55的所有用户
	 */
	@Test
	public void findByIdAfter() {
		List<User> list = userService.findByIdAfter(55);
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询id<33的所有用户
	 */
	@Test
	public void findByIdBefore() {
		List<User> list = userService.findByIdBefore(33);
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询姓名为Null的所有用户
	 */
	@Test
	public void findByNameIsNull() {
		List<User> list = userService.findByNameIsNull();
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询姓名不是空的所有用户
	 */
	@Test
	public void findByNameIsNotNull() {
		List<User> list = userService.findByNameIsNotNull();
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询姓名不是空的所有用户
	 */
	@Test
	public void findByNameNotNull() {
		List<User> list = userService.findByNameNotNull();
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询姓名包含'河公'的所有用户
	 */
	@Test
	public void findByNameLike() {
		List<User> list = userService.findByNameLike("%河公%");
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询姓名不是以'操'结尾的所有用户
	 */
	@Test
	public void findByNameNotLike() {
		List<User> list = userService.findByNameNotLike("%操");
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询姓名以'李'开头的所有用户
	 */
	@Test
	public void findByNameStartingWith() {
		List<User> list = userService.findByNameStartingWith("李");
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询姓名以'操'结尾的所有用户
	 */
	@Test
	public void findByNameEndingWith() {
		List<User> list = userService.findByNameEndingWith("操");
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询姓名包含'河公'的所有用户
	 */
	@Test
	public void findByNameContaining() {
		List<User> list = userService.findByNameContaining("河公");
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询性别是'女'的所有用户并按id倒序排列
	 */
	@Test
	public void findBySexOrderByIdDesc() {
		List<User> list = userService.findBySexOrderByIdDesc("女");
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询姓名不是'曹操'的所有用户
	 */
	@Test
	public void findByNameNot() {
		List<User> list = userService.findByNameNot("曹操");
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询id是35 42 43 44的这几个用户
	 */
	@Test
	public void findByIdIn() {
		Collection<Integer> c = new ArrayList<Integer>();
		c.add(35);
		c.add(42);
		c.add(43);
		c.add(44);
		List<User> list = userService.findByIdIn(c);
		for (User user : list) {
			System.out.println(user);
		}
	}
	
	/**
	 * 查询id不是35 42 43 44的所有用户
	 */
	@Test
	public void findByIdNotIn() {
		Collection<Integer> c = new ArrayList<Integer>();
		c.add(35);
		c.add(42);
		c.add(43);
		c.add(44);
		List<User> list = userService.findByIdNotIn(c);
		for (User user : list) {
			System.out.println(user);
		}
	}
}

3.7. 在src下新建application.properties

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.25.138:3306/StudyMybatis?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=lyw123456

3.8. 在src下新建applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
	http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
	
	<!-- 配置读取properties文件的工具类 -->
	<context:property-placeholder location="classpath:application.properties" />

	<!-- 配置c3p0数据库连接池 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="jdbcUrl" value="${spring.datasource.url}" />
		<property name="driverClass" value="${spring.datasource.driverClassName}" />
		<property name="user" value="${spring.datasource.username}" />
		<property name="password" value="${spring.datasource.password}" />
	</bean>

	<!-- Spring整合JPA 配置EntityManagerFactory -->
	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="jpaVendorAdapter">
			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
				<!-- hibernate相关的属性的注入 -->
				<!-- 配置数据库类型 -->
				<property name="database" value="MYSQL" />
				<!-- 正向工程 自动创建表 -->
				<!-- <property name="generateDdl" value="true" /> -->
				<!-- 显示执行的SQL -->
				<property name="showSql" value="true" />
			</bean>
		</property>
		<!-- 扫描实体的包 -->
		<property name="packagesToScan">
			<list>
				<value>com.bjbs.pojo</value>
			</list>
		</property>
	</bean>

	<!-- 配置Hibernate的事务管理器 -->
	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="entityManagerFactory" />
	</bean>

	<!-- 配置开启注解事务处理 -->
	<tx:annotation-driven transaction-manager="transactionManager" />

	<!-- 配置springIOC的注解扫描 -->
	<context:component-scan base-package="com.bjbs.service" />

	<!-- Spring Data JPA 的配置 -->
	<!-- base-package: 扫描dao接口所在的包 -->
	<jpa:repositories base-package="com.bjbs.dao" />
</beans>

3.9. 数据库user表

3.10. 查询姓名等于'曹操'的用户 

3.11. 查询姓名等于'曹操'的用户 

3.12. 查询姓名等于'曹操'的用户 

3.13. 查询姓名等于'曹操'并且性别等于'男'的用户 

3.14. 查询id等于37或的姓名等于'曹操'多个用户 

3.15. 查询id在30-35之间的所有用户(包括id是30和35的用户) 

3.16. 查询id<33的所有用户 

3.17. 查询id<=33的所有用户 

3.18. 查询id>55的所有用户 

3.19. 查询id>=55的所有用户 

3.20. 查询id>55的所有用户 

3.21. 查询id<33的所有用户 

3.22. 查询姓名为Null的所有用户

 3.23. 查询姓名不是空的所有用户 

3.24. 查询姓名不是空的所有用户

3.25. 查询姓名包含'河公'的所有用户

3.26. 查询姓名不是以'操'结尾的所有用户 

 3.27. 查询姓名以'李'开头的所有用户

3.28. 查询姓名以'操'结尾的所有用户 

3.29. 查询姓名包含'河公'的所有用户

3.30. 查询性别是'女'的所有用户并按id倒序排列

3.31. 查询姓名不是'曹操'的所有用户 

 3.32. 查询id是35 42 43 44的这几个用户

 3.33. 查询id不是35 42 43 44的所有用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值