SpringDataJPA之DefineRespository(自定义Respository接口的使用

自定义Respository接口的实现

  1. 实现自定义Respository接口主要是通过自己编写一个实体类的接口定义CRUD的抽象方法,然后通过接口实现类实现该接口,最终调用JPA的Respository接口的方法实现自定义接口,也就是最终接口的实现还是要依靠原生的Respository接口提供的方法。
  2. 主要步骤是:
    创建实体类;
package com.OVA.pojo;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@SuppressWarnings("serial")
@Entity
@Table(name = "users")
public class Users implements Serializable {
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)//设置主键自增
	@Column(name="userid")
	private Integer userid;
	@Column(name="username")
	private String username;
	@Column(name="userage")
	private Integer userage;

	public Integer getUserid() {
		return userid;
	}

	public void setUserid(Integer userid) {
		this.userid = userid;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public Integer getUserage() {
		return userage;
	}

	public void setUserage(Integer userage) {
		this.userage = userage;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((userage == null) ? 0 : userage.hashCode());
		result = prime * result + ((userid == null) ? 0 : userid.hashCode());
		result = prime * result + ((username == null) ? 0 : username.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Users other = (Users) obj;
		if (userage == null) {
			if (other.userage != null)
				return false;
		} else if (!userage.equals(other.userage))
			return false;
		if (userid == null) {
			if (other.userid != null)
				return false;
		} else if (!userid.equals(other.userid))
			return false;
		if (username == null) {
			if (other.username != null)
				return false;
		} else if (!username.equals(other.username))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Users [userid=" + userid + ", username=" + username + ", userage=" + userage + "]";
	}

}

 创建自定义Respository接口,并定义CRUD的抽象方法;
package com.OVA.dao;

import com.OVA.pojo.Users;

public interface UserRepository {
public Users findUserById(Integer userid);
}
//这里我只写了一个查的操作,根据自己喜好进行编写即可;
 创建实体类接口(例如:userDao)实现任意一个JPA提供的接口和自定义Respository接口,由于自定义Respository接口没有实现Respository接口,所以肯定也不能够单独使用;
package com.OVA.dao;

import org.springframework.data.repository.Repository;

import com.OVA.pojo.Users;

/**
 * @author OVA_Wom 
 * 用户自定义Repository接口
 **/
public interface UserDao extends UserRepository,Repository<Users, Integer> {
	
}

创建接口实现类实现自定义的Respository接口,但该接口的名称有一定的要求,该接口名称必须为实体类接口+Impl(例如:userDaoImpl),否则无法完成映射;

package com.OVA.dao;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import com.OVA.pojo.Users;

//最终接口的实现类还是要交给JPA来实现所以对于实现userDao接口的命名方式有规定必须的是接口名称+Impl
public class UserDaoImpl implements UserRepository{
@PersistenceContext(name="entityManagerFactory")
	private EntityManager  entityManager;
	@Override
	public Users findUserById(Integer userid) {
		return entityManager.find(Users.class, userid);
	}

}

编写测试类:

package test;

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.OVA.dao.UserDao;
import com.OVA.pojo.Users;

/**
 * @author OVA_Wom 自定义Repository测试接口
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestDefineRespository {
	@Autowired
	private UserDao userdao;
//注意:必须确保自己的接口实现类的名称为实体接口名+Impl否则无法映射
	//测试自定义查询,通过用户ID
	@Test
	public void findUserById(){
		Users users = userdao.findUserById(13);
		System.out.println(users);
	}
}

配置文件与前几篇的相同可直接拿来使用,以上是自定义Repository接口的使用,有什么不对的地方还请大神指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值