关于hibernate的一些操作



import java.math.BigInteger;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import com.mysql.jdbc.jdbc2.optional.SuspendableXAConnection;

import bean.Category;
import bean.Product;
import bean.User;

public class Test {
    public static void main(String[] args) {
        // /hibernate.cfg.xml not found /bean/product.hbm.xml not found
        SessionFactory sf = new Configuration().configure().buildSessionFactory();
        Session s = sf.openSession();
        s.beginTransaction();
//        Session s1 = sf.openSession();
//        s1.beginTransaction();
//        s1.get(User.class, 3);
//        Session s2 = sf.openSession();
//        s2.beginTransaction();
//        s2.get(User.class, 3);
        //add
//        Product p = new Product();
//        System.out.println("瞬时状态");
//        p.setName("product gao");
//        System.out.println(p.getId());
//        s.save(p);        
//        System.out.println(p.getId());
//        System.out.println("持久状态");
        //delete
//        Product p =  (Product) s.get(Product.class, 16);    
//        s.delete(p);
        
//        Product p = new Product();
//        p.setId(17);
//        s.delete(p);
        //update
//        Product p = (Product) s.load(Product.class, 16);    
//        System.out.println(1);
//        System.out.println(p.getName());
//        System.out.println(2);
//        相同的加载(16),不会再执行sql语句,一级缓存,放在session里面
//        Product pa = (Product) s.get(Product.class, 16);    

//        System.out.println(pa.getName());
//        System.out.println(3);
//        p.setName("大哥");
//        s.update(p);
        //4种查询方式
//1
        Query q = s.createQuery("from Product p");
        List<Product> ps = q.list();
        for (Product p : ps) {
            System.out.println(p.getName());
        }
//2
//        Criteria c =
//                s.createCriteria(Product.class);
//        c.addOrder(Order.desc("id"));
//        
//        //分页        
//        c.setFirstResult(3);
//        c.setMaxResults(3);
//        List<Product> ps = c.list();
//        for (Product p : ps) {
//            System.out.println(p.getName());
//        }
        //模糊查询
//        Criteria c =
//                s.createCriteria(Product.class);
//        Category ct = (Category) s.get(Category.class , 2);
//        
//        c.add(Restrictions.eq("c", ct));
//        c.add(Restrictions.like("name", "%s%"));
//        
//        List<Product> ps = c.list();
//        for (Product p : ps) {
//            System.out.println();
//            System.out.println(p.getName());
//        }
//3
//        SQLQuery q = s.createSQLQuery("select count(*) from product p");
//        List<BigInteger> l = q.list();//index 1
//        int count = l.get(0).intValue();
//        System.out.println(count);
//        SessionFactory sf = new Configuration().configure().buildSessionFactory();
//        Session s = sf.openSession();
//        s.beginTransaction();
//        SQLQuery q = s.createSQLQuery("select p.cid,p.name,c.id,c.name from Product p left join Category c on p.cid=c.id");
//        List<Object[]>l = q.list();
//        for (Object[] ol : l) {
//            System.out.print(ol[0]+"\t");
//            System.out.print(ol[1]+"\t");
//            System.out.print(ol[2]+"\t");
//            System.out.print(ol[3]+"\t");
//            System.out.println();
//        }
        
        //脱离关系方式一    
//        Category cg = (Category) s.get(Category.class, 2);
//        Set<Product> ps = cg.getProducts();//列出的是category id为2的所有商品,不需要cid    
//        for (Product pr : ps) {
//            if(-1!=pr.getName().indexOf("s")){
//                pr.setC(null);
//            }
//        }
//        s.update(cg);
        //脱离关系方式二
//        Category cg = (Category) s.get(Category.class, 2);
//        Set<Product> ps = cg.getProducts();//列出的是category id为2的所有商品,不需要cid    
//        Product pDelete = null;
//        for (Product pr : ps) {
//            if(-1!=pr.getName().indexOf("s")){
//                pDelete = pr;
//            }
//        }
//        ps.remove(pDelete);
//        s.update(cg);
        //many to one
//        Category c = (Category) s.get(Category.class,2);
//        Product p = (Product) s.get(Product.class, 13);
//        p.setC(c);
//        s.update(p);
        /**前面两种脱离方法都进行了查询(通过Set),但是由于Set是无序的且没有分页效果
         *
         *,故很少使用,下面这种方法才适用
         */
//        Query q = s.createQuery("from Product p where p.c =:c order by p.id");
//        q.setInteger("c", 3);
//        
//        List<Product> ps = q.list();
//        for (Product p : ps) {
//            System.out.println(p.getName());
//        }
        //模糊查询
//        Query q = s.createQuery("from Product p where p.name like:name");
//        q.setString("name", "%s%");
//        
//        List<Product> ps = q.list();
//        for (Product p : ps) {
//            System.out.println();
//            System.out.println(p.getName());
//        }
        
//        Product p = (Product) s.get(Product.class, 13);
//        Set us = p.getUsers();
//        User ua = (User) s.get(User.class,10);
//        User ub = (User) s.get(User.class,11);
//        us.add(ua);
//        us.add(ub);
//        s.update(p);
//        
//        User u = (User) s.get(User.class,10);
//        Set ps = u.getProducts();
//        Product pc = (Product) s.get(Product.class, 13);
//        Product pd = (Product) s.get(Product.class, 11);
//        ps.add(pc);
//        ps.add(pd);
//        s.update(u);
        /** get  和 load 方法的区别
         *  load 延迟加载(lazy load),用的时候才调用sql语句  当查询为空时,load抛出异常
         *  get  立即调用sql语句。                当查询为空时,get不报异常,只是返回空
         */
//        User ua = (User) s.load(User.class,10);
//        System.out.println(ua.getName());
//        
//        User ub = (User) s.get(User.class,11);
//        System.out.println(ub.getName());
        
        //瞬时状态","持久状态","脱管状态"
        
//        SessionFactory sf = new Configuration().configure().buildSessionFactory();    
//        Session s1 = sf.openSession();
        //opensession每次新建一个session,getcurrentsession跟着线程走,如果在主线程中多次调用,也会只有一个session
//        s1.beginTransaction();
//        User ub = (User) s1.get(User.class,11);
//        
//        Session s2 = sf.openSession();
//        s2.beginTransaction();
//        User ua = (User) s2.get(User.class,11);
//        s1.close();        
//        s2.close();
//        System.out.println(p.getId());
        /**
         *
         * getcurrentsession跟着线程走,如果在主线程中多次调用,也会只有一个session
         */
//        SessionFactory sf = new Configuration().configure().buildSessionFactory();
//        final Session s = sf.getCurrentSession();
//        final Session s1 = sf.getCurrentSession();
//
//        Thread t = new Thread(){
//            public void run(){
//                s.beginTransaction();
//                s.get(User.class, 3);
//                s.getTransaction().commit();
                s.close();
//            }
//        };
//        t.start();
//        Thread t1 = new Thread(){
//            public void run(){
//                s1.beginTransaction();
//                s1.get(User.class, 3);
//                s1.getTransaction().commit();
                s1.close();
//            }
//        };
//        t1.start();
        
//        SessionFactory sf = new Configuration().configure().buildSessionFactory();
//        Session s1 = sf.openSession();//增删改时才需要在事物里面操作,get不需要事物
//        s1.beginTransaction();
//        User u1 = (User) s1.get(User.class, 3);
//        System.out.println(u1);        
//        Session s2 = sf.getCurrentSession();
//        s2.beginTransaction();
//        User u2 = (User) s2.get(User.class, 3);//增删改,get都需要在事物里面操作,并且在提交事物后,自动关闭session
//        System.out.println(u2);
//        s1.getTransaction().commit();
//        s1.close();
//        System.out.println("脱管状态");            //数据库关闭了
//        sf.close();
        
//        Session s2 = sf.getCurrentSession();
//        s2.beginTransaction();
//        
//        
//        
//
//        List l = s.createQuery("from User").list();
//        System.out.println("1");
//        User u2 = (User) s2.get(User.class, 4);//增删改,get都需要在事物里面操作,并且在提交事物后,自动关闭session
        
        //因为一级缓存,已经将user方法了session
//        List li = s.createQuery("from User where id =9").list();//在执行一次sql语句;下面通过n+1减少执行次数
//        User u2 = (User) s2.get(User.class, 9);
        
//        Iterator it = s2.createQuery("from User").iterate();
//        while(it.hasNext()){
//            User u3 = (User) it.next();
//            u3.getName();
//        }
        
        s.getTransaction().commit();
        System.out.println("脱管状态");            //数据库关闭了
        sf.close();
        //lazy = "false"延迟加载关闭,将执行所有的sql语句
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值