hibernate

Posted 祥福有梦想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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] + "\t" + o[1] + "\t" + 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() + "\t" + 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] + "\t最新日期为:" + 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() + "\t" + 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() + "\t" + 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() + "\t"  
  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() + "\t"  
  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() + "\t"  
  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() + "\t"  
  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() + "\t"  
  221.                         + ((Card) o[1]).getCardName());  
  222.             } else {  
  223.                 System.out.println(((CardType) o[0]).getCardTypeName()  
  224.                         + "\t没有相应的卡片");  
  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() + "\t"  
  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() + "\t" + 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+"\t"+nameString);
   
   //User2 user2=(User2) userHql.next();
   //System.out.println(user2.getId()+"\t\t"+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方法

}
















以上是关于hibernate的主要内容,如果未能解决你的问题,请参考以下文章

HibernateHibernate配置与sessiontransaction

hibernateHibernate SQL 方言(hibernate.dialect)

HibernateHibernate的多表查询

hibernateHibernate中get()和load()的区别

HibernateHibernate中使用延迟加载应该注意的事项

hibernateHibernate中save, saveOrUpdate, persist, merge, update 区别