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