当前位置: 代码迷 >> Web前端 >> spring+hibernate jpa(1)
  详细解决方案

spring+hibernate jpa(1)

热度:501   发布时间:2012-10-30 16:13:36.0
spring+hibernate jpa(一)

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

?
  相关解决方案