Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

실제 존재하는 객체인 CrudRepository를 활용하여 , 영속성 관련 기능을 하나씩 사용해보겠습니다. 익숙해지는 그날까지~~

Insert

장점: 데이터 입력을 위해, 추가구현없이 CrudRepository만 사용하면되며 객체접근법 활용이 가능합니다.

...

데이터 추가/삭제/변경/조회등  추가구현없이, 이미 구현된 CrudRepository를 이용하면 대부분의 기능을 사용할수가 있습니다. 


인터페이스 준비

No Format
//선언
public interface GroupRepository extends CrudRepository<GroupInfo, Long> {
}
public interface UserRepository extends CrudRepository<User, Long> {	
}



Insert

No Format
//사용 그룹생성
GroupInfo newGroup = new GroupInfo();
newGroup.setName("학생");
groupRepository.save(newGroup);

// 사용자 생성
User addUser = new User();
addUser.setName("minsu");
addUser.setEmail("test@x.com");
addUser.setGroupInfo(newGroup);    

//SQL문에서는 외래키인 그룹ID를 지정하겠지만지정하지만,객체모델에서는 이미 알고있는 참조지정을 합니다.
//이것이 OOP의 특성을 잃지않으면서,관계형DB의 특성까지 확장이된 한가지 케이스입니다. 
addUser.setGroupInfo(newGroup);
userRepository.save(addUser); 


Update


Delete


Custom Repository

기본적인 데이터 입출력에서 CurdRepository 를 이용하면, 세부적인 트랜잭션 처리를 크게 신경쓸필요가 없습니다.

하지만, EntityManager(이하 em)가 관리하는 PersitenceContext를 이해하려면 

em을 통해 저수준의 JPA API를 통해 영속성과 관련된 몇가지 기능을 직접 호출하여 데이터 베이스를 제어해보겠습니다. 


인터페이스 준비

Code Block
languagejava
themeEmacs
public interface AddressCustomRepository  {
	void someTest(Address2 address2);
}


public class AddressCustomRepositoryImpl implements AddressCustomRepository { 
	@PersistenceContext
	private EntityManager em;
	  
	@Override
	@Transactional
	public void someTest(Address2 
userRepository.save(addUser); address2) {
		em.refresh(address2);		
		em.detach(address2);
		em.persist(address2);
		em.lock(address2, null);
		em.flush();
	}	  
}
public interface AddressRepo2 extends JpaRepository<Address2, Long>,AddressCustomRepository{	
		
}


CRUDRepository에서 하지못한 올바른 데이터를 입력하는것은 간단합니다. 트랜잭션의 범위를 지정을하고입력 과정에서 발생할수 있는 몇가지 이상행동을 수행 해보겠습니다. 

  • 제약조건을 걸고 무시하여 Insert하기
  • 허용되지 않는 데이터 및 범위 입력하기
  • 트랜젝션이 끝나기전에 어플리케이션 익셥션을 유발하여 중단하기
  • 쓰기 트렌젝션이 완료되기전, 읽기 시도
  • 대량의 입력처리와 나눠서 처리할수 있는방법 

Insert


Update


Delete