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

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值