`
神仙公社
  • 浏览: 9102 次
社区版块
存档分类
最新评论

Hibernate的几种查询方式

阅读更多
本文总结了项目中用到的Hibernate的几种查询方式

1 使用native sql 方式一 addEntity(Biz.class);

StringBuilder sql = new StringBuilder("select t.* from biztable t where 1=1");
        sql.append(" and t.uplimit <= ?");
        sql.append(" and t.downlimit >= ?");
        sql.append(" ORDER by t.inputdate");
        Query query = getSession().createSQLQuery(sql.toString()).addEntity(Biz.class);
        query.setParameter(0,limit);
        query.setParameter(1,limit);
        List<Biz> = query.list();
2 使用native sql 方式二 addScalar
// return integer
public Integer find(String planyear) {
String sql = "select count(a.b)  as amount from biztable a where a.x= '".concat(x).concat("' and a.c not in ('0')");
SQLQuery query = this.getSession().createSQLQuery(sql).addScalar("amount",Hibernate.INTEGER);
return (Integer) query.uniqueResult();
}
----------------------
//return list
public List<bizclass> find(String planyear) {
String sql = "select count(a.c)  as amount from biztable a where a.c = '".concat(c).concat("' and a.xnot in ('0')");
SQLQuery query = this.getSession().createSQLQuery(sql).addScalar("amount",Hibernate.INTEGER);
return query.list();
}
-------------------
//return bizclass
public bizclass getByPlate(String s1,String s2,String s3) throws Exception{
        String sql = "select t.conditioncheckid,\n" +
                "       t.checktime,\n" +
                "       t.inputer,\n" +
                "       t.inputdate,\n" +
                "  from biztable t,\n" +
                "       vm_s               s,\n" +
                "       vm_t            k,\n" +
                "       vm_d         d,\n" +
                "       VM_T   v\n" +
                " where t.s d = s.s \n" +
                "   and t.t = k.t \n" +
                "   and k.tr  = v.tr \n" +
                "   and k.platenumber="+"\'"+s1+"\'"+"\n" +
                "    and t.checktime = to_date('"+s2+"\','yyyy-mm-dd')\n" +
                "   and t.shiftid="+s3+"\n" +
                "   order by t.inputdate,t.conditioncheckid ";
        SQLQuery q = getSession().createSQLQuery(sql);
        q.addScalar("conditioncheckid", Hibernate.STRING);
        q.addScalar("checktime", Hibernate.STRING);
        q.addScalar("inputer", Hibernate.STRING);
        q.addScalar("inputdate", Hibernate.STRING);

        List list = q.list();
        if(list.size()==0){
            return null;
        }
        SimpleDateFormat sdf =   new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
        Truckruncheck tk= new Biz();
        Object[] p= (Object[]) list.get(0);
        tk.setCond (getStrValue(p[0]));
        tk.setChe (sdf.parse(getStrValue(p[1])));
        tk.setInputer(getStrValue(p[2]));
        tk.setInputdate(sdf.parse(getStrValue(p[3])));
       return tk;
    }


3 hql查询
public List<Human> findByPosition(String positionId, String... fetchProperties) {
StringBuilder hql = new StringBuilder();
hql.append("from Human human");
if (fetchProperties != null)
for (String fetchProperty : fetchProperties) {
hql.append(" left join fetch human.");
hql.append(fetchProperty);
}
hql.append(" where human.valid=true and (human.mainPosition.id = ? or exists(from human.partTimePositions ptp where ptp.id = ?))");
return this.findByHql(hql.toString(), positionId, positionId);
}

public List<T> findByHql(String hql, Object... values) {
        Query query = this.createQuery(hql, values);
        return query.list();
    }
4 createCriteria 查询
public Page<bizclass> find(Page<bizclass> page,Map<String, Object> conditions) {
Criteria criteria = getSession().createCriteria(bizclass.class);

if (conditions.get("userorgid") instanceof List) {
//过滤条件 用户登录单位过滤
@SuppressWarnings("unchecked")
List<String> collierys = (List<String>)conditions.get("userorgid");
if (collierys.size() > 0) {
criteria.add(Restrictions.in("xxxorgid", collierys));
} else {
criteria.add(Restrictions.eq("xxxorgid", "null"));//这里必须要让SQL查不到数据
}
}

criteria.add(Restrictions.eq("Apply.id",conditions.get(" id").toString())); 

criteria.add(Restrictions.ge("usetime", Date.valueOf(String.valueOf(conditions.get("usetimeStart"))))); 
criteria.setFetchMode("vmAttachs", FetchMode.JOIN);
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);//去重复

criteria.add(Restrictions.or(Restrictions.eq("inuse","1"),Restrictions.isNull("inuse")));
criteria.add(Restrictions.isNotNull("platenumber"));
criteria.addOrder(Order.asc("platenumber"));
return this.find(page, criteria);
}
---------------------------
public List<Human> findUserByAccountIds(List<String> accountIds) {
        Criteria criteria = userDao.getSession().createCriteria(Human.class);
        criteria.createAlias("unit", "unit");
        // 是否有效用户
        // criteria.add(Restrictions.eq("valid", VALID));

        // 关键字查询
        criteria.createAlias("accounts", "accounts");
        userDao.splitSourceInDc(accountIds, criteria, "in", "accounts.id", 500);
        criteria.addOrder(Order.asc("orderNum"));
        criteria.addOrder(Order.asc("accounts.loginName"));
        return userDao.find(criteria);
    }

5 jdbcTemplate
public List<Human> findSyncUserByOrg(String orgCode) {

        String sql="select h.id as id, employee_code as code,employee_lastname as last_name,employee_firstname as first_name," +
                " (CASE WHEN gender = '男' THEN '1' WHEN gender = '女' then'2'  ELSE '0' END) gender , " +
                " office_telephone as office_phone,mobile_telephone as cell_phone,email as email,to_date(enrolment_date, 'yyyyMMdd') as recruit_date, "+
                " 1 as id_document_type,id_code as id_document_num," +
//                " o.id as unit_id as unit_id,company_code as unit_code,"+
//                " company_name as unit_name,o2.id as dept_id as dept_id,department_code as dept_code,department_name as dept_name,"+
                " 0 as partTime,"+
                " (CASE  WHEN empolyee_group='劳务工' THEN '6' WHEN empolyee_group='认识关系在外单位人员' THEN '4' WHEN empolyee_group='外籍及港澳台人员' THEN '5' WHEN empolyee_group='长期合同工' THEN '1' WHEN empolyee_group='返聘人员' THEN '3' WHEN empolyee_group='短期合同工' THEN '2' WHEN empolyee_group='离退休人员' THEN '9' else '' END) 'group',"+
                " (CASE  WHEN employee_status='离退休移交' THEN '6' WHEN employee_status='死亡' THEN '5' WHEN employee_status='离退休' THEN '3' WHEN employee_status='离职' THEN '4' WHEN employee_status='在岗' THEN '1' WHEN employee_status='不在岗' THEN '2' else '' END) status, "+
                " 0 as immutable,"+
                " 11 as source,"+
                "  1 as valid, "+
                " create_time as create_time "+
                " from (select * from mdm_human h1 " +
                " where exists (select 1 from mdm_human h2 where h2.employee_code = h1.employee_code and h1.create_time < h2.create_time)) h " +
                " join mdm_materialprop p on h.id=p.human_id where p.department_code=? or p.company_code=?";
        List<Human> list=jdbcTemplate.query(sql,new Object[]{orgCode,orgCode},new BeanPropertyRowMapper(Human.class));
        return list;
    }


    @Autowired(required = false)
    private JdbcTemplate jdbcTemplate;


    /**
     * Set the JDBC DataSource to be used by this DAO.
     */
    @Autowired(required = false)
    public void setDataSource(DataSource dataSource) {
        if (this.jdbcTemplate == null || dataSource != this.jdbcTemplate.getDataSource()) {
            this.jdbcTemplate =  new JdbcTemplate(dataSource);
        }
    }
public void persist(Human logInfo) {
this.getSession().persist(logInfo);
}
-------------------

public Page<ToFixTruckRecord> findPageByNativeSQL(Page<ToFixTruckRecord> page,String sql, Object... values) {
String pagesql = "select * from ( select row_.*, rownum rownum_ from ( "+sql+
" ) row_) where rownum_<="+(page.getPageSize()*page.getPageNo())+" and rownum_>"+(page.getPageNo()-1) ;
if(page.isAutoCount()) {
long totalCount = this.countSqlResult(sql, values);
page.setTotalCount(totalCount);
}
List<ToFixTruckRecord> list=jdbcTemplate.query(pagesql,values,new BeanPropertyRowMapper(ToFixTruckRecord.class));
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
for(ToFixTruckRecord a : list) {
if (null != a.getBrokedate())
a.setBrokedate(DateTimeTools.stringToSqlDate(a.getBrokedate().toString()));
if(null!=a.getConfirmtime())
a.setConfirmtime(DateTimeTools.stringToSqlDate(a.getConfirmtime().toString()));
if(null!=a.getFixdate())
a.setFixdate(DateTimeTools.stringToSqlDate(a.getFixdate().toString()));
if(null!=a.getInputdate())
a.setInputdate(DateTimeTools.stringToSqlDate(a.getInputdate().toString()));
String truckfixid = a.getTruckfixid();
VmTkFix vmTkFix = (VmTkFix)this.getSession().get(VmTkFix.class, truckfixid);
String truckid = a.getTruckid();
VmTkTruck vmTkTruck =(VmTkTruck)this.getSession().get(VmTkTruck.class, truckid);
a.setVmTkFix(vmTkFix);
a.setVmTkTruck(vmTkTruck);
}
page.setResult(list);
return page;
}
6 sql 删除 更新
public void deletebyId(String  id) {
        Query query = this.getSession().createSQLQuery("delete from biztable where  id = '".concat( id).concat("' "));
        query.executeUpdate();
    }
public void ignoreWarn(String id){
        this.executeSql("update vm_reminder t set t.status = '2' where t.id=?", new Object[]{id});

    }
分享到:
评论

相关推荐

    Hibernate连表查询 Hibernate连表查询

    对于连表查询的结果处理,通常有两种常见的方式: #### 1. 获取单个字段值 如果只需要查询结果中的一个或几个字段,可以像下面这样处理: ```java for (int i = 0; i (); i++) { Object[] o = (Object[]) list....

    hibernate多表联合查询

    在Hibernate中,可以使用以下几种方式来实现多表联合查询: - **HQL (Hibernate Query Language)** - **Criteria API** - **Native SQL** 本文将重点介绍如何使用HQL和Native SQL来实现多表联合查询。 #### 三、...

    hibernateHQL关联查询

    Hibernate支持以下几种连接查询方式: 1. **内连接(Inner Join)**:`INNER JOIN` 或 `JOIN` ```java String hql = "SELECT s.stuName, e.examScore FROM Student s JOIN Exam e ON s.stuID = e.stuID"; ``` 2....

    hibernate 执行原生sql的几种方式

    本篇文章将详细介绍在Hibernate中执行原生SQL的几种方式,以及它们各自的适用场景和优缺点。 1. **使用`Session.createSQLQuery()`** Hibernate的`Session`接口提供了`createSQLQuery()`方法,允许我们直接编写SQL...

    hibernate几种帮助文档

    标题"hibernate几种帮助文档"暗示了我们将要探讨的是关于Hibernate框架的不同类型的参考资料,包括可能的教程、API参考手册或使用指南。描述中提到的"Hibernate开发必用的包:annotation, Apachelog4j等, 包之间不...

    Hibernate各种查询:联表查询 分页查询 位置参数查询(?) 占位符查询(冒号查询) 统计查询

    本篇文章将详细解析Hibernate中的几种主要查询方式,包括联表查询、分页查询、位置参数查询、占位符查询(冒号查询)以及统计查询,这些都是在实际开发中非常常见的需求。 首先,我们来看**联表查询**。在Hibernate...

    hibernate 的createSQLQuery的几种用法

    Hibernate 的 createSQLQuery 的几种用法 Hibernate 的 createSQLQuery 是 Hibernate 框架中的一种强大且灵活的查询机制,它允许开发者使用原生 SQL 语句来查询数据库。下面是 createSQLQuery 的几种常见用法: 一...

    Hibernate几种连接池的比较

    4.DBCP 连接配置(JNDI方式) 由于Hibernate3不推荐使用DBCP,以下配置仅供参考。在应用服务器如Tomcat中配置JNDI数据源后,Hibernate配置如下: &lt;?xml version='1.0' encoding='UTF-8'?&gt; &lt;!DOCTYPE hibernate-...

    HQL是hibernate自己的一套查询

    HQL是Hibernate框架中用于执行数据库操作的一种面向对象的查询语言。与传统的SQL语言不同,HQL更加注重于面向对象的特性,它支持Java类名和属性名作为查询条件,使得开发者可以直接使用Java对象模型来编写查询语句,...

    Hibernate几种获数据方法比较

    本文将深入探讨Hibernate中的几种主要的数据获取方式,包括`Session.get()`与`Session.load()`、`Query.iterator()`与`Query.list()`以及使用HQL(Hibernate Query Language)进行查询。 ### 1. `Session.get()`与`...

    day36 04-Hibernate检索方式:多表连接查询

    在多表连接查询的场景下,Hibernate提供了几种不同的方法来处理数据关联,包括HQL(Hibernate Query Language)查询、Criteria API以及传统的JPA(Java Persistence API)注解。 1. **HQL查询**: Hibernate Query...

    Hibernate查询解决方案

    本文将详细介绍 Hibernate 提供的几种查询方式及其应用场景。 #### 二、重要知识点 ##### 1. Session 对象与查询操作 在 Hibernate 中,所有持久化操作都需要通过 Session 对象来完成,包括查询操作。Session ...

    Hibernate QBC高级查询.rar

    Query by Criteria是Hibernate提供的另一种查询方式,与HQL(Hibernate Query Language)和Criteria API相辅相成。QBC提供了一种面向对象的方式来构建查询,避免了SQL语句的硬编码,使得代码更易于维护和测试。 在...

    struts+hibernate查询所有记录

    2. **HQL(Hibernate Query Language)**:这是Hibernate提供的一种查询语言,类似于SQL,但更加面向对象。通过HQL,我们可以方便地查询数据库中的记录。 3. **Struts标签库**:Struts提供了一系列自定义的JSP标签...

    hibernate中的注释的几种配置方式

    在探讨Hibernate中注释的几种配置方式时,我们主要聚焦于如何通过注解来定义实体类与数据库表之间的映射关系,以及如何在Spring框架下整合Hibernate,利用注解进行SessionFactory的配置。以下是对给定内容中涉及的...

    Hibernate之数据加载方式

    主要有以下几种方式: 1. **懒加载(Lazy Loading)**:默认情况下,Hibernate采用懒加载策略,即关联的对象不会在初始化时加载,而是在首次访问该关联对象时才加载。这种方式能有效减少内存消耗和提高性能。 2. *...

    hibernate对象三种状态

    在Java的持久化框架Hibernate中,对象存在三种不同的状态,分别是持久态(Persistent)、自由态(Transient)和游离态(Detached)。这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate...

    hibernate 进行多表查询每个表中各取几个字段

    除了HQL,Hibernate还提供了Criteria API,它提供了一种程序化的查询方式。使用Criteria,我们可以动态构建查询,如下所示: ```java Criteria criteria = session.createCriteria(User.class, "u") .createAlias...

    Hibernate SQLQuery 查询Oracle char类型结果为一个字符解决方法

    本文将详细介绍如何解决这一问题,并提供几种有效的解决方案。 #### 问题背景 Hibernate是Java平台下的一款优秀对象关系映射(ORM)框架,它极大地简化了Java应用程序与数据库之间的交互过程。然而,在使用...

    4.Hibernate-04查询以及优化策略1

    下面是几种常见的查询优化策略: 4.1 使用缓存 Hibernate 提供了多种缓存机制,例如一级缓存、二级缓存和查询缓存等。这些缓存机制可以显著地提高查询性能。 4.2 优化 HQL 查询 HQL 查询可以通过使用索引、限制...

Global site tag (gtag.js) - Google Analytics