首页 > 其他分享 >hibernate------hql总结

hibernate------hql总结

时间:2023-06-04 14:33:16浏览次数:48  
标签:hibernate String color list hql ------ query name


第 14 章 HQL: Hibernate查询语言
[url]http://www.redsaga.com/hibernate-ref/3.x/zh-cn/html/queryhql.html[/url]

[url]http://kuangbaoxu.iteye.com/blog/193076[/url]
[color=red][b]1. 查询整个映射对象所有字段 [/b][/color]

//直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段     
        String hql = "from Users";     
        Query query = session.createQuery(hql);     

        List<Users> users = query.list();     
        for(Users user : users){     
            System.out.println(user.getName() + " : " + user.getPasswd() + " : " + user.getId());     
        }




输出结果为:


name1 : password1 : 1


name2 : password2 : 2


name3 : password3 : 3




[color=red][b]2.查询单个字段 [/b][/color]


//查询单个字段     
        String hql = " select name from Users";     
        Query query = session.createQuery(hql);     

        List<String> list = query.list();     
        for(String str : list){     
            System.out.println(str);     
        }



输出结果为:


name1


name2


name3




[color=red][b]3.查询其中几个字段 [/b][/color]


//查询其中几个字段     
        String hql = " select name,passwd from Users";     
        Query query = session.createQuery(hql);     
        //默认查询出来的list里存放的是一个Object数组     
        List<Object[]> list = query.list();     
        for(Object[] object : list){     
            String name = (String)object[0];     
            String passwd = (String)object[1];     

            System.out.println(name + " : " + passwd);     
        }



输出结果为:


name1 : password1


name2 : password2


name3 : password3




[color=red][b]4.修改默认查询结果(query.list())不以Object[]数组形式返回,以List形式返回[/b][/color]


引用


//查询其中几个字段,添加new list(),注意list里的l是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是List集合了   
        String hql = " select new list(name,passwd) from Users";   
        Query query = session.createQuery(hql);   
        //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是List集合了   
        List<List> list = query.list();   
        for(List user : list){   
            String name = (String)user.get(0);   
            String passwd = (String)user.get(1);   

            System.out.println(name + " : " + passwd);   
        }



/**


输出结果为:


name1 : password1


name2 : password2


name3 : password3


*/



[color=red][b]5.修改默认查询结果(query.list())不以Object[]数组形式返回,以Map形式返回 [/b][/color]


//查询其中几个字段,添加new map(),注意map里的m是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了     
        String hql = " select new map(name,passwd) from Users";     
        Query query = session.createQuery(hql);     
        //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是Map集合了     
        List<Map> list = query.list();     
        for(Map user : list){     
            //一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值     
            //如果将hql改为:String hql = " select new map(name as username,passwd as password) from Users";,那么key将不是字符串0,1,2...了,而是"username","password"了     
            String name = (String)user.get("0");//get("0");是get(key),注意:0,1,2...是字符串,而不是整形     
            String passwd = (String)user.get("1");     

            System.out.println(name + " : " + passwd);     
        }



/**


输出结果为:


name1 : password1


name2 : password2


name3 : password3


*/



[color=red][b]6.修改默认查询结果(query.list())不以Object[]数组形式返回,以Set形式返回[/b][/color],但是因为Set里是不允许有重复的元素,所以:username和password的值不能相同。只需将hql改为:

String hql = " select new set(name,passwd) from Users";



[color=red][b]7.修改默认查询结果(query.list())不以Object[]数组形式返回,以自定义类型返回[/b][/color]



自定义类:


package com.domain;     

public class MyUser {     

    private String username;     
    private String password;     
//因为:String hql = " select new  com.domain.MyUser(name,passwd) from Users";所以必须要有接受2个参数的构造函数     
    public MyUser(String username,String password){     
        this.username = username;     
        this.password = password;     
    }     

    public String getUsername() {     
        return username;     
    }     
    public void setUsername(String username) {     
        this.username = username;     
    }     
    public String getPassword() {     
        return password;     
    }     
    public void setPassword(String password) {     
        this.password = password;     
    }     


}



//通过query.list()出来的list里存放的不再是默认的Object数组了,而是自定义的类MyUser,必须加包名,String hql = "from Users";中的Users类也是必须加包名的,但是因为再Users.hbm.xml里<hibernate-mapping auto-import="true"> auto-import默认值为true(所以auto-import属性也可以不写),自动导入了     
        String hql = " select new  com.domain.MyUser(name,passwd) from Users";     
        Query query = session.createQuery(hql);     
        //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是MyUser对象了     
        List<MyUser> myUsers = query.list();     
        for(MyUser myUser : myUsers){     
            String name = myUser.getUsername();     
            String passwd = myUser.getPassword();     
            System.out.println(name + " : " + passwd);     
        }



/**


输出结果为:


name1 : password1


name2 : password2


name3 : password3


*/




[color=red][b]8:条件查询 [/b][/color]


//条件查询,参数索引值从0开始,索引位置。通过setString,setParameter设置参数     
        String hql = "from Users where name=? and passwd=?";     
        Query query = session.createQuery(hql);     
        //第1种方式     
//      query.setString(0, "name1");     
//      query.setString(1, "password1");     
        //第2种方式     
        query.setParameter(0, "name1",Hibernate.STRING);     
        query.setParameter(1, "password1",Hibernate.STRING);     
        List<Users> list = query.list();     
        for(Users users : list){     
            System.out.println(users.getId());     
        }



//条件查询,自定义索引名(参数名):username,:password.通过setString,setParameter设置参数     
        String hql = "from Users where name=:username and passwd=:password";     
        Query query = session.createQuery(hql);     
        //第1种方式     
//      query.setString("username", "name1");     
//      query.setString("password", "password1");     
        //第2种方式,第3个参数确定类型     
        query.setParameter("username", "name1",Hibernate.STRING);     
        query.setParameter("password", "password1",Hibernate.STRING);     
        List<Users> list = query.list();     
        for(Users users : list){     
            System.out.println(users.getId());     
        }



//条件查询,通过setProperties设置参数     
        String hql = "from Users where name=:username and passwd=:password";     
        Query query = session.createQuery(hql);     
        //MyUser类的2个属性必须和:username和:password对应     
        MyUser myUser = new MyUser("name1","password1");     
        query.setProperties(myUser);     
        List<Users> list = query.list();     
        for(Users users : list){     
            System.out.println(users.getId());     
        }



[b][color=red]9.多表查询:[/color][/b]


hql = "select new map(a.p2Name as p2Name,a.p2Remark as p2Remark, b.p1Name as p1Name) from Parenttwo a, Parentone b where a.parentone =b";
		query = session.createQuery(hql);
		list = query.list();
		for (Object obj : list) {
			Map map = (Map) obj;
			System.out.println(map.get("p2Name")+","+map.get("p2Remark")+","+map.get("p1Name"));
		}



[b][color=red]10. left join ... on[/color][/b]


hql = "select new map(a.p2Name as p2Name,a.p2Remark as p2Remark, b.p1Name as p1Name) from Parenttwo a left join a.parentone b";
hql = "select new map(a.p2Name as p2Name,a.p2Remark as p2Remark, b.p1Name as p1Name) from Parenttwo a left join a.parentone b where a.p2Name='abcd'";

标签:hibernate,String,color,list,hql,------,query,name
From: https://blog.51cto.com/u_3871599/6410611

相关文章

  • 密码工程-大素数
    任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务利用大整数库(GMP或者OpenSSL),参考《密码工程》p113伪代码实现GenerateLargePrime函数(10‘)在测试代码中产生一个在范围l=2^255至u=2^256-1内的素数。(5‘)用OpenSSL验证你产生的素数是不是正确(5’)提交......
  • google gson学习
    [color=red][b]googlegson学习[/b][/color][url]http://lyking2001.iteye.com/blog/504156[/url]Gson网址http://code.google.com/p/google-gson/[b]1.简单的处理list和map[/b]Gsongson=newGson();ListtestList=newArrayList();testList.a......
  • spring jdbcTemplate使用
    参考:springjdbcTemplate使用[url]http://log-cd.iteye.com/blog/215059[/url]SpringJdbcTemplate与事务管理学习[url]http://www.iteye.com/topic/480432[/url]SimpleJdbcTemplate在spring3.1已经过时了,我就改为使用jdbcTemplate和namedParameterJdbcOperations写sql查询......
  • P2P技术基础: 关于TCP打洞技术
    4关于TCP打洞技术建立穿越NAT设备的p2p的TCP连接只比UDP复杂一点点,TCP协议的“打洞”从协议层来看是与UDP的“打洞”过程非常相似的。尽管如此,基于TCP协议的打洞至今为止还没有被很好的理解,这也造成了对其提供支持的NAT设备不是很多。在NAT设备支持的......
  • Hibernate性能调优,优化
    Hibernate优化_Hibernate性能优化_Hibernate优化方案(上):[url]http://xiexiejiao.cn/hibernate/hibernate-performance-optimization-a.html[/url]Hibernate优化_Hibernate性能优化_Hibernate优化方案(下):[url]http://xiexiejiao.cn/hibernate/hibernate-performance-optimizati......
  • P2P UPD打洞原理
    首先先介绍一些基本概念:           NAT(NetworkAddress           Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用。NAT分为两大类,基本的NAT和NAPT(Network           Address......
  • Hibernate Tools生成Hibernate Mapping文件及PO类
    [color=red][b]本文参考[/b][/color]:HowToGenerateHibernateMappingFiles&AnnotationWithHibernateTools[url]http://www.mkyong.com/hibernate/how-to-generate-code-with-hibernate-tools/[/url]eclipse利用HibernateTools生成HibernateMap......
  • adm-jclass: 一个面向对象编程的js库
    [url]https://code.google.com/p/adm-jclass/[/url]:Ajavascriptlibrarythatallowshighlyobject-orientedapplicationprogramminginyourbrowser.介绍:[url]https://code.google.com/p/adm-jclass/wiki/jClassDocumentation[/url]jClassisa......
  • 数据库管理工具远程连接MySQL实例服务失败Host ... is not allowed to connect to thi
    MySQL社区版数据库8.0版本添加账号、分配权限、删除账号MySQL安全连接失败问题排查......
  • 代码随想录算法训练营第二十五天|216. 组合总和 III、17. 电话号码的字母组合
    【参考连接】216.组合总和III【注意】1.组合不强调元素之间的顺序。【代码】1classSolution(object):2def__init__(self):3self.res=[]4self.sum_now=05self.path=[]6defcombinationSum3(self,k,n):7......