EJB3Persistence开发手册-原生SQL查询(NativeSQL)

EJB3 QL对原生SQL做了非常好的支持。采用原生SQL做查询结果不但可以是象SQL中的返回列值,也可以是Entity类,甚至可以是两者的混合。

EJB3 EntityManager接口定义了多个原生SQL的产生方法。

  • public Query createNativeQuery(String sqlString);
  • public Query createNativeQuery(String sqlString, Class resultClass);
  • public Query createNativeQuery(String sqlString, String resultSetMapping);

一个简单的SQL查询:

    
     Query query = entityManager.createNativeQuery("select o.id, o.vender as vender from OrderTable");
         
     // 集合中的每个元素是一个数组,代表一行返回列值,每一个数具有2个元素,分别是id列,vender列
     List result = query.getResultList();
     Object[] row1 = (Object[])result.get(0);
                    
     


在原生SQL中使用参数和EJB3 QL中使用参数的方法一致,但只支持位置参数。

 

   
     Query query = entityManager.createNativeQuery("select o.id, o.vender as vender from OrderTable where o.id = ?1");
     query.setParameter( 1, 200 );
     
     // 集合中的每个元素是一个数组,代表一行返回列值,每一个数具有2个元素,分别是id列,vender列
     List result = query.getResultList();
     Object[] row1 = (Object[])result.get(0);
                
     

  除了象上面例子中直接返回查询结果的列值,我们可以让EJB3 Persistence运行环境将列值直接填充入一个Entity的实例,并将实例作为结果返回。

     
    
    // 我们这里将结果定义为Entity类Order的实例
    Query query = entityManager.createNativeQuery("select o.id, o.vender, o.partId from OrderTable o order by o.amount desc",
                                                  Order.class);
    // 结果集合中是Order类的实例,但Order实例只有id, vender, partId三列对应的属性变量有值,其他的变量属性为空。
    List result = query.getResultList();
    Order order1 = (Order)result.get( 0 );

转载于:https://www.cnblogs.com/tian830937/p/4942593.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值