hiberante对象方式的投影操作与sql语句的投影方式(聚集函数的hibernate用法)

hiberante对象方式的投影操作与sql语句的投影方式(聚集函数的hibernate用法)

最近用到了hibernate的投影,写日记出来记录一下。

(⊙o⊙)… 前提:搭配好hibernate环境了。 myclass指的是已经映射好的实体类

如下3个函数是我写来测试投影的方法:   此三个方法我写在basedao中(基础dao类,做常用dao操作)

 1   /**
 2      * 斌临城下增加!
 3      * <p/>
 4      * ---(⊙o⊙)…
 5      * <p/>
 6      * *
 7      */
 8     public <T> List<T> getTouYingList_min(String []s, Class<T> myClass)
 9     {
10         Criteria c=getSession().createCriteria(myClass);
11         ProjectionList p=Projections.projectionList();
12         for(int i=0;i<s.length;i++)
13         {
14           p.add(Projections.max(s[i]));
15         }
16         List l=c.setProjection(p).list();
17         return l;
18     }
19     public <T> List<T> getTouYingList_max(String []s, Class<T> myClass)
20     {
21         Criteria c=getSession().createCriteria(myClass);
22         ProjectionList p=Projections.projectionList();
23         for(int i=0;i<s.length;i++)
24         {
25             p.add(Projections.max(s[i]));
26         }
27         List l=c.setProjection(p).list();
28         return l;
29     }
30
31     public List getSQLqueryColumnList(String sql)
32     {
33         List l=getSession().createSQLQuery(sql).list();
34         return l;
35
36     }

-----------》用法:

第一个方法显然是计算列最小值的方法。传入的String数组代表你需要计算的列命,此方法是我写的专门求最小值的。 至于通用方法,可以用第三种sql语句的方法。

 1   public void testTouting()      //投影哦
 2     {
 3         String []s={"trafficMoney","foodMoney"};
 4
 5         List l=baseDao.getTouYingList_min(s, Expense.class);
 6
 7         Iterator i=l.iterator();
 8         while(i.hasNext())                     //投影测试 查出各投影字段,并形成一个数组。 有多条结果组成了对象数组呀!
 9         {
10             Object[] o=(Object[])i.next();
11             System.out.println("交通最少金额"+o[0]);
12             System.out.println("饮食最少金额"+o[1]);
13         }
14
15         }

第二个方法求最大值。

 1   public void testTouting()      //投影哦
 2  2     {
 3  3         String []s={"foodMoney","carMoney"};
 4  4
 5  5         List l=baseDao.getTouYingList_max(s, Expense.class);
 6  6
 7  7         Iterator i=l.iterator();
 8  8         while(i.hasNext())                     //投影测试 查出各投影字段,并形成一个数组。 有多条结果组成了对象数组呀!
 9  9         {
10 10             Object[] o=(Object[])i.next();
11 11             System.out.println("饮食最大金额"+o[0]);
12 12             System.out.println("车辆使用最大金额"+o[1]);
13 13         }
14 14
15 15         }

第三个方法应用:

 1 1   String DateSql="select min(accountDate),max(accountDate),sum(case when isInvoice=1 then money else 0 end) as invoiceMoney where rigisteruser=‘wuhuanbin"
 2
 3         List listForMoney=baseDao.getSQLqueryColumnList(Moneysql);   //获取所得值得list
 4
 5         Iterator moneyIterator=listForMoney.iterator();             //得到迭代器
 6         Object[] o=(Object[])moneyIterator.next();              //每一个结果是一个对象数组,这里应该只有一条结果,因为聚集成一条了。
 7         System.out.println("起始日期"+o[0]+" 终止日期"+o[1]);
 8
 9         totalmoeny=Double.parseDouble(o[2].toString());
10
11         System.out.println("有发票总金额"+o[3]);

这里假如没有聚集的话,比如你查出select *  结果则是一个个对象数组Object o[];,也就是很多个对象数组。

有什么疑问和建议的,欢迎交流!!共同进步!!

时间: 2024-10-12 10:15:07

hiberante对象方式的投影操作与sql语句的投影方式(聚集函数的hibernate用法)的相关文章

Sql Server 优化----SQL语句的执行方式与锁以及阻塞的关系

阻塞原因之一是不同的Session在访问同一张表的时候因为不兼容锁的原因造成的, 当前执行的SQL语句是否被阻塞(或者死锁),不仅跟当前表上的已有的锁有关,也会跟当前执行的SQL语句的执行方式有关 简单来说,对于表的访问方式,SQL语句的执行无非是表扫描,索引扫描,(聚集索引或者非聚集索引)索引查找等等 如果SQL语句的执行方式不当或者没有合理的索引,会造成没必要的阻塞,如果逻辑控制不当,甚至造成更严重的问题,造成数据逻辑的错误 建个测试表,下面测试演示一下 create table testI

优化、分析Mysql表读写、索引等操作的sql语句效率优化问题

为什么要优化: 随着实际项目的启动,数据库经过一段时间的运行,最初的数据库设置,会与实际数据库运行性能会有一些差异,这时我们 就需要做一个优化调整. 数据库优化这个课题较大,可分为四大类: >主机性能>内存使用性能>网络传输性能>SQL语句执行性能[软件工程师]下面列出一些数据库SQL优化方案: (01)选择最有效率的表名顺序(笔试常考) 数据库的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表将被最先处理,在FROM子句中包含多个表的情况下,你必须选择

Mysql表读写、索引等操作的sql语句效率优化问题

上次我们说到mysql的一些sql查询方面的优化,包括查看explain执行计划,分析索引等等.今天我们分享一些 分析mysql表读写.索引等等操作的sql语句. 闲话不多说,直接上代码: 反映表的读写压力 SELECT file_name AS file, count_read, sum_number_of_bytes_read AS total_read, count_write, sum_number_of_bytes_write AS total_written, (sum_number

SQL中的5种聚集函数

原文:SQL中的5种聚集函数 作为一个刚毕业进入这行的菜鸟,婶婶的觉的那种大神.大牛到底是怎样炼成的啊,我这小菜鸟感觉这TMD要学的东西这多啊,然后就给自己定了许多许多要学习的东西,可是有人又不停地给你灌输:东西不在多而要精通!我也觉得很有道理,可是怎样才能精通呢?封神之路,在哪里啊 !!! 这一天没有一个安静的心,基本是学不进去了,发现自己还是太功利了,急功近利!也许你只要学就行,管他是否能够立即让人见识到你的厉害,技术和知识这种东西也许还是要强调一个 底蕴的.既然自己最烦那种看了两篇文章就给

SQL语句Left join 中On和Where的用法区别

SQL语句如下: SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.id = 表2.id AND 表2.Name != 'ff'WHERE 表1.NAME != 'aa' 步骤1:返回笛卡尔积(SELECT * FROM 表1 CROSS JOIN 表2) 步骤2:应用ON筛选器(当前的条件为  表1.id = 表2.id AND 表2.Name != 'ff') 步骤3:添加外部行 这一步只对OUTER JOIN起作用,如果是LEFT JOIN会以左边的表为保留表,如果是

sql语句分页多种方式ROW_NUMBER()OVER

摘自: http://www.cnblogs.com/CodingArt/articles/1692468.html 方式一 select top @pageSize * from company where id not in (select top @pageSize*(@pageIndex-1) id from company) 方式二ROW_NUMBER()OVER --ROW_NUMBER() 就是生成一个有顺序的行号,而他生成顺序的标准,就是后面紧跟的OVER(ORDER BY ID

SQL语句汇总(三)——聚合函数、分组、子查询及组合查询 - Darly

–COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均值 –MAX:计算列的最大值 –MIN:计算列的最小值 首先,创建数据表如下: 执行列.行计数(count): 标准格式 SELECT COUNT(<计数规范>) FROM <表名> 其中,计数规范包括: - * :计数所有选择的行,包括NULL值: - ALL 列名:计数指定列的所有非空值行,如果不写,默认为ALL: - DISTINCT 列名:计数指定列的唯一非空值行. 例,计算班里共有多少学生:

SQL语句中in not in exits not exits用法比较

exists (sql 如果返回结果集为真) not exists (sql 如果没有返回结果集为真) 如下: 表A ID NAME 1 A1 2 A2 3 A3 表B ID AID NAME 1 1 B1 2 2 B2 3 2 B3 表A和表B是1对多的关系 A.ID => B.AID SELECT ID,NAME FROM A WHERE EXIST (SELECT * FROM B WHERE A.ID=B.AID) 执行结果为 1 A1 2 A2 原因可以按照如下分析 SELECT ID

sql语句中避免使用mysql函数,提升mysql处理能力。

如下sql中不要用mysql内置函数now()等,这样第一可以提高sql执行效率,第二统一程序层处理sql中时间参数,避免因服务器时间差导致问题产生. 使用PDO预处理,第一可以提高sql效率,第二可以避免sql注入问题. $db->Execute("INSERT INTO `h5dfdh_lefttime_log`(`mobile`, `lefttime`, `channel`, `create_time`)VALUES(?, ?, ?, ?)", array($mobile,