自定义Respository接口的实现
- 实现自定义Respository接口主要是通过自己编写一个实体类的接口定义CRUD的抽象方法,然后通过接口实现类实现该接口,最终调用JPA的Respository接口的方法实现自定义接口,也就是最终接口的实现还是要依靠原生的Respository接口提供的方法。
- 主要步骤是:
创建实体类;
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接口的使用,有什么不对的地方还请大神指正。