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 ServerDao的实现类
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;
}
}
junit4的测试
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);
}
}
分享到:
相关推荐
总的来说,"SSJ使用注释版"项目展示了如何利用Struts2、Spring2.5和JPA这三大框架,结合注解方式,构建一个现代Java Web应用。通过深入理解这些技术和注解的用法,开发者可以更高效地开发和维护复杂的业务系统。
4. **引入Spring2.5**:同样地,添加Spring2.5的库,并在项目中启用注解支持。在Spring配置文件中,我们需要导入必要的命名空间,并定义数据源和SessionFactory等bean。 例如,Spring的配置文件(如`...
Spring2.5引入了对JSR-303 Bean Validation的支持,以及对Java Persistence API(JPA)2.0的改进,使得数据库操作更加简便。此外,它还优化了与Spring MVC的集成,提升了整体性能和灵活性。 Hibernate3是一个流行的...
Spring2.5版本引入了对Java Persistence API(JPA)的支持,增强了与Hibernate等ORM工具的集成,使得开发更加灵活。 6. **Red Hat Enterprise Linux**:Red Hat Enterprise Linux是一款广泛使用的商业Linux发行版,...
自Spring 2.5版本起,Spring引入了注释驱动的配置,使得开发者可以通过在类和方法上添加注释来替代传统的XML配置文件。这种方式极大地简化了配置过程,提高了开发效率,也增强了代码的可读性和内聚性。本文将深入...
- 使用 Spring 的名称空间来配置 JPA 存储库。 - 示例: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jpa=...
A.4 Spring与Log4j 附录B 用(和不用)Spring进行测试 B.1 测试简介 B.1.1 理解不同类型的测试 B.1.2 使用JUnit B.1.3 Spring在测试中的角色 B.2 单元测试Spring MVC控制器 B.2.1 模拟对象 B.2.2 断言...
a.4spring与log4j 附录b用(和不用)spring进行测试 b.1测试简介 b.1.1理解不同类型的测试 b.1.2使用junit b.1.3spring在测试中的角色 b.2单元测试springmvc控制器 b.2.1模拟对象 b.2.2断言modelandview的内容...
A.4 Spring与Log4j 附录B 用(和不用)Spring进行测试 B.1 测试简介 B.1.1 理解不同类型的测试 B.1.2 使用JUnit B.1.3 Spring在测试中的角色 B.2 单元测试Spring MVC控制器 B.2.1 模拟对象 B.2.2 断言...
- **1.3.2 日志(Logging)**:Spring框架支持多种日志框架,如SLF4J、Log4j等,开发者可以根据项目需求选择合适的日志框架。 #### 二、Spring 3.x 的新特性与增强 Spring 3.x 版本引入了许多重要的新特性,增强了...
- **配置Spring环境**:设置Spring所需的库文件和配置文件。 **14.3 开发Spring应用** - **编写Bean**:定义Spring管理的Bean。 - **配置ApplicationContext**:定义Bean之间的依赖关系。 - **操作数据**:使用...
默认使用数据库记录记录,可配置切换使用Elasticseach记录,使用Spring-Data-Elasticsearch简化开发 极简代码生成 只需输入实体类名即可生成三层代码,自动创建数据库表 分支说明 master:基于Redis的‘JWT’ (待...
**应用场景**:当项目需要使用特定功能或组件时,例如数据库连接池、ORM框架等,通常需要将相关的jar包添加到Referenced Libraries中。 ##### 2. WebApp Libraries **定义**:这是专为Web应用程序设计的库集合,...
项目持久层默认推荐使用JPA,更简单易上手,且OOP首先应满足面向对象的要求,而不是面向数据库。但遇到复杂业务逻辑需联表查询时可选择Mybatis-Plus写sql AOP操作日志默认已使用Elasticseach全文检索引擎记录,使用...