如何使用EntityManager获得记录数
怎么使用EntityManager获得记录数
如下所示:
首先是要获得jpa的entityManager:
import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class JPAUtil { private static EntityManagerFactory entityManagerFactory; static { try { entityManagerFactory = Persistence.createEntityManagerFactory("mmsbackup"); } catch(Throwable ex) { throw new ExceptionInInitializerError(ex); } } public static EntityManagerFactory getEntityManagerFactory() { return entityManagerFactory; } public static void shutdown() { getEntityManagerFactory().close(); } }
然后编写实体:
package net.kentop.mmsbackend.entity; import java.io.Serializable; import java.util.Date; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Lob; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.Transient; import net.kentop.common.util.BlankUtil; import org.hibernate.annotations.GenericGenerator; /** * smil文件实体 * @author lhx1026 * */ @Entity @Table(name="SMIL_FILES") public class SmilFile implements Serializable{ /** * serialVersionUID */ private static final long serialVersionUID = 1025423394267546744L; private String mmsid; private String title; private byte[] smil; private Date createDate; private String startDate; private String endDate; private Set<SmilMedia> medias = new HashSet<SmilMedia>(); @Id @Column(length = 32) @GenericGenerator(name = "uuid", strategy = "uuid.hex") @GeneratedValue(generator = "uuid") public String getMmsid() { return mmsid; } public void setMmsid(String mmsid) { this.mmsid = mmsid; } @Column(nullable=false) public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } @Lob @Column(nullable=false) public byte[] getSmil() { return smil; } public void setSmil(byte[] smil) { this.smil = smil; } @Column(nullable=false) public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } @Transient public String getStartDate() { return startDate; } public void setStartDate(String startDate) { this.startDate = startDate; } @Transient public String getEndDate() { return endDate; } public void setEndDate(String endDate) { this.endDate = endDate; } @OneToMany(fetch=FetchType.LAZY,mappedBy="smilFile",cascade={CascadeType.ALL}) public Set<SmilMedia> getMedias() { return medias; } public void setMedias(Set<SmilMedia> medias) { this.medias = medias; } public SmilFile(){ } public int hashCode() { return mmsid.hashCode(); } public boolean equals(Object obj) { if (BlankUtil.isBlank(obj)) { return false; } if (this == obj) { return true; } if (!(obj instanceof SmilFile)) { return false; } SmilFile smil = (SmilFile) obj; if (BlankUtil.isBlank(this.mmsid) || BlankUtil.isBlank(smil.getMmsid())) { return false; } return this.mmsid.equals(smil.getMmsid()); } public String toString() { return "id:"+mmsid+",title"+title; } }
编写dao层中的获得记录数的方法:
public static Long getCountsByConditions(SmilFile file){ StringBuilder builder = new StringBuilder().append("select count(*) from SmilFile po where 1=1"); if(!BlankUtil.isBlank(file)){ if(!BlankUtil.isBlank(file.getTitle())){ builder.append(" and po.title = :title"); } } EntityManager em = JPAUtil.getEntityManagerFactory().createEntityManager(); Query query = em.createQuery(builder.toString()); if(!BlankUtil.isBlank(file.getTitle())){ query.setParameter("title",file.getTitle()); } Long counts = (Long)query.getSingleResult();//就是这个getSingleResult()方法 em.close(); return counts; }