关于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
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;
}
}