- 浏览: 488877 次
- 性别:
- 来自: 武汉
-
最新评论
-
zyzyzy123:
请问有工程吗,我现在正在实现打电话的功能,但是一直不通,怀疑是 ...
实用的java 串口通信程序 -
wuhaitong:
引用[img][/img][*][url][/url] ...
jbpm -
迷糊_le:
maven命令, 蛮好的,谢谢
maven eclipse -
Wuaner:
不错的文章 , 谢谢分享!
Hadoop -
yuqihengsheng:
strong 很细
HighLighter
关于spring+hibernate JPA的一个例子
通过spring配置来实现对数据库的访问和对事务的管理
简单的对一张表(table)的操作
实体类:
User.java
package domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
/**
* User generated by MyEclipse Persistence Tools
*/
@Entity
@Table(name = "user", catalog = "shopping")
@NamedQueries(value = {@NamedQuery(name = "User.findAllUsers", query = "from User")})
public class User implements java.io.Serializable {
// Fields
/**
*
*/
private static final long serialVersionUID = 2172281412405163597L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String name;
private String pswd;
private String email;
// Constructors
/** default constructor */
public User() {
}
/** full constructor */
public User(Integer id, String name, String pswd, String email) {
this.id = id;
this.name = name;
this.pswd = pswd;
this.email = email;
}
// Property accessors
@Id
@Column(name = "ID", unique = true, nullable = false, insertable = true, updatable = true)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "NAME", unique = false, nullable = false, insertable = true, updatable = true, length = 30)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "PSWD", unique = false, nullable = false, insertable = true, updatable = true, length = 45)
public String getPswd() {
return this.pswd;
}
public void setPswd(String pswd) {
this.pswd = pswd;
}
@Column(name = "EMAIL", unique = false, nullable = false, insertable = true, updatable = true, length = 60)
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
}
Userdao.java (对表user的操作)
package com;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceException;
import javax.persistence.Query;
import org.springframework.orm.jpa.JpaCallback;
import org.springframework.orm.jpa.JpaTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import domain.User;
@Repository
public class Userdao {
private EntityManagerFactory entityManagerFactory;
public Userdao() {
}
protected JpaTemplate getJpaTemplate() {
return new JpaTemplate(this.entityManagerFactory);
}
@Transactional
// 声明为事务
public void createUser(User user) {
final JpaTemplate jpaTemplate = getJpaTemplate();
jpaTemplate.persist(user);
}
@Transactional
// 声明为事务
public void updateAndsaveUser(User user) {
final JpaTemplate jpaTemplate = getJpaTemplate();
user = jpaTemplate.merge(user);
System.out.println("修改完成");
}
@Transactional
public void deleteUser(User user) {// 注意与deleteUserById()方法的比较
final JpaTemplate jpaTemplate = getJpaTemplate();// 下面为什么没有用user
// =jpaTemplate.merge(user);
// 是因为下面的查找和删除都在一个事务中,user一直处于managed状态
user = jpaTemplate.merge(user); // change bean from detacthed to
// managed;
jpaTemplate.remove(user);
}
public User findUserById(Integer id) {
final JpaTemplate jpaTemplate = getJpaTemplate();
return jpaTemplate.find(User.class, id);
}
@Transactional
// 声明事务
public boolean deleteAllUsers() {
final JpaTemplate jpaTemplate = getJpaTemplate();
return (Boolean) jpaTemplate.execute(new JpaCallback() {
public Object doInJpa(EntityManager em) throws PersistenceException {
Query q = em.createNativeQuery("Delete from User");
if (q.executeUpdate() == 0)
return Boolean.TRUE;
else
return Boolean.FALSE;
}
});
}
public List findAllUsers() {
final JpaTemplate jpaTemplate = getJpaTemplate();
return jpaTemplate.findByNamedQuery("User.findAllUsers");
}
@Transactional
// 事务声明 删除操作必须在事务中才能完成
public boolean deleteUserById(Integer id) {
User user = null;
final JpaTemplate jpaTemplate = getJpaTemplate();
user = jpaTemplate.find(User.class, id);
if (user != null) {
jpaTemplate.remove(user);
System.out.println("删除用户:" + user.getName() + "(id=" + user.getId()
+ ")");
return true;
} else {
System.out.println("无法删除用户(id=" + id + ")");
return false;
}
}
public void setEntityManagerFactory(
EntityManagerFactory entityManagerFactory) {
this.entityManagerFactory = entityManagerFactory;
}
}
persistence.xml (持久化单元)
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="entityManagerFactory"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>domain.User</class>
<properties>
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
value="jdbc:mysql://localhost:3306/shopping?useUnicode=true&characterEncoding=GB2312" />
<property name="hibernate.connection.username" value="root" />
<property name="hibernate.connection.password" value="1024" />
<property name="show_sql" value="true" />
<property name="hibernate.Dialect"
value="org.hibernate.dialect.MySQLDialect" />
</properties>
</persistence-unit>
</persistence>
ApplicationContext.xml(Spring的一些配置)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName"
value="entityManagerFactory" />
</bean>
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<!-- 事务管理配置 -->
<bean id="myTxManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="myTxManager"></tx:annotation-driven>
<bean id="userdao" class="com.Userdao">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
</beans>
测试类
package com;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import domain.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"ApplicationContext.xml");
Userdao dao = (Userdao) ctx.getBean("userdao");
// System.out.println("姓名:"+dao.getUser().getName());
// System.out.println("年龄:"+dao.getUser().getAge());
/*
* dao.deleteUserById(1); dao.deleteUserById(2); dao.deleteUserById(3);
*/
// System.out.println(dao.deleteAllUsers());
// User user1 = new User(4,"lb","1235","lb@163.com");
// User user2 = new User(5,"hjp","1236","hjp@163.com");
// User user3 = new User(6,"zrq","1237","zrq@163.com");
// dao.createUser(user1);
// dao.createUser(user2);
// dao.createUser(user3);
User user11 = dao.findUserById(8);
if (user11 != null)
{System.out.println("姓名: " + user11.getName() + "(id="
+ user11.getId() + ");");
dao.deleteUser(user11);}
System.out.println("<----------------------------------->");
User user = dao.findUserById(1);
user.setName("yyq");
user.setEmail("yyq2007aa@163.com");
dao.updateAndsaveUser(user);
List<User> userlist = new ArrayList<User>();
userlist = dao.findAllUsers();
Iterator item = userlist.iterator();
int i = 0;
while (item.hasNext()) {
i++;
System.out.println(i + ". 姓名:" + ((User) item.next()).getName());
}
}
}
要注意的就是在Userdao.java中对User的cud等操作的事务性处理,事务通过@Transactional来声明,那么在ApplicationContext.xml中配置的事务管理器会自动把这个操作当作事务来处理。
JPA是持久化的标准,需要provider。现在支持JPA的ORM包有多种。Netbeans自带Toplink,如果想使用ORM框架的一些高级的功能,可以使用Hibernate作为JPA的实现。
使用Hibernate作为JPA的实现,需要在官网下载core、annotation、entityManager包。一般支持Hibernate的IDE都会带有core包,那么只需一下这些jar就可以:
ejb3-persistence.jar //创建实体时可以使用jdk1.6带的注释功能
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate-entitymanager.jar //创建持久性单元需要这个jar
javassist.jar
jboss-archive-browsing.jar
将这些jar放到类路径就可以创建持久性单元persisitence.xml。
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="JavaApplication14PU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>model.JH</class>
<properties>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.connection.password" value=" 123"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/news"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="show_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
其实这个就和hibernate.cfg.xml一样,用于管理持久层的配置。
不过写法和hibernate.cfg.xml有一些区别。
在hibernate.cfg.xml我们可以这样写:
<property name="show_sql">true</true>
但是在persistence.xml里面,我们得在value里面写:
<property name="show_sql" value="true"/>
之后建立实体就可以使用我们的Annotation了,不用再使用mapping文件了。
如果要使用到hibernate的高级功能,只需要在这个persistence.xml里面添加就可以了,例如我想添加二级缓存还有查询缓存,可以添加:
<!-- 配置缓存插件 -->
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
<!-- 开启二级缓存 -->
<property name="hibernate.cache.use_second_level_cache" value="true"/>
而且当实体需要使用缓存的时候,我们只需要加上这个Annotation:
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class MyModel{}
这相当于在mapping文件里面添加:
<cache usage="read-only"/>
发表评论
-
安装和使用memcached
2014-04-16 16:24 652如何将 memcached 融入到 ... -
applicationContext.xml
2013-08-09 09:05 954<?xml version="1.0&quo ... -
注释驱动的 Spring cache 缓存介绍
2013-08-08 07:04 672概述 Spring 3.1 引入了激动人心的基于注释(an ... -
Spring2.5 Annotations
2013-08-08 06:33 871完成setXxxx功能,即配置文件的 <propert ... -
Spring基于注解的缓存配置--EHCache AND OSCache
2013-08-07 23:21 1043本文将构建一个普通工程来说明spring注解缓存的使用方式, ... -
Ehcache 整合Spring 使用页面、对象缓存
2013-08-07 22:51 907Ehcache 整合Spring 使用页面、对象缓存 ... -
javassist教程和示例
2013-05-18 08:57 2025Javassist是一个执行字节 ... -
ZooKeeper官方文档
2013-05-16 17:09 1569介绍(源自ZooKeeper官方文档) 学习HBase过程 ... -
ZooKeeper -例子
2013-05-16 17:08 1233ZooKeeper ZooKeepe ... -
Spring整合Hessian访问远程服务
2013-05-15 13:44 869Spring整合Hessian访问远程服务 目录 1.1 ... -
redis
2013-05-14 11:44 778redis是一个key-value存储系统。和Memcach ... -
spring 资源访问
2013-05-13 08:26 1019spring在java基础上封装了资源访问,简单易用。 R ... -
ZooKeeper——入门
2013-05-08 16:12 920ZooKeeper——入门 博客分类: ZooK ... -
分布式服务框架 Zookeeper -- 管理分布式环境中的数据(IBM)
2013-05-08 14:07 794安装和配置详解 本文 ... -
分布式协调服务---Zookeeper
2013-05-08 14:05 7861、Zookeeper overview Zookee ... -
Hibernate
2013-03-28 13:04 939一、简述 Hibernate 和 JD ... -
Apache+Tomcat集群配置详解
2013-02-01 10:52 909Apache + Tomcat集群配置详解(1) 一、 ... -
Apache+Jboss集群基于反向代理的负载均衡
2013-02-01 10:40 2514假设三台机器IP分别为172.29.128.100、172. ... -
spring + ibatis 多数据源事务(分布式事务)管理配置方法
2012-12-17 15:18 1285spring + ibatis 多数据源事务(分布式事务 ... -
Hessian序列化不设SerializerFactory性能问题
2012-10-31 09:47 1523Hessian序列化不设SerializerFactor ...
相关推荐
在现代Java Web开发中,"Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA"是一个常见的架构组合,被广泛应用于构建企业级应用程序。这个组合通常被称为"SSM",其中"M"代表Maven,"S"代表Spring,包括Spring核心...
在IT领域,构建高效、可扩展的Web应用是至关重要的,而"spring+springMVC+jpa+hibernate框架整合"就是一个常见的解决方案。这个整合涉及到四个关键的技术栈:Spring框架、SpringMVC、JPA(Java Persistence API)...
Struts2+Spring+Hibernate 中的Action单元测试环境搭建 在软件开发中,单元测试是一种非常重要的测试方法,可以帮助我们确保代码的可靠性和稳定性。在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境...
此项目是spring+hibernate+JPA+BoneCP的大整合。所用的技术比较多,如Spring的IOC,AOP,Transactiion,Annotation,Spring_JUnit_Test及Log4j;Hibernate的JPA Annotation;BoneCP的数据库连接测等。是很好的学习资料...
在本项目中,我们主要探讨如何手动构建一个基于SpringMVC、Spring Data JPA、Hibernate以及FreeMarker模板引擎的Maven工程,同时实现环境切换功能。这个基础框架为日常开发工作提供了必要的支持。 首先,SpringMVC...
这是整合SpringMVC+Spring+SpringDataJPA+Hibernate简单的实现登录的功能,用的是mysql数据库,这是一个web Project 如果你用的是JavaEE6那么你要注意bean-validator.jar和weld-osgi-bundle.jar与slf4j的jar包冲突。...
此外,教程可能还会涵盖事务管理的配置,以及如何使用Spring Data JPA进一步简化数据访问层的代码。 整合这三大框架,可以实现高效、灵活且易于维护的Java Web应用。通过注解,开发者可以减少XML配置,提高代码的...
在Spring+Jersey+JPA+Hibernate的组合中,Hibernate作为JPA的具体实现,负责与MySQL数据库之间的交互。 MySQL是一种广泛使用的开源关系型数据库管理系统,因其高性能、可靠性和易于管理而在Web应用中受到青睐。在这...
"spring3+springmvc+jpa+hibernate多数据源"是一个示例项目,它演示了如何在一个应用中集成Spring 3、Spring MVC、JPA 2.0以及Hibernate,以实现对多个数据源的支持。下面将详细介绍这些技术及其集成的关键点。 **...
在IT行业中,构建一个基于Spring、SpringMVC、Hibernate和JPA的开发环境是常见的任务,这四个组件都是Java企业级应用开发中的重要工具。让我们深入探讨这些技术以及如何将它们整合在一起搭建一个完整的开发环境。 *...
车辆管理系统(struts+hibernate+spring+oracle).rar 对公务用车进行档案、费用、调度、维修、安全、运行等全方位的管理和统计,以方便...
在Maven或Gradle的构建文件中,添加对应的依赖库,如Spring的核心库、Spring ORM模块以及Hibernate的JPA和核心库。确保版本与项目的其他依赖兼容。 接下来,配置Spring的ApplicationContext.xml文件。在这个文件中...
标题“Spring + JPA + Hibernate配置”涉及到的是Java开发中常用的三个框架——Spring、Java Persistence API (JPA) 和Hibernate的集成与配置。这是一份关于如何将这些框架结合使用的教程或参考资料,可能包含了实现...
spring+hibernate+jpa+struts1+struts2+springmvc+jquery+freemaker 学习笔记 Compass将lucene、Spring、Hibernate三者结合
在本文中,我们将深入探讨"Spring+SpringMVC+SpringDataJPA+Hibernate"这个集成框架,这是一个在Java开发中广泛使用的强大组合,用于构建高效、可扩展的企业级应用程序。 首先,Spring是一个全面的Java应用框架,它...
3. **DAO层的实现**:Spring的`HibernateTemplate`或`HibernateOperations`可以简化DAO层的代码,但更推荐使用`HibernateJpaVendorAdapter`配合JPA的`EntityManager`,因为JPA提供了更丰富的ORM功能,并且与多种持久...
10. **最佳实践**:在实际项目中,为了提高性能和可维护性,通常会采用 MyBatis 或 JPA 作为更轻量级的数据访问层,而将 Hibernate 作为备用选项,以应对复杂的查询需求。 这个“Spring+hibernate整合源代码”应该...
在非注解方式下,你需要配置Hibernate的`hibernate.cfg.xml`文件,设置数据库连接参数,并在实体类上使用JPA的`@Entity`注解。此外,还需要创建`SessionFactory`,它是Hibernate的主要工作单元,负责创建`Session`...
在"maven+springjpa+hibernate"的例子中,Maven用于管理项目依赖,包括Spring Data JPA和Hibernate库。 **Spring Data JPA** Spring Data JPA是Spring框架的一部分,它简化了JPA(Java Persistence API)的使用,...
2. `hibernate-entitymanager.jar`:对于JPA的支持,提供ORM(对象关系映射)服务。 3. `hibernate-validator.jar`:数据验证功能,符合JSR-303标准。 4. `javassist.jar`:Hibernate使用的字节码操作库,用于动态...