`
joknm
  • 浏览: 62488 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

spring2.5注释型 + jpa + 数据库池的配置(4)

    博客分类:
  • JAVA
阅读更多
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);
	}

}

分享到:
评论

相关推荐

    struts2+spring2.5+jpa(基于注释)

    总的来说,"SSJ使用注释版"项目展示了如何利用Struts2、Spring2.5和JPA这三大框架,结合注解方式,构建一个现代Java Web应用。通过深入理解这些技术和注解的用法,开发者可以更高效地开发和维护复杂的业务系统。

    spring2.5+Hibernian3.2+struts2.6

    4. **引入Spring2.5**:同样地,添加Spring2.5的库,并在项目中启用注解支持。在Spring配置文件中,我们需要导入必要的命名空间,并定义数据源和SessionFactory等bean。 例如,Spring的配置文件(如`...

    Java代码生成工具 绿色版_生成Struts2.1.8,Spring2.5,Hibernate3代码

    Spring2.5引入了对JSR-303 Bean Validation的支持,以及对Java Persistence API(JPA)2.0的改进,使得数据库操作更加简便。此外,它还优化了与Spring MVC的集成,提升了整体性能和灵活性。 Hibernate3是一个流行的...

    站静态化,网上内容采集功能超强的CMS(1) 注释语法.chm(1) struts2+hibernate3.2+spring2.5(1) Red+Hat+Enterprise(1) 软件(1) struts分页组件(1) Hibernate(1)

    Spring2.5版本引入了对Java Persistence API(JPA)的支持,增强了与Hibernate等ORM工具的集成,使得开发更加灵活。 6. **Red Hat Enterprise Linux**:Red Hat Enterprise Linux是一款广泛使用的商业Linux发行版,...

    spring data jpa1.7 中文

    - 使用 Spring 的名称空间来配置 JPA 存储库。 - 示例: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jpa=...

    Spring in Action(第二版 中文高清版).part2

    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 断言...

    Spring in Action(第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的内容...

    Spring in Action(第二版 中文高清版).part1

    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 断言...

    Spring Framework 中文

    - **1.3.2 日志(Logging)**:Spring框架支持多种日志框架,如SLF4J、Log4j等,开发者可以根据项目需求选择合适的日志框架。 #### 二、Spring 3.x 的新特性与增强 Spring 3.x 版本引入了许多重要的新特性,增强了...

    MyEclipse 6 Java EE 开发中文手册

    - **配置Spring环境**:设置Spring所需的库文件和配置文件。 **14.3 开发Spring应用** - **编写Bean**:定义Spring管理的Bean。 - **配置ApplicationContext**:定义Bean之间的依赖关系。 - **操作数据**:使用...

    阿里云javasdk源码-jboot:基于SpringBoot2.x的前后端分离架构JBoot前台:Vue+iView后台:SpringBoo

    默认使用数据库记录记录,可配置切换使用Elasticseach记录,使用Spring-Data-Elasticsearch简化开发 极简代码生成 只需输入实体类名即可生成三层代码,自动创建数据库表 分支说明 master:基于Redis的‘JWT’ (待...

    eclipse工具使用说明

    **应用场景**:当项目需要使用特定功能或组件时,例如数据库连接池、ORM框架等,通常需要将相关的jar包添加到Referenced Libraries中。 ##### 2. WebApp Libraries **定义**:这是专为Web应用程序设计的库集合,...

    java版商城源码下载-xboot:启动

    项目持久层默认推荐使用JPA,更简单易上手,且OOP首先应满足面向对象的要求,而不是面向数据库。但遇到复杂业务逻辑需联表查询时可选择Mybatis-Plus写sql AOP操作日志默认已使用Elasticseach全文检索引擎记录,使用...

Global site tag (gtag.js) - Google Analytics