- 浏览: 92790 次
- 性别:
- 来自: 北京
最新评论
-
JaHunter:
bootstrap示例:http://www.bootcss. ...
实用网址 -
JaHunter:
http://www.entrepreneur.com/art ...
read -
zdsong2009:
很受用,现在公司正(ˇˍˇ) 想做一个B2C,
B2C -
marshan:
停掉tomcat,然后删除temp目录下的东东。
java.io.NotSerializableException错误解决方法 -
JaHunter:
http://www.filamentgroup.com/la ...
实用网址
1.hibernate:查找总共多少条记录
Long count = (Long)session.createQuery("select count(*) from Student").uniqueResult();
2.分组查询多少条记录并输出
List students =session.createQuery("select c.name, count(s) from Student s join s.classes c " +
"group by c.name order by c.name").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + ", " + obj[1]);
}
3.这样的方式(session.createSQLQuery("..."))要以数组形式输出
List students = session.createSQLQuery("select * from t_student").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
4.单一属性查询
//返回结果集属性列表,元素类型和实体类中相应的属性类型一致
List students = session.createQuery("select name from Student").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
String name = (String)iter.next();
System.out.println(name);
}
5.多个属性查询
//查询多个属性,其集合元素是对象数组
//数组元素的类型和对应的属性在实体类中的类型一致
//数组的长度取决与select中属性的个数
List students = session.createQuery("select id, name from Student").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
6.实体查询1(以Student对象为例)
//如果认为返回数组不够对象化,可以采用hql动态实例化Student对象
//此时list中为Student对象集合
List students = session.createQuery("select new Student(id, name) from Student").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getId() + "," + student.getName());
}
7.实体对象查询2
/**
* 采用list查询发出一条查询语句,取得Student对象数据、
*
* Hibernate: select student0_.id as id1_, student0_.name as name1_,
* student0_.createTime as createTime1_, student0_.classesid as classesid1_
* from t_student student0_
*
*/
List students = session.createQuery("from Student").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
8.实体对象查询3
//返回Student对象的集合
//使用select查询实体对象,必须采用别名
List students = session.createQuery("select s from Student as s").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
//不支持select * from .....这样的查询语句
List students = session.createQuery("select * from Student").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
9.N+1问题
/**
* 出现N+1问题
*
* 1:发出查询id列表的sql
* Hibernate: select student0_.id as col_0_0_ from t_student student0_
*
* N:在依次发出根据id查询Student对象的sql
* Hibernate: select student0_.id as id1_0_, student0_.name as name1_0_,
* student0_.createTime as createTime1_0_, student0_.classesid as classesid1_0_
* from t_student student0_ where student0_.id=?
*
*/
Iterator iter = session.createQuery("from Student").iterate();
while(iter.hasNext()) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
10.不会出现N+1问题
try {
session = HibernateUtils.getSession();
session.beginTransaction();
List students = session.createQuery("from Student").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
System.out.println("---------------------------------------------");
/**
* 不会出现N+1问题
*
* 因为list操作已经将Student对象放到了一级缓存中,所以再次使用iterate操作的时候
* 它首先发出一条查询id列表的sql,在根据id到缓存中去数据,只有在缓存中找不到相应的
* 数据时,才会发出sql到数据库中查询
*
*/
Iterator iter = session.createQuery("from Student").iterate();
while(iter.hasNext()) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
11.不利用缓存,再次发出SQL语句
try {
session = HibernateUtils.getSession();
session.beginTransaction();
List students = session.createQuery("from Student").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
System.out.println("---------------------------------------------");
/**
* 再次发出查询sql
*
* 在默认情况下list每次都会向数据库发出查询对象的sql,除非配置查询缓存,所以下面的list操作
* 虽然在一级缓存中已经有了对象数据,但list默认情况下不会利用缓存,而再次发出sql
*
* 默认情况下,list会向缓存中放入数据,但不会利用数据
*
*/
students = session.createQuery("from Student").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
12.条件查询
(1)使用?
//可以拼字符串
List students = session.createQuery("select s.id, s.name from Student s where s.name like '%1%'").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
也可以这样写:
List students = session.createQuery("select s.id,s.name from Student s where s.name like ?)
.setPremeter(0,"%"+condition+"%")
.list();
(2)使用 :参数
//使用 :参数名称 的方式传递参数值
List students = session.createQuery("select s.id, s.name from Student s where s.name like :myname")
.setParameter("myname", "%1%")
.list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
(3)支持in
//支持in,需要使用setParameterList进行参数传递
List students = session.createQuery("select s.id, s.name from Student s where s.id in(:myids)")
.setParameterList("myids", new Object[]{1, 2, 3, 4, 5})
.list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
(4)带有时间参数
//查询2008年2月创建的学生
List students = session.createQuery("select s.id, s.name from Student s where date_format(s.createTime, '%Y-%m')=?")
.setParameter(0, "2008-02")
.list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
(5)
session.beginTransaction();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//查询2008-01-10到2008-02-15创建的学生
List students = session.createQuery("select s.id, s.name from Student s where s.createTime between ? and ?")
.setParameter(0, sdf.parse("2008-01-10 00:00:00"))
.setParameter(1, sdf.parse("2008-02-15 23:59:59"))
.list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
session.getTransaction().commit();
13.分页
session.beginTransaction();
List students = session.createQuery("from Student")
.setFirstResult(1)
.setMaxResults(2)
.list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
session.getTransaction().commit();
14.链接查询
(1) List students = session.createQuery("select c.name, s.name from Student s inner join s.classes c").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
(2) List students = session.createQuery("select c.name, s.name from Classes c left join c.students s").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
(3) List students = session.createQuery("select c.name, s.name from Classes c right join c.students s").list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + "," + obj[1]);
}
15.随机日期
student.setCreateTime(randomDate("2008-01-01","2008-03-01"));
/**
* 获取随机日期
* @param beginDate 起始日期,格式为:yyyy-MM-dd
* @param endDate 结束日期,格式为:yyyy-MM-dd
* @return
*/
private static Date randomDate(String beginDate,String endDate){
try {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date start = format.parse(beginDate);
Date end = format.parse(endDate);
if(start.getTime() >= end.getTime()){
return null;
}
long date = random(start.getTime(),end.getTime());
return new Date(date);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private static long random(long begin,long end){
long rtn = begin + (long)(Math.random() * (end - begin));
if(rtn == begin || rtn == end){
return random(begin,end);
}
return rtn;
}
16.DML风格
/**
* DML风格的操作
* @author Administrator
*
*/
public class DMLQueryTest extends TestCase {
public void testQuery1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
session.createQuery("update Student s set s.name=? where s.id < ?")
.setParameter(0, "李四")
.setParameter(1, 5)
.executeUpdate();
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
}
发表评论
-
统计代码行数
2013-11-20 10:47 519public class ReadFile { ... -
常用验证方法
2013-11-20 10:44 5161.正则表达式 /** ... -
DateUtil
2013-11-20 10:42 679DateUtil 1.取得当前日期“年”,并判断此年 ... -
set相关
2013-11-20 10:41 517ArrayList 允许快速随机存取,相比于Link ... -
集合排序
2013-11-20 10:38 958集合排序(BigDecimal、根据对象某个属性排序) ... -
编程良好习惯
2013-03-22 21:38 674转: 对于面向对象编程语言,有5个基本原则能帮助你写出整洁 ... -
关于dll文件的生成以及找不到jni.h的解决办法
2010-08-02 18:48 1702来源:http://jzgl-javaeye.iteye.co ... -
java 产生随机数的几种方式
2010-07-12 12:57 1318一.在j2se里我们可以使用Math.random()方法来产 ... -
关于session的详细解释
2010-07-04 15:24 887一、术语session 在我的经验里,session这个 ... -
java文件操作
2010-06-28 13:36 792import java.io.*; public cl ... -
mysql 删除多余重复记录
2010-03-25 00:30 1655(stu表中的名字(name)是重复的) 问题: 在Mys ... -
java基本数据类型
2010-03-10 18:38 1813(写了很多 Java程序 ... -
proxool连接池
2009-12-18 10:50 707proxool 在hibernate.cfg.xml中加入 & ... -
tomcat虚拟主机配置
2009-11-13 15:41 620tomcat:虚拟主机配置 在server.xml中 &l ... -
struts国际化手动切换
2009-11-11 16:19 1304当页面请求时,把本地信息(主要为Accept-Language ... -
JAVA中如何用接口实现多继承和多态
2009-11-07 17:57 932JAVA里没有多继承,一 ... -
servlet,jsp乱码及解决方案
2009-11-07 11:40 2372MIME多用途Internet邮件扩 ... -
jstl数字格式
2009-07-22 11:45 1062<fmt:formatNumber value=&quo ... -
jstl日期
2009-07-22 11:43 1571<%@ page language="java ... -
mysql
2009-07-13 08:48 1096备份数据库:在mysql的bin目录下, C:\Progra ...
相关推荐
这些代码小集展示了如何利用HTML和JavaScript来创建各种网页交互效果。通过理解和应用这些代码,开发者可以提升网站的动态性和互动性,为用户提供更丰富的浏览体验。同时,需要注意的是,一些特效如弹窗和自动滚动...
在编写CSS代码时,有一些常用的代码片段频繁出现,它们能够帮助开发者提高编码效率,并解决常见的页面布局问题。下面,我将对一些常用的CSS代码片段进行详细的说明。 首先是关于换行的代码,换行在处理文本内容时是...
代码如下: <style>@media print{body{display:none}}</style> <%–禁止截屏,通过清除剪切板实现 Start–%> [removed] function clearShearPlate() { try { if (clipboardData.getData(“Text”)...
【知识小集微信小程序】 微信小程序是腾讯公司推出的一种轻量级的应用开发平台,它允许开发者在微信内创建原生体验的应用程序,无需通过应用商店即可实现快速分发和使用。这个“知识小集微信小程序”很可能是为分享...
GAS汇编指令小集GAS汇编指令小集GAS汇编指令小集GAS汇编指令小集GAS汇编指令小集GAS汇编指令小集GAS汇编指令小集
在`ServiceTest`中,我们可能会看到如下代码片段: ```java public class MyService extends IntentService { public MyService() { super("MyService"); } @Override protected void onHandleIntent(Intent ...
DWR可以与Spring、Struts、Hibernate等框架集成,实现更复杂的Web应用。结合jQuery或其他JavaScript库,可以构建出更丰富的用户界面。 总的来说,“DWR实用例子小集”为开发者提供了一个实践DWR功能的平台,通过...
FreeRTOS资料小集.CHM
"swift-iOS知识小集"旨在将这些碎片化的信息整合起来,方便开发者快速学习和回顾。以下是一些可能包含在该压缩包中的知识点: 1. **枚举与关联值**:Swift中的枚举不仅限于定义一组相关的常量,还能关联各种类型的...
内置一个基于数据库的代码生成器rapid-generator,极易进行二次开发 struts1,struts2的零配置 spring集成及加强,自动搜索hibernate的entity annotation class 集成动态构造sql的工具:rapid-xsqlbuilder 集成...
对联基础知识小集.pdf
6. **框架与库**:如Spring框架、MyBatis、Hibernate等,以及如何集成和使用它们。 最后,从文件名"04-Java类图书18-26.doc"来看,这可能是一系列Java书籍的第18到26章的内容,这些章节可能涵盖了从基础到进阶的多...
【Java面试问题小集】 1. **String 与 StringBuffer 的区别** String 是不可变对象,每次修改都会创建新的对象,而 StringBuffer 是可变对象,修改时不会创建新对象,因此在频繁修改字符串的情况下,使用 ...
资料集中的CHM文件,即“FreeRTOS资料小集”,可能包含了关于FreeRTOS的详细教程、API参考、示例代码和案例分析等内容。CHM是Microsoft的 Compiled HTML Help 文件格式,它将HTML文档合成为单个文件,便于离线阅读和...
最新浪漫温馨短信小集.doc
小学一年级期末教师评语小集.pdf
我的图标,收集的美丽html图标,值得收藏,准备好好收藏,以备后续使用
【ACM常用算法小集】是针对ACM(国际大学生程序设计竞赛)中常见的算法问题进行的总结,这些算法对于初学者来说具有很高的学习价值。下面将详细解释这些算法: 1. **组合数计算**:这是一个经典的组合数学问题,...