一)如果SpringData提供的JPA接口没有我们需要的查询方式,也是可以自定义Repository接口的
1.1)自定义的规则
1.创建自定义接口
2.使用目标接口(dao层接口)实现自定义接口,并对方法进行实现
3.使用目标接口(dao层接口)实现的时候需要注入EntityManager对象完成对数据库的操作
4.目标接口(dao层接口)实现自定义接口的时候实现类的名称必须是目标接口的名称+Impl,名称会由SpringData解析
5.目标接口(dao层接口)必须继承自定义接口
1.2)实例眼
1):创建自定义接口
/**
* @project_name:hibernate02
* @date:2019/8/21:09:35
* @author:shinelon
* @Describe:自定义MyUsersRepository接口
*/
public interface MyUsersRepository {
//提供方法
Users findUsersById(Integer userid);
}
2)目标接口实现自定义接口
注意名字Spring会对接口的名字进行解析规范是目标接口的名字加上Impl
案例中UserDaoFive接口为需要一个自定义方法的目标接口,那么名字的规范为UserDaoFiveImpl,分为两部分
/**
* @project_name:hibernate02
* @date:2019/8/21:09:37
* @author:shinelon
* @Describe:由目标接口(UserDaoFive)实现自定义接口,并且注入EntityManager对象,注意名字规范
*/
public class UserDaoFiveImpl implements MyUsersRepository{
@PersistenceContext(name = "entityManagerFactory")
private EntityManager entityManager;
@Override
public Users findUsersById(Integer userid) {
System.out.println("MyUsersRepository......");
return entityManager.find(Users.class,userid);
}
}
3)目标接口继承自定义接口
/**
* @project_name:hibernate02
* @date:2019/8/20:17:31
* @author:shinelon
* @Describe:在使用JpaSpecificationExecutor接口的实现需要和Repository体系接接口一起使用不然无法完成
* 对象的注入
*/
public interface UserDaoFive extends JpaRepository<Users,Integer>, JpaSpecificationExecutor<Users>,MyUsersRepository {
}
4)接口测试
@Autowired
private UserDaoFive userDaoFive;
/**
* 测试自定义接口
*/
@Test
public void test8(){
Users users = this.userDaoFive.findUsersById(3);
System.out.println(users);
}