Hibernate HQL

1.     HQL

HQLHibernate Query Language)提供更加丰富灵活、更为强大的查询能力

针对于项目中实体类,在查询的时候,from 后面必须是实体类.自然要遵循类的命名规则,区分大小写。

1.1.查询

/**

        *

        * @Description:查询所有数据 注意单词别写错!

        * @author mengqx

        * @date 2017年8月31日

        */

       @Test

       public void getAll() {

              // 创建session对象

              Session session = HibernateUtils.getSession();

              // 通过createQuery方法取得所有数据。每次去查询的时候去调用了无参构造函数。

              // oracle 数据库中正常查询数据的sql语句select * from stu order by id;

              // 如果单词stu为小写的话。则会出现如下错误stu is not mapped 没有映射。。。

              // 数据库跟实体类的映射关系。。。。

              List<Stu> list = session.createQuery("select new Stu(id,name,pwd) from Stu order by id").list();

 

              for (Stu stu : list) {

                     System.out.println(stu);

              }

              session.close();

       }

 

       @Test

       public void getIdAndName() {

              // 创建session对象

              Session session = HibernateUtils.getSession();

              // 查询某几个字段通过观察getAll说明在走查询的时候,走的应该是构造函数。

              // no appropriate constructor in class: com.bjsxt.pojo.Stu

              // 通过看此异常,可以为Stu类添加一个构造器

              List<Stu> list = session.createQuery("select new Stu(id,name) from Stu order by id").list();

 

              for (Stu stu : list) {

                     System.out.println(stu);

              }

              session.close();

       }

 

1.2.新增

HQL:不支持新增!

1.3.修改

@Test

       public void update() {

              Session session = HibernateUtils.getSession();

 

              Transaction transaction = session.beginTransaction();

              // 修改语句:传入参数可以是? ,? 代表占位符。给占位符传值:使用setParameter().

              // 该方法第一个参数是代表第几个问号,下标从0开始,第二个参数表示给?传入的具体值。

              // Query query = session.createQuery("update Stu set name = ? where id =

              // ?").setParameter(0, "c204").setParameter(1, 64);

              // 第二种给?传值方式使用setString() ,setInteger(). 具体使用那个一种类型是根据字段类型决定的!

              Query query = session.createQuery("update Stu set name = ? where id = ?").setString(0, "c2042").setInteger(1,

                            64);

              // query.executeUpdate();执行上述定义的修改语句。

              int result = query.executeUpdate();

 

              System.out.println(result);

              transaction.commit();

              session.close();

 

       }

 

1.4.删除

@Test

       public void delete() {

              Session session = HibernateUtils.getSession();

              Transaction transaction = session.beginTransaction();

              Query query = session.createQuery("delete from Stu where id = ?").setInteger(0,64);

              // query.executeUpdate();执行上述定义的修改语句。

              int result = query.executeUpdate();

              System.out.println(result);

              transaction.commit();

              session.close();

       }

 

1.5.模糊查询

/**

        *

        * @Description: like 模糊查询的时候,要使用|| 进行拼接。 可以使用?来代替参数。 模糊查询传值还可以使用 :变量名 :name

        * @author mengqx

        * @date 2017年8月31日

        */

       @Test

       public void like() {

              Session session = HibernateUtils.getSession();

              // oracle --- select * from stu where name like '%li%'

              // '%'+"li"+'%'

              // List<Stu> list = session.createQuery("from Stu where name like '%'||

              // ? ||'%'").setParameter(0, "li").list();

              //

              List<Stu> list = session.createQuery("from Stu where name like  '%'|| :name ||'%'").setParameter("name", "li")

                            .list();

              for (Stu stu : list) {

                     System.out.println(stu);

              }

              session.close();

       }

 

1.6.分页查询

@Test

       public void page() {

              Session session = HibernateUtils.getSession();

              // 分页查询必须有当前页,每页显示的条数

              // select * from (

              // select e.* ,rownum r from (

              // (select * from stu order by id)

              // )e where rownum <=5

              // ) where r>=1

 

              int pageIndex = 3; // 分页语句从第几条开始查:(pageIndex-1)*pageSize

              int pageSize = 3;

              List<Stu> list = session.createQuery("from Stu order by id").setFirstResult((pageIndex - 1) * pageSize)

                            .setMaxResults(pageSize).list();

              for (Stu stu : list) {

                     System.out.println(stu);

              }

              session.close();

       }

 

1.7.聚合函数应用

       @Test

       public void count() {

              Session session = HibernateUtils.getSession();

              // 聚合函数查询要使用uniqueResult();该方法返回一个Object不能强制转换成int,Integer,只有LongObject可以输出显示。

              Long result = (Long) session.createQuery("select count(*) from Stu ").uniqueResult();

              session.close();

              System.out.println(result);

       }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值