package io.loli.sc.server.dao; import io.loli.sc.server.entity.UploadedImage; import java.util.List; import javax.inject.Named; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.apache.commons.lang3.StringUtils; @Named("imageDao") public class UploadedImageDao { @PersistenceContext private EntityManager em; public void save(UploadedImage image) { em.persist(image); } public void update(UploadedImage image) { em.merge(image); } /** * 根据图片id将查询出此图片的信息 * * @param id 图片的id * @return 查询出的图片,如果没有此id的图片,则返回null */ public UploadedImage findById(int id) { return em.find(UploadedImage.class, id); } /** * 分页查询出指定用户的截图列表 * * @param u_id 用户id * @param firstPosition 初始位置 * @param maxResults 每页的最大数量 * @return 截图列表 */ public List<UploadedImage> listByUId(int u_id, int firstPosition, int maxResults, String name) { if (StringUtils.isBlank(name)) { return em.createNamedQuery("UploadedImage.listByUId", UploadedImage.class).setParameter("u_id", u_id) .setFirstResult(firstPosition).setMaxResults(maxResults).getResultList(); } else { return this.listByUIdAndFileName(u_id, name, firstPosition, maxResults); } } public int countByUId(int u_id) { return em.createNamedQuery("UploadedImage.listByUId", UploadedImage.class).setParameter("u_id", u_id) .getResultList().size(); } public List<UploadedImage> listByUIdAndFileName(int u_id, String fileName, int firstPosition, int maxResults) { return em.createNamedQuery("UploadedImage.listByUIdAndFileName", UploadedImage.class) .setParameter("file_name", "%" + fileName + "%").setParameter("u_id", u_id).setFirstResult(firstPosition) .setMaxResults(maxResults).getResultList(); } public List<UploadedImage> listByUIdAndFileName(int u_id, String fileName, int firstPosition, int maxResults, int tag) { return em.createNamedQuery("UploadedImage.listByUIdAndFileNameAndTag", UploadedImage.class) .setParameter("file_name", "%" + fileName + "%").setParameter("u_id", u_id).setParameter("tag_id", tag) .setFirstResult(firstPosition).setMaxResults(maxResults).getResultList(); } public int countByUIdAndFileName(int u_id, String fileName) { return em.createNamedQuery("UploadedImage.listByUIdAndFileName", UploadedImage.class) .setParameter("u_id", u_id).setParameter("file_name", "%" + fileName + "%").getResultList().size(); } public int countByUIdAndFileName(int u_id, String fileName, int tag) { return em.createNamedQuery("UploadedImage.listByUIdAndFileNameAndTag", UploadedImage.class) .setParameter("u_id", u_id).setParameter("file_name", "%" + fileName + "%").setParameter("tag_id", tag) .getResultList().size(); } public List<UploadedImage> checkExists(String code) { return em.createQuery("from UploadedImage where generatedCode=:code", UploadedImage.class) .setParameter("code", code).getResultList(); } public List<UploadedImage> findByCode(String generatedCode) { return em.createQuery("from UploadedImage where generatedCode=:code and delFlag=false", UploadedImage.class) .setParameter("code", generatedCode).getResultList(); } public List<UploadedImage> findAll() { return em.createQuery("from UploadedImage where delFlag=false order by id desc", UploadedImage.class) .getResultList(); } public UploadedImage findNext(int uid, int imageId) { return em .createQuery("from UploadedImage where delFlag=false and user.id=:uid and id>:imageId", UploadedImage.class) .setParameter("uid", uid).setParameter("imageId", imageId).setMaxResults(1).getSingleResult(); } public UploadedImage findLast(int uid, int imageId) { return em .createQuery("from UploadedImage where delFlag=false and user.id=:uid and id<:imageId", UploadedImage.class) .setParameter("uid", uid).setParameter("imageId", imageId).setMaxResults(1).getSingleResult(); } public List<UploadedImage> findByGalIdAndUId(int uid, Integer gid, int firstPosition, int maxResults, String name) { if (StringUtils.isBlank(name)) return em .createQuery( "from UploadedImage where delFlag=false and user.id=:uid and gallery.id=:gid order by id desc", UploadedImage.class).setParameter("uid", uid).setParameter("gid", gid) .setFirstResult(firstPosition).setMaxResults(maxResults).getResultList(); else { return em .createQuery( "from UploadedImage where originName like:name and delFlag=false and user.id=:uid and gallery.id=:gid order by id desc", UploadedImage.class).setParameter("uid", uid).setParameter("gid", gid) .setParameter("name", "%" + name + "%").setFirstResult(firstPosition).setMaxResults(maxResults) .getResultList(); } } public Long countByGalIdAndUId(int uid, Integer gid) { return em .createQuery( "select count(*) from UploadedImage where delFlag=false and user.id=:uid and gallery.id=:gid order by id desc", Long.class).setParameter("uid", uid).setParameter("gid", gid).getSingleResult(); } public List<UploadedImage> findAllByGalIdAndUId(int uid, Integer gid) { return em .createQuery( "from UploadedImage where delFlag=false and user.id=:uid and gallery.id=:gid order by id desc", UploadedImage.class).setParameter("uid", uid).setParameter("gid", gid).getResultList(); } public List<UploadedImage> findByNameAndUser(String name, int id) { return em .createQuery("from UploadedImage where delFlag=false and user.id=:uid and name like :name", UploadedImage.class).setParameter("uid", id).setParameter("name", name).getResultList(); } public int countByUId(int u_id, String name) { if (StringUtils.isBlank(name)) { return this.countByUId(u_id); } else return em .createQuery( "SELECT u FROM UploadedImage u WHERE u.user.id=:u_id and u.delFlag=false and u.originName like :originName order by u.date desc", UploadedImage.class).setParameter("u_id", u_id).setParameter("originName", "%" + name + "%") .getResultList().size(); } public Long countByGalIdAndUId(int id, Integer gid, String name) { if (StringUtils.isBlank(name)) { return this.countByGalIdAndUId(id, gid); } else return em .createQuery( "select count(*) from UploadedImage where delFlag=false and originName like :originName and user.id=:uid and gallery.id=:gid order by id desc", Long.class).setParameter("uid", id).setParameter("originName", "%" + name + "%") .setParameter("gid", gid).getSingleResult(); } }