spring2.5注釈型+jpa+データベースプールの構成(4)


PersonDao.java

package org.jinsheng.dao;

import java.util.List;

import org.jinsheng.jpa.entity.Person;

public interface PersonDao
{
	public void addPerson(Person person);

	public void deletePerson(long id);

	public void updatePerson(Person person);
	
	public Person findPerson(long id);	
		
	public long getPersonCount();
}


PersonDaoImpl.java

package org.jinsheng.dao.impl;

import java.util.List;

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

import org.jinsheng.dao.PersonDao;
import org.jinsheng.jpa.entity.Person;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Component("personDaoImpl")
@Transactional //   spring      
public class PersonDaoImpl implements PersonDao
{
	@PersistenceContext //  spring      EntityManagerFactory  EntityManager  
	EntityManager em;

	public void addPerson(Person person)
	{
		em.persist(person);
	}

	public void deletePerson(long id)
	{
		Person person = em.getReference(Person.class, id);
		em.remove(person);
	}

	public void updatePerson(Person person)
	{
		em.merge(person);
	}

	@Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true) //       
	public Person findPerson(long id)
	{
		Person person = em.find(Person.class, id);
		return person;
	}
	
	@Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
	public long getPersonCount()
	{
		String str = "select count(id) from Person";
		return (Long) em.createQuery(str).getSingleResult();
	}

}


ServerDao.JAvaコンポーネントファイル、データベース操作を引き出すdaoクラス

package org.jinsheng.dao;

public interface ServerDao
{
	public PersonDao getPersonDao();
}


ServerDaoImpl.JAva Server Daoの実装クラス

package org.jinsheng.dao.impl;

import org.jinsheng.dao.PersonDao;
import org.jinsheng.dao.ServerDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component("server") //      spring     bean   
public class ServerDaoImpl implements ServerDao
{
	@Autowired //      bean 
	private PersonDao personDao;
	
	public PersonDao getPersonDao()
	{
		return personDao;
	}
}

junit 4のテスト

package org.jinsheng.dao.impl;

import java.util.Date;

import org.jinsheng.dao.PersonDao;
import org.jinsheng.dao.ServerDao;
import org.jinsheng.jpa.entity.Person;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import junit.framework.TestCase;

public class PersonDaoImplTest extends TestCase
{
	private PersonDao personDao;

	public PersonDaoImplTest()
	{
		ServerDao serverDao = (ServerDao) new ClassPathXmlApplicationContext(
				"applicationContext.xml").getBean("server");
		personDao = serverDao.getPersonDao();
	}

	@Test
	public void testAddPerson()
	{
		Person person = new Person();
		person.setName("jinsheng");
		person.setUsername("pjsh");
		person.setPassword("pjsh");
		person.setSex(" ");
		long sCount = personDao.getPersonCount();
		long startTime = new Date().getTime();
		for (int i = 0; i <= 100000; i++)
		{
			person.setAge(i);
			personDao.addPerson(person);
		}
		long endTime = new Date().getTime();
		long eCount = personDao.getPersonCount();
		System.out.println("       10W          :" + (endTime - startTime) + "   。");
                  //            10W       8   ,  ,    ,  。
		System.out.println("         :" + (eCount - sCount));
	}

	@Test
	public void testGetPersonCount()
	{
		long count = personDao.getPersonCount();
		System.out.println("   :" + count);
	}

	@Test
	public void testDeletePerson()
	{
		personDao.deletePerson(15);
	}

	@Test
	public void testUpdatePerson()
	{
		Person person = new Person();
		person.setId(4);
		person.setName("jinsheng");
		person.setUsername("pjsh");
		person.setPassword("pjsh");
		person.setSex(" ");
		person.setAge(25);
		personDao.updatePerson(person);
	}

	@Test
	public void testFindPerson()
	{
		Person person = personDao.findPerson(3);
		System.out.println(person);
	}

}