• hibernate


    1. package com.tudou.hibernates.t1;  
    2.   
    3. import java.util.List;  
    4.   
    5. import org.hibernate.Query;  
    6. import org.hibernate.Session;  
    7. import org.hibernate.SessionFactory;  
    8. import org.hibernate.Transaction;  
    9. import org.hibernate.cfg.Configuration;  
    10.   
    11. public class TestGetHql {  
    12.     private static Configuration cfg = new Configuration().configure();  
    13.     private static SessionFactory fac = cfg.buildSessionFactory();  
    14.     private static Session son = fac.openSession();  
    15.   
    16.     // hql普通查询 Card为类名,不是表名,可以写全路径  
    17.     public static void from() {  
    18.         String hql = "from Card";  
    19.         Query query = son.createQuery(hql);  
    20.         List<Card> cards = query.list();  
    21.         for (Card c : cards) {  
    22.             System.out.println(c.getCardName());  
    23.             System.out.println(c.getCreateDate());  
    24.         }  
    25.     }  
    26.   
    27.     // 条件查询 where  
    28.     public static void where() {  
    29.         String hql = "from Card where cardName='三国无双'";  
    30.         Query query = son.createQuery(hql);  
    31.         List<Card> cardss = query.list();  
    32.         for (Card c : cardss) {  
    33.             System.out.println(c.getCardName());  
    34.             System.out.println(c.getCreateDate());  
    35.         }  
    36.     }  
    37.   
    38.     // 模糊查询 like  
    39.     public static void like() {  
    40.         String hql = "from Card where cardName like '%世%'";  
    41.         Query query = son.createQuery(hql);  
    42.         List<Card> cards = query.list();  
    43.         for (Card c : cards) {  
    44.             System.out.println(c.getCardName());  
    45.             System.out.println(c.getCreateDate());  
    46.         }  
    47.     }  
    48.   
    49.     // 逻辑条件查询 >  
    50.     public static void gt() {  
    51.         String hql = "from Card c where c.createDate >'2011-08-08'";  
    52.         Query query = son.createQuery(hql);  
    53.         List<Card> cards = query.list();  
    54.         for (Card c : cards) {  
    55.             System.out.println(c.getCardName());  
    56.             System.out.println(c.getCreateDate());  
    57.         }  
    58.     }  
    59.   
    60.     // 逻辑条件查询 between and 此处用了别名,省略了as关键字  
    61.     public static void between() {  
    62.         String hql = "from Card c where c.createDate between '2011-08-08' and '2022-11-11'";  
    63.         Query query = son.createQuery(hql);  
    64.         List<Card> cards = query.list();  
    65.         for (Card c : cards) {  
    66.             System.out.println(c.getCardName());  
    67.             System.out.println(c.getCreateDate());  
    68.         }  
    69.     }  
    70.   
    71.     // 逻辑多条件查询and  
    72.     public static void and() {  
    73.         String hql = "from Card c where c.createDate between '2011-01-08' and '2022-11-11' and c.cardName like '%世%'";  
    74.         Query query = son.createQuery(hql);  
    75.         List<Card> cards = query.list();  
    76.         for (Card c : cards) {  
    77.             System.out.println(c.getCardName());  
    78.             System.out.println(c.getCreateDate());  
    79.         }  
    80.     }  
    81.   
    82.     // update 更新  
    83.     public static void update() {  
    84.         String hql = "update Card as c set c.createDate='2011-03-03' where c.cardType.cardTypeId=3";  
    85.         Query query = son.createQuery(hql);  
    86.         int num = query.executeUpdate();  
    87.         System.out.println(num + "行被更新。。。");  
    88.     }  
    89.   
    90.     // delete删除  
    91.     public static void delete() {  
    92.         String hql = "delete from  Card as c where c.createDate='2011-03-04'";  
    93.         Query query = son.createQuery(hql);  
    94.         int num = query.executeUpdate();  
    95.         System.out.println(num + "行被删除。。。");  
    96.     }  
    97.   
    98.     // 单个属性查询  
    99.     public static void simpleProperty() {  
    100.         String hql = "select c.cardName from  Card as c where c.cardType.cardTypeId=1";  
    101.         Query query = son.createQuery(hql);  
    102.         List<String> name = query.list();  
    103.         for (String s : name) {  
    104.             System.out.println(s);  
    105.         }  
    106.     }  
    107.   
    108.     // 多个属性查询 其中cardTypeName直接通过card对象的cardType对象获得,省去了使用普通的sql语句必须多表连接查询的麻烦  
    109.     public static void mulProperty() {  
    110.         String hql = "select c.cardName,c.cardType.cardTypeName,c.createDate from  Card as c where c.cardType.cardTypeId=1";  
    111.         Query query = son.createQuery(hql);  
    112.         List<Object[]> obj = query.list();  
    113.         for (Object[] o : obj) {  
    114.             System.out.println(o[0] + " " + o[1] + " " + o[2]);  
    115.         }  
    116.     }  
    117.   
    118.     // 多个属性查询 面向对象方式  
    119.     public static void orientedObject() {  
    120.         String hql = "select new Card(c.cardName,c.createDate) from  Card as c";  
    121.         Query query = son.createQuery(hql);  
    122.         List<Card> cards = query.list();  
    123.         for (Card c : cards) {  
    124.             System.out.println(c.getCardName() + " " + c.getCreateDate());  
    125.         }  
    126.     }  
    127.   
    128.     // 函数查询  
    129.     public static void function() {  
    130.         String hql = "select count(*),max(c.createDate) from  Card as c";  
    131.         Query query = son.createQuery(hql);  
    132.         List<Object[]> oo = query.list();  
    133.         for (Object[] o : oo) {  
    134.             System.out.println("总记录数:" + o[0] + " 最新日期为:" + o[1]);  
    135.         }  
    136.     }  
    137.   
    138.     // 排序  
    139.     public static void orderBy() {  
    140.         String hql = "from  Card as c order by c.createDate desc";  
    141.         Query query = son.createQuery(hql);  
    142.         List<Card> cards = query.list();  
    143.         for (Card c : cards) {  
    144.             System.out.println(c.getCardName() + " " + c.getCreateDate());  
    145.         }  
    146.     }  
    147.   
    148.     // 分组  
    149.     public static void groupBy() {  
    150.         String hql = "from  Card as c group by c.cardType.cardTypeId";  
    151.         Query query = son.createQuery(hql);  
    152.         List<Card> cards = query.list();  
    153.         for (Card c : cards) {  
    154.             System.out.println(c.getCardName() + " " + c.getCreateDate());  
    155.         }  
    156.     }  
    157.   
    158.     // 单个对象查询 呵呵,奇怪吧,对象可以查询出来  
    159.     public static void simpleObject() {  
    160.         String hql = "select c.cardType from  Card as c";  
    161.         Query query = son.createQuery(hql);  
    162.         query.setMaxResults(1);// 必须在查询之前指定,使其返回单个对象  
    163.         CardType cardType1 = (CardType) query.uniqueResult();  
    164.         System.out.println(cardType1.getCardTypeName() + " "  
    165.                 + cardType1.getCreateDate());  
    166.     }  
    167.   
    168.     // 按照命令行参数 格式为: :参数名  
    169.     public static void parameter() {  
    170.         String hql = "select c.cardType from  Card as c where c.cardType.cardTypeId=:id";  
    171.         Query query = son.createQuery(hql);  
    172.         query.setParameter("id", 1);  
    173.         query.setMaxResults(1);// 必须在查询之前指定,使其返回单个对象  
    174.         CardType cardType = (CardType) query.uniqueResult();  
    175.         System.out.println(cardType.getCardTypeName() + " "  
    176.                 + cardType.getCreateDate());  
    177.     }  
    178.   
    179.     // 按照参数位置 从0开始  
    180.     public static void parameterPosition() {  
    181.         String hql = "select c.cardType from  Card as c where c.cardType.cardTypeId=?";  
    182.         Query query = son.createQuery(hql);  
    183.         query.setParameter(0, 1);  
    184.         query.setMaxResults(1);// 必须在查询之前指定,使其返回单个对象  
    185.         CardType cardType = (CardType) query.uniqueResult();  
    186.         System.out.println(cardType.getCardTypeName() + " "  
    187.                 + cardType.getCreateDate());  
    188.     }  
    189.   
    190.     // 多个参数  
    191.     public static void mulParameter() {  
    192.         String hql = "from  Card as c where c.cardType.cardTypeId in (3,2)";  
    193.         Query query = son.createQuery(hql);  
    194.         // query.setParameterList("id", new Object[]{1,2});  
    195.         List<Card> cards = query.list();  
    196.         for (Card o : cards) {  
    197.             System.out.println(o.getCardName());  
    198.         }  
    199.     }  
    200.   
    201.     // inner join 查询结果为多个对象的集合  
    202.     public static void innerJoin() {  
    203.         String hql = "from  Card as c inner join c.cardType";  
    204.         Query query = son.createQuery(hql);  
    205.         List<Object[]> cards = query.list();  
    206.         for (Object[] o : cards) {  
    207.             System.out.println(((Card) o[0]).getCardName() + " "  
    208.                     + ((CardType) o[1]).getCreateDate());  
    209.         }  
    210.     }  
    211.   
    212.     // leftJoin 查询结果为多个对象的集合  
    213.     public static void leftJoin() {  
    214.         String hql = "from  CardType as c left join c.cards";  
    215.         Query query = son.createQuery(hql);  
    216.         List<Object[]> cards = query.list();  
    217.         for (Object[] o : cards) {  
    218.             // 由于保存卡片时在多的一方card进行操作,使用了级联。但手动插入的cardType可能没有相应的卡片  
    219.             if (o[1] != null) {// 当卡片不为空时  
    220.                 System.out.println(((CardType) o[0]).getCardTypeName() + " "  
    221.                         + ((Card) o[1]).getCardName());  
    222.             } else {  
    223.                 System.out.println(((CardType) o[0]).getCardTypeName()  
    224.                         + " 没有相应的卡片");  
    225.             }  
    226.         }  
    227.     }  
    228.   
    229.     // rightJoin 查询结果为多个对象的集合  
    230.     public static void rightJoin() {  
    231.         String hql = "from  CardType as c right join c.cards";  
    232.         Query query = son.createQuery(hql);  
    233.         List<Object[]> cards = query.list();  
    234.         // 插入时保证了每张卡片的类型,所以此处不用判断卡片类型是否为空  
    235.         for (Object[] o : cards) {  
    236.             System.out.println(((CardType) o[0]).getCardTypeName() + " "  
    237.                     + ((Card) o[1]).getCardName());  
    238.         }  
    239.     }  
    240.   
    241.     // 使用子查询  
    242.     public static void childSelect() {  
    243.         String hql = "from  CardType as c where (select count(*) from c.cards)>0";  
    244.         Query query = son.createQuery(hql);  
    245.         List<CardType> cards = query.list();  
    246.         for (CardType c : cards) {  
    247.             System.out.println(c.getCardTypeName() + " " + c.getCreateDate());  
    248.         }  
    249.     }  
    250.   
    251.     // 程序入口  
    252.     public static void main(String[] args) {  
    253.         // 测试方法  
    254.         Transaction tr = son.beginTransaction();  
    255.   
    256.         // update();  
    257.         mulParameter();  
    258.         tr.commit();  
    259.         son.close();  
    260.         fac.close();  
    261.     }  
    262. }  
    [java] view plain copy
     
     print?
    1.   

    hibernate投影查询:

    String hql="select u.id,u.name from user as u"  //1方法

    String hql="select new com.mypack.User2(u.id,u.name) from User as u "  //2方法

    Iterator userHQL= session.createQuery(hql).iterate();

    while (userHql.hasNext()) {
       User user=(User)userHql.next();
       

       Object[] row=(Object[]) userHql.next();
       int id=(Integer)row[0];
       String nameString =(String)row[1];
       System.out.print(id+" "+nameString);
       
       //User2 user2=(User2) userHql.next();
       //System.out.println(user2.getId()+" "+user2.getName());

      } 

    --------------------------------------------------

    package com.mypack;

    public class User2 {
     private int id;
     private String name;
     public User2(int id,String nameString){
      this.id=id;
      this.name=nameString;
     }

        ......省略了属性的get,set方法

    }

  • 相关阅读:
    gRPC错误码 http状态码 provide your APIs in both gRPC and RESTful style at the same time
    rust
    lz4 1
    剖析美团内部所采用的网站压力测试方案
    【NOIP2002提高组T4】矩形覆盖-DFS剪枝
    【NOIP2002提高组T4】矩形覆盖-DFS剪枝
    【POJ2777】Count Color-线段树区间更新
    【POJ2777】Count Color-线段树区间更新
    【NOIP2005提高组T3】篝火晚会-置换群
    【NOIP2005提高组T3】篝火晚会-置换群
  • 原文地址:https://www.cnblogs.com/poilk/p/6806458.html
Copyright © 2020-2023  润新知