package com.itcast.service.base;
import com.itcast.bean.QueryResult;
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;
/**
*
* @author kang.cunhua
*/
@Transactional // 后面的方法都会具有默认的事务行为
public abstract class DaoSupport implements DAO {
@PersistenceContext
protected EntityManager em; // 允许子类访问,不用再在子类中注入
@Override
public void save(Object entity) {
em.persist(entity);
}
@Override
public void update(Object entity) {
em.merge(entity);
}
@Override
public <T> void delete(Class<T> entityClass, Object entityid) {
delete(entityClass, new Object[]{entityid});
}
@Override
public <T> void delete(Class<T> entityClass, Object[] entityids) {
for (Object id : entityids) {
em.remove(em.getReference(entityClass, id));
}
}
@Override
@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
public <T> T find(Class<T> entityClass, Object entityId) {
return em.find(entityClass, entityId);
}
@Override
@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);
//这两句也可以简写为:query.setFirstResult(firstindex).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;
}
@Override
@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);
}
@Override
@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);
}
@Override
@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);
}
@Override
@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
public <T> QueryResult<T> getScrollData(Class<T> entityClass) {
return getScrollData(entityClass, -1, -1);
}
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]);
}
}
}
/**
* 组装order by 语句
* @param orderby
* @return
*/
protected String buildOrderby(LinkedHashMap<String, String> orderby) {
StringBuilder orderbyql = new StringBuilder();
if (orderby != null && orderby.size() > 0) {
orderbyql.append(" order by ");
// order by o.key desc,o.key2 asc
for (String key : orderby.keySet()) {
orderbyql.append("o.").append(key).append(" ").append(orderby.get(key)).append(",");
}
orderbyql.deleteCharAt(orderbyql.length() - 1);
}
return orderbyql.toString();
}
/**
* 利用反射技术得到要传递到分页方法中的实体类的名字,简单名字还是自定义名字
* @param <T>
* @param entityClass
* @return
*/
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;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于maven3开发babasport源码(更新到38讲)
共175个文件
java:48个
jsp:33个
xml:30个
需积分: 10 8 下载量 133 浏览量
2011-09-16
15:04:42
上传
评论
收藏 76KB 7Z 举报
温馨提示
和maven官方例子一样,我学习教程也采用了父工程来管理各个阶段尝试不同的开源组件开发的模块。 \babasportrefactoring为父工程 \babasportrefactoring\babasportbluetripe为参考struts官方例子后重构的代码,同步更新到38讲; \babasportrefactoring\babasportcompact 为清理了非必要测试的子model2,Spring3.05 + Strtus2 + JPA(Hibernate) + Sitemesh ,同步更新到32讲; \babasportrefactoring\babasport1-30 为子model1,Spring3.05 + Strtus2 + JPA(Hibernate) + Sitemesh + Jquery(部分测试页面),同步更新到30讲
资源推荐
资源详情
资源评论
收起资源包目录
基于maven3开发babasport源码(更新到38讲) (175个子文件)
page.css 30KB
page.css 30KB
page.css 30KB
screen.css 14KB
style.css 3KB
common.css 2KB
common.css 2KB
manager.css 2KB
manager.css 2KB
print.css 2KB
ie.css 1KB
printaction.css 619B
printaction.css 554B
managelogo.gif 7KB
managelogo.gif 7KB
managelogo.gif 7KB
image2.gif 673B
image2.gif 673B
image2.gif 673B
image1.gif 671B
image1.gif 671B
image1.gif 671B
edit.gif 223B
edit.gif 223B
edit.gif 223B
arrow_off.gif 197B
arrow_off.gif 197B
arrow_off.gif 197B
index.html 21KB
page.html 10KB
page.html 10KB
page.html 10KB
WEB2.0下的颜色搭配效果.html 6KB
WEB2.0下的颜色搭配效果.html 6KB
WEB2.0下的颜色搭配效果.html 6KB
CSS绝对定位自适应布局.html 2KB
CSS绝对定位自适应布局.html 2KB
CSS绝对定位自适应布局.html 2KB
左右固定,中间自适应宽度.html 1KB
左右固定,中间自适应宽度.html 1KB
左右固定,中间自适应宽度.html 1KB
左栏固定宽度,右栏自适应.html 713B
左栏固定宽度,右栏自适应.html 713B
左栏固定宽度,右栏自适应.html 713B
DaoSupport.java 5KB
DaoSupport.java 5KB
DaoSupport.java 5KB
AllTypesFinder.java 5KB
AllBrandsFinder.java 4KB
JsonTable.java 4KB
ProductTypeAction.java 4KB
ProductTypeManageAction.java 3KB
TypeServiceTest.java 3KB
ProductTest.java 3KB
ProductTest.java 3KB
Type.java 3KB
ProductType.java 3KB
ProductType.java 3KB
ProductTypeAction.java 3KB
TypeUpdater.java 3KB
TypeSaver.java 3KB
BrandUpdater.java 2KB
PageView.java 2KB
Brand.java 2KB
BrandFinder.java 2KB
TypeFinder.java 2KB
BrandSaver.java 2KB
PageView.java 2KB
PageView.java 2KB
DAO.java 2KB
DAO.java 2KB
Dao.java 2KB
BrandServiceTest.java 2KB
BrandServiceImpl.java 1KB
ProductTypeServiceBean.java 1KB
ProductTypeServiceBean.java 1KB
TypeServiceImpl.java 1KB
BrandDeleter.java 1KB
TypeDeleter.java 1KB
WebTool.java 861B
WebTool.java 860B
WebTool.java 860B
PageIndex.java 777B
PageIndex.java 776B
PageIndex.java 776B
BrandService.java 773B
QueryResult.java 737B
QueryResult.java 736B
QueryResult.java 736B
ProductTypeService.java 160B
ProductTypeService.java 160B
TypeService.java 152B
meneame.jpg 8KB
meneame.jpg 8KB
meneame.jpg 8KB
typesinfo.jsp 4KB
productTypeList.jsp 3KB
decManager.jsp 3KB
brandsinfo.jsp 3KB
decJqueryJgrid.jsp 3KB
共 175 条
- 1
- 2
资源评论
一股河蟹的力量
- 粉丝: 7
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功