package com.myboxcs.service.base;import java.util.LinkedHashMap;import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;import com.myboxcs.bean.QueryResult;@Transactional
public abstract class Daosuppert implements DAO{
@PersistenceContext protected EntityManager em;
@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public <T> QueryResult<T> getScrollData(Class<T> entityClass,
int firstindex, int maxresult, LinkedHashMap<String, String> orderby) {
return getScrollData(entityClass,firstindex,maxresult,null,null,orderby);
}
@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public <T> QueryResult<T> getScrollData(Class<T> entityClass,
int firstindex, int maxresult) {
return getScrollData(entityClass,firstindex,maxresult,null,null,null);
}
@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public <T> QueryResult<T> getScrollData(Class<T> entityClass) {
return getScrollData(entityClass,-1,-1);
}
@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public <T> QueryResult<T> getScrollData(Class<T> entityClass,String wherejpql,Object[] queryParams) {
return getScrollData(entityClass,-1,-1,wherejpql,queryParams);
} @Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public <T> QueryResult<T> getScrollData(Class<T> entityClass,
int firstindex, int maxresult, String wherejpql,
Object[] queryParams) {
return getScrollData(entityClass,firstindex,maxresult,wherejpql,queryParams,null);
}
public <T> void delete(Class<T> entityClass,Object entityid) {
delete(entityClass, new Object[]{entityid});
} public <T> void delete(Class<T> entityClass,Object[] entityids) {
for(Object id:entityids){
em.remove(em.getReference(entityClass, id));
}
}
@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public <T> T find(Class<T> entityClass, Object entityid) {
return em.find(entityClass, entityid);
} public void save(Object entity) {
em.persist(entity);
} public void update(Object entity) {
em.merge(entity);
}
@SuppressWarnings("unchecked")
@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public <T> QueryResult<T> getScrollData(Class<T> entityClass,
int firstindex, int maxresult, String wherejpql, Object[] queryParams,LinkedHashMap<String, String> orderby) {
QueryResult qr=new QueryResult<T>();
String entityname =getEntityName(entityClass);
Query query = em.createQuery("select o from "+ entityname+" o "+(wherejpql==null? "": "where "+ wherejpql)+ buildOrderby(orderby));
setQueryParams(query,queryParams);
if(firstindex != -1 && maxresult !=-1)
{
query.setFirstResult(firstindex);
query.setMaxResults(maxresult);
}
qr.setResultlist(query.getResultList());
query =em.createQuery("select count(o) from "+ entityname+" o "+(wherejpql==null? "": "where "+ wherejpql));
setQueryParams(query,queryParams);
qr.setTotalrecord((Long)query.getSingleResult());
return qr;
}
protected void setQueryParams(Query query,Object[] queryParams)
{
if(queryParams!=null&&queryParams.length>0){
for(int i=0;i<queryParams.length;i++){
query.setParameter(i+1, queryParams[i]);
}
}
}
protected String buildOrderby(LinkedHashMap<String, String> orderby){
StringBuffer orderbyql=new StringBuffer("");
if(orderby!=null && orderby.size()>0){
orderbyql.append(" order by ");
for(String key : orderby.keySet()){
orderbyql.append("o.").append(key).append(" ").append(orderby.get(key)).append(",");
}
orderbyql.deleteCharAt(orderbyql.length()-1);
}
return orderbyql.toString();
}
protected <T> String getEntityName(Class<T> entityClass)
{
String entityname =entityClass.getSimpleName();
Entity entity =entityClass.getAnnotation(Entity.class);
if(entity.name()!=null &&!"".equals(entity.name()))
{
entityname=entity.name();
}
return entityname;
}}
我想在这里面添加一个 查找功能,比方说 就是 通过用户名就能查找到密码什么的, 自己弄了好久 总出错。
哪位好人 帮我添加这个功能啊。
解决方案 »
- 最简单的HQL语句 但是不知道错在哪里
- jsp生成word的问题
- 请教一个关于session的基础问题
- 用Eclipse开发jsp网页,怎么才能让这个页面自动更新呢?
- 关于站内搜索的问题,顶者有分
- 怎样更好的得到每个月的星期一到星期日是几号
- 【jsp求助帖】
- 请教,IF条件语句中产生的值,想拿到IF条件语句以外用,用什么方法?
- 如果ResultSet rs=stmt.executeQuery(sql);执行成功怎样知道查找到的记录数?
- Data truncation: Data too long for column 'title' at row 1 求大神帮忙
- java web 一个简单的注册问题
- 怎么样才能成为一个程序员?
{
return entityManager.loadByKeys(TblUser.class, new String[] { "password" }, new Object[] {password});
}
public User findUser(String name){
getScrollData(User.class,-1, -1, "where name =?", new String{name},null) ;
}
}
public User findUser(long userId){
reutrn getScrollData(User.class,-1, -1, "where userId=?", new String{userId},null) ;
}
}
public class UserDao extends Daosuppert {
public User findUser(String name){
getScrollData(User.class,-1, -1, "where name =?", new String{name},null) ;
}
}
List<Object> params=new ArrayList<Object>();
params.add(true);
jpql.append(" where username =?"+(params.size()+1));
params.add(formbean.getUsername());
userService.getScrollData(User.class, jpql.toString(), params.toArray());
public <T> QueryResult<T> findname(Class<T> entityClass,String username){
//String entityname =getEntityName(entityClass);
QueryResult qr=new QueryResult<T>();
Query query = em.createQuery("select o from User o where username ="+username);
qr.setTotalrecord((Long)query.getSingleResult());
return qr;
}
我这样写 但是报错 org.hibernate.exception.SQLGrammarException: could not execute queryUnknown column 'zengaill' in 'where clause'