Hibernate5.2之原生SQL查询

Hibernate5.2之原生SQL查询

一. 介绍

在上一篇博客中笔者通过代码的形式给各位读者介绍了中最重要的检索方式–HQL查询。在本博文中笔者将向各位读者介绍中的原生SQL查询Hibernate5.2之原生SQL查询,虽为原生SQL查询hibernate 原生sqlhibernate 原生sql,但是笔者认为在针对不同的数据库在分页语句的处理上做的很不错,我们不用去关心使用的是何种的数据库。本博文会沿用《.2之HQL查询》中的POJO类和配置文件,请各位看官在阅读本博文之前请先阅读该文章,本篇文章会将HQL中涉及的相关操作原封不动的全部改为SQL查询hibernate 原生sql,所以在代码上的重复度比较的高,请各位读者勿喷Hibernate5.2之原生SQL查询,那我们就直接上单元测试了。

二. 单元测试

A.获取所有的Order对象,得到一个List集合

@Testpublic void list(){    String sql = "select * from orders";    NativeQuery query = session.createNativeQuery(sql, Order.class);    List list = query.getResultList();    for(Order o : list){         System.out.println(o.getId() + "::" + o.getOrderId());    }}

B.获取Order的分页数据,得到一个List集合

/** * 虽然为原生的SQL查询,但是依然可以使用setFirstResult()和setMaxResults()方法。从而屏蔽了 * 底层数据库的差异性。 */@Testpublic void pageList(){    String sql = "select * from orders";    //setFirstResult()从0开始    Query query = session.createNativeQuery(sql, Order.class).setFirstResult(1).setMaxResults(4);    List list = query.getResultList();    for(Order o : list){         System.out.println(o.getId());    }}

C.多条件查询,返回List集合(第一种形式:索引占位符)

@Testpublic void multiCretiera(){    String sql = "select * from orders where create_time between ? and ? and order_id like ?";    Query query = session.createNativeQuery(sql, Order.class);    String beginDateStr = "2016-07-26 00:00:00";    String endDateStr = "2016-07-28 23:59:59";    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");    Date beginDate = null;    Date endDate = null;    try {         beginDate = sdf.parse(beginDateStr);         endDate = sdf.parse(endDateStr);    } catch (ParseException e) {         e.printStackTrace();    }    //分页从0开始    query.setParameter(0, beginDate).setParameter(1, endDate).setParameter(2, "%D%").setFirstResult(0).setMaxResults(1);    List list = query.getResultList();    for(Order o : list){         System.out.println(o.getOrderId() + "::" + o.getCreateTime());    }}

hibernate 原生sql

D.多条件查询,返回List集合(第二种形式:命名占位符)

hibernate 原生sql

@Testpublic void multiCretiera1(){    String sql = "select * from orders where order_id like :orderId and create_time between :beginDate and :endDate";    Query query = session.createNativeQuery(sql, Order.class);    String beginDateStr = "2016-07-26 00:00:00";    String endDateStr = "2016-07-28 23:59:59";    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");    Date beginDate = null;    Date endDate = null;    try {         beginDate = sdf.parse(beginDateStr);         endDate = sdf.parse(endDateStr);    } catch (ParseException e) {         e.printStackTrace();    }    query.setParameter("orderId", "%D%").setParameter("beginDate", beginDate).setParameter("endDate", endDate);    List list = query.getResultList();    for(Order o : list){         System.out.println(o.getId() + "::" + o.getOrderId());    }
}

hibernate 原生sql

hibernate 原生sql

E.大于条件的查询,使用索引占位符

hibernate 原生sql

@Testpublic void gt(){    String sql = "select * from orders where id > ?";    Query query = session.createNativeQuery(sql, Order.class).setParameter(0, 3);    List list = query.getResultList();    for(Order o : list){        System.out.println(o.getId() + "::" + o.getOrderId());    }}

hibernate 原生sql

F.删除操作

hibernate 原生sql

@Testpublic void delete(){    String sql = "delete from orders where id in (:idList)";     Transaction tx = session.beginTransaction();    List list = new ArrayList();    list.add(1);    list.add(2);    Query query = session.createNativeQuery(sql).setParameter("idList", list);    int i = query.executeUpdate();    System.out.println(i);    tx.commit();    session.close();}

hibernate 原生sql

G.获取某一列的值

hibernate 原生sql

@Testpublic void singleValue(){    String sql = "select order_id from orders";    Query query = session.createNativeQuery(sql);    List list = query.getResultList();    for(String str : list){        System.out.println(str);    }}

hibernate 原生sql

H.获取关联对象的结果集

hibernate 原生sql

@Testpublic void getCustomer(){    String sql = "select c.* from orders o join customer c on o.customer_id = c.id where c.id = 8";    Query query = session.createNativeQuery(sql, Customer.class);    List list = query.getResultList();    for(Customer o : list){        System.out.println(o.getId() + ";;");    }}

hibernate 原生sql

I.多列数据的查询

hibernate 原生sql

@Testpublic void getObjectArray(){    String sql = "select c.name, c.phone_number, o.order_id, o.create_time from orders o join customer c on o.customer_id = c.id";    Query query = session.createNativeQuery(sql);    List list = query.getResultList();    for(Object[] o : list){         System.out.println(o[0] + ";;" + o[1] + ";;" + o[2]);    }}

hibernate 原生sql

J.函数查询

hibernate 原生sql

@Testpublic void functionQuery(){    String sql = "select max(id), count(*) from orders";    Query query = session.createNativeQuery(sql);    Object[] obj = query.getSingleResult();    System.out.println(obj[0] + "::" + obj[1]);}

hibernate 原生sql

K.排序

hibernate 原生sql

@Testpublic void descQuery(){    String sql = "select * from orders order by id desc";    Query query = session.createNativeQuery(sql, Order.class);    List list = query.getResultList();    for(Order o : list){        System.out.println(o.getId() + "::" + o.getOrderId());    }}

hibernate 原生sql

L.右连接

hibernate 原生sql

@Testpublic void rightJoin(){    String sql = "select c.* from orders o right join customer c on o.customer_id = c.id";    Query query = session.createNativeQuery(sql, Customer.class);    List list = query.getResultList();    for(Customer c : list){        System.out.println(c.getId());    }}

hibernate 原生sql

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » Hibernate5.2之原生SQL查询

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们