spring2.5注釈型+jpa+データベースプールの構成(4)
PersonDao.java
PersonDaoImpl.java
ServerDao.JAvaコンポーネントファイル、データベース操作を引き出すdaoクラス
ServerDaoImpl.JAva Server Daoの実装クラス
junit 4のテスト
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);
}
}