EJB3+JPA

package com.core.support.ejbDao;  
  
import java.io.Serializable;  
import java.util.List;  
  
import javax.persistence.Query;  
  
public interface IBaseDAO<T,PK extends Serializable> {  
      
      
    /** 
     * 根据Id查找一个类型为T的对象。 
     * @param clazz 
     * @param id 
     * @return 
     */  
    public T load(Serializable id);  
  
    /** 
     * 把实体持久化到数据库,并且使实体受到管制。 
     * @param t 
     */  
    public void persist(T t);  
  
    /** 
     * 持久化一个对象,该对象类型为T。 
     * @param t 
     */  
    public void save(T t);  
      
    /** 
     * 根据对象id删除一个对象,该对象类型为T 
     * @param t 
     */  
    public void delete(T t);  
      
    /** 
     * 根据ID删除对象 
     * @param id 
     */  
    public void deleteById(PK id);  
      
    /** 
     * 更新一个对象,主要用于更新一个在persistenceContext之外的一个对象。 
     *  
     * @param transientObject 
     *            需要更新的对象,该对象不需要在persistenceContext中。 
     */  
    void update(T transientObject);  
      
      
    public Query createQuery(String jpql);  
  
    /** 
     * 根据JPQL查询总数 
     * @param jpql 
     * @return 
     */  
    public int getTotalCount(String jpql);  
  
    /** 
     * 使用JPQL进行查询 
     * @param jpql 
     * @return 
     */  
    public List<T> find(String jpql);  
  
    /** 
     * 单条件的JPQL查询 
     * @param jpql 
     * @param param 
     * @return 
     */  
    public List<T> find(String jpql, Object param);  
  
    /** 
     * 多条件的JPQL查询 
     * @param jpql 
     * @param param 
     * @return 
     */  
    public List<T> find(String jpql, Object... param);  
      
    /** 
     * 更新或添加 
     * @param t 
     */  
    public void saveOrUpdate(T t);  
      
    /** 
     * 实体分离 
     */  
    public void flush();  
}  
package com.core.support.ejbDao;  
  
import java.io.Serializable;  
import java.lang.reflect.ParameterizedType;  
import java.lang.reflect.Type;  
import java.util.List;  
  
import javax.persistence.EntityManager;  
import javax.persistence.PersistenceContext;  
import javax.persistence.Query;  
  
  
public class BaseDAOImpl<T,PK extends Serializable> implements IBaseDAO<T,PK> {  
      
    private Class<T> clazz;  
      
    // 构造方法,根据实例类自动获取实体类类型  
    public BaseDAOImpl() {  
        this.clazz = null;  
        Class c = getClass();  
        Type t = c.getGenericSuperclass();  
        if (t instanceof ParameterizedType) {  
            Type[] p = ((ParameterizedType) t).getActualTypeArguments();  
            this.clazz = (Class<T>) p[0];             
        }  
    }  
      
    @PersistenceContext(unitName="OpenStarBBS")  
     protected EntityManager em;  
       
      
     public Query createQuery(String jpql) {  
      return em.createQuery(jpql);  
     }  
       
     public void delete(T t) {  
      em.remove(t);  
     }  
       
     public T load(Serializable id) {  
      return em.find(clazz,id);  
     }  
       
     @SuppressWarnings("unchecked")  
     public List<T> find(String jpql, Object param) {  
      return em.createQuery(jpql).setParameter(1, param).getResultList();  
     }  
       
     @SuppressWarnings("unchecked")  
     public List<T> find(String jpql, Object[] param) {  
      Query query = em.createQuery(jpql);  
      for (int i = 1; i <= param.length; i++) {  
       query.setParameter(i, param[i - 1]);  
      }  
      return query.getResultList();  
     }  
       
       
     @SuppressWarnings("unchecked")  
     public List<T> find(String jpql) {  
      return em.createQuery(jpql).getResultList();  
     }  
       
       
     @SuppressWarnings("unchecked")  
     public int getTotalCount(String jpql) {  
      return ((Long) em.createQuery(jpql).getSingleResult()).intValue();  
     }  
       
       
     public void persist(T t) {  
      em.persist(t);  
     }  
       
       
     public void save(T t) {  
      em.merge(t);  
     }  
       
       
     public void saveOrUpdate(T t) {  
      em.merge(t);  
     }  
  
  
     public void update(T transientObject) {  
        em.merge(transientObject);  
          
    }  
  
    public void deleteById(PK id) {  
        T object = this.load(id);  
        this.delete(object);      
    }  
  
    public void flush() {  
        em.flush();  
    }  
      
}  

以上这个可以复用。下面就是程序里的接口和类:

JAP ORM映射类

package com.openstarbbs.model;  
  
import javax.ejb.EJB;  
import javax.persistence.Column;  
import javax.persistence.Entity;  
import javax.persistence.GeneratedValue;  
import javax.persistence.GenerationType;  
  
import javax.persistence.Id;  
import javax.persistence.Table;  
  
import com.core.support.ejbDao.IBaseDAO;  
  
/** 
 * User entity. @author MyEclipse Persistence Tools 
 */  
@Entity  
@Table(name = "user", catalog = "openstarbbs")  
public class User implements java.io.Serializable {  
  
    // Fields  
  
    private Integer id;  
    private String name;  
    private String age;  
  
    @EJB  
    private IBaseDAO baseDao;  
      
    // Constructors  
  
    /** default constructor */  
    public User() {  
    }  
  
    /** full constructor */  
    public User(String name, String age) {  
        this.name = name;  
        this.age = age;  
    }  
  
    public void saveUser(User user){  
        baseDao.save(user);  
    }  
      
    // Property accessors  
    @Id  
    @GeneratedValue(strategy = GenerationType.AUTO)  
    @Column(name = "id", unique = true, nullable = false)  
    public Integer getId() {  
        return this.id;  
    }  
  
    public void setId(Integer id) {  
        this.id = id;  
    }  
  
    @Column(name = "name", nullable = false, length = 45)  
    public String getName() {  
        return this.name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    @Column(name = "age", nullable = false, length = 45)  
    public String getAge() {  
        return this.age;  
    }  
  
    public void setAge(String age) {  
        this.age = age;  
    }  
  
}  
package com.openstarbbs.user.dao;  
  
import javax.ejb.Stateless;  
  
import com.core.support.ejbDao.BaseDAOImpl;  
import com.openstarbbs.model.User;  
  
@Stateless  
public class UserDao extends BaseDAOImpl<User,Long> implements IUserDao{  
  
          
}  
package com.openstarbbs.user.dao;  
  
import javax.ejb.Local;  
  
import com.core.support.ejbDao.IBaseDAO;  
import com.openstarbbs.model.User;  
  
@Local    
public interface IUserDao extends IBaseDAO<User,Long>{  
      
}  
package com.openstarbbs.user.service;  
  
import javax.ejb.Remote;  
  
import com.openstarbbs.model.User;  
  
@Remote  
public interface IUserBean {  
      
    public User getUser();  
      
}  
package com.openstarbbs.user.service;  
  
import javax.ejb.EJB;  
import javax.ejb.Remote;  
import javax.ejb.Stateless;  
  
  
import com.openstarbbs.model.User;  
import com.openstarbbs.user.dao.IUserDao;  
  
  
@Stateless  
@Remote  
public class UserBean implements IUserBean {  
      
    @EJB  
    private IUserDao userDao;  
      
    public User getUser() {  
        return userDao.load(1);  
    }  
  
}  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值