Spring Data JPA(1)--Repository和CrudRepository接口

最近在学习Spring Data JPA的相关知识,感觉还是很不错的,提供了很多方法,包括CRUD和分页排序,基本能够满足现实的功能需求.

它一共提供了四个接口:

Repository: 仅仅是一个标识,表明任何继承它的均为仓库接口类,方便Spring自动扫描识别
CrudRepository: 继承Repository,实现了一组CRUD相关的方法
PagingAndSortingRepository: 继承CrudRepository,实现了一组分页排序相关的方法
JpaRepository: 继承PagingAndSortingRepository,实现一组JPA规范相关的方法
JpaSpecificationExecutor: 比较特殊,不属于Repository体系,实现一组JPA Criteria查询相关的方法

我写的实例:

/*
 * @RepositoryDefinition(domainClass = User.class,idClass = Integer.class)//使用该注解可以替代extends Repository
 */
public interface UserRepository extends CrudRepository<User, Integer>{
	/*
	 * Repository接口,他是一个空接口,仅仅是一个标识
	 */
	//hql操作的是对象,而sql操作的是表,所以这里的User指的是类
	//可以直接使用Repository提供的一些方法,但是必须方法的命名要遵守一定的规则,例如findByXx,findByXxLike,findByXxStartingWith...
	public User findByUname(String uname);
	//使用@Query注解来解决定义规则的麻烦和实现复杂查询,工作中用的比较多
	@Query("select o from User o")
	public List<User> showUsers();
	@Query("select o from User o where o.uno = ?1 and o.uname = ?2")
	public User findUser(int uno,String uname);
	//配合@Modifying注解和事务,可以完成更新和删除的操作,jpql不支持增加的操作
	@Modifying
	@Query("delete from User where uno=:uno")
	public void delUser(@Param("uno")int uno);
	@Modifying
	@Query("update User o set o.uname = :uname where uno = :uno")
	public void updUser(@Param("uno")int uno,@Param("uname")String uname);	
	/*
	 * CrudRepository接口继承Repository,提供了一组CRUD相关的方法,直接在测试类中测试findOne方法
	 */
}

 

CrudRepository接口 源代码所提供的方法:

 

<S extends T> S save(S entity);
<S extends T> Iterable<S> save(Iterable<S> entities);
T findOne(ID id);
boolean exists(ID id);
Iterable<T> findAll();
Iterable<T> findAll(Iterable<ID> ids);
long count();
void delete(ID id);
void delete(T entity);
void delete(Iterable<? extends T> entities);
void deleteAll();

以findOne()方法为例,在单元测试中进行测试

public class UserRepositoryTest {
	private ApplicationContext ctx = null;
	private UserRepository userRepository = null;
	@Before
	public void setUp(){
		ctx = new ClassPathXmlApplicationContext("beans.xml");
		userRepository = ctx.getBean(UserRepository.class);
		System.out.println("setup");
	}
	@After
	public void tearDown(){
		ctx = null;
		System.out.println("teardown");
	}
	@Test
	public void testQuery3(){
		System.out.println("start");
		User user = userRepository.findOne(1);
		System.out.println(user.toString());
		System.out.println("started");
	}
}

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值