zoukankan      html  css  js  c++  java
  • java_hibernate 框架4

    类级别查询

    @Test
    	public void func7() {
    		
    		//------------------------------------------------------------------------
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		//!---------------------------------------------------------------------
    		//关联级别查询  调用时 才加载  注意:使用懒加载时要确保,调用属性加载数据时,session还是打开的.不然会抛出异常
    		Customer c = session.load(Customer.class, 2l);
    		//无任何策略
    		Customer a = session.get(Customer.class, 2l);
    		System.out.print(c);
    		//!---------------------------------------------------------------------
    		tx.commit();
    		session.close();
    	}
    

      

    get方法:没有任何策略. 调用即立即查询数据库加载数据.  

    load方法: 应用类级别的加载策略 使用才会加载

      

    <!-- lazy 属性 决定是否延迟加载
    			 	true:延迟加载   默认
    			 	false 不延迟加载
    			 	extra 及其懒惰
    			 
    			 
    			 fetch属性:决定加载策略    使用什么类型的sql语句加载集合数据
    			 	select 默认
    			 	join 多表查询加载集合
    			 	subselect 使用子查询加载集合     
    		 -->
    		 <!-- batch-size="3"
    		 	一次抓取几个客户的联系人
    		 	批量抓取
    		  -->
    		<set name="linkMans" cascade="save-update" inverse="true" lazy="true" fetch="select">
    			<key column="lkm_cust_id"></key>
    			<one-to-many class="LinkMan"/>
    			
    		</set>
    

      

    lazy属性默认是true        查询类是返回代理对象 

    当lazy:false. load方法会与get方法没有任何区别.调用时即加载数据.

    //lazy 和 fetch 属性
    	//fetch select
    	@Test
    	public void func9() {
    		//关联级别 延迟加载
    		//lazy:true     使用时才加载集合数据
    		//fetch:select   
    		//
    		
    		//------------------------------------------------------------------------
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		//!---------------------------------------------------------------------
    		Customer c = session.load(Customer.class, 2l);
    		Set<LinkMan> linkMans = c.getLinkMans();//关联级别
    		System.out.print(linkMans);
    		//!---------------------------------------------------------------------
    		tx.commit();
    		session.close();
    		
    		//lazy:false     立即加载集合数据
    		//fetch:select   
    		
    		
    		//lazy:extra     与true 懒加载差不多       只获得集合的size 只查询集合的size
    		//fetch:select  
    		
    		
    		//fetch join 多表查询
    		//lazy:true|false|extra 失效 没有意义  都是立即加载
    		
    		
    		
    		
    		
    	}
    	
    	//fetch:subselect
    	public void func10() {
    		//子查询
    		//lazy:true     懒加载 使用才加载
    		//fetch:subselect    子查询
    		//
    		
    		//------------------------------------------------------------------------
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		//!---------------------------------------------------------------------
    		String hql = "from Customer";
    		Query query  = session.createQuery(hql);
    		List<Customer> list = query.list();
    		
    		//!---------------------------------------------------------------------
    		tx.commit();
    		session.close();
    		
    		
    		//lazy:false     立即加载
    		//fetch:subselect    子查询   立即加载以及子查询
    		
    		//lazy:extra     懒加载效果一样
    		//fetch:subselect    子查询   立即加载以及子查询
    	}
    	
    	
    	public void function1() {
    		//子查询
    		//fatch 决定加载的sql语句
    		//反查询     
    		//select 单表查询                默认
    		//join   多表查询
    		
    		//lazy 决定加载时机
    		/*false       立即加载
    		 * proxy      代理决定     默认    由一方决定        就是一放的lazy
    		 * 
    		 * 
    		 * proxy        select         使用时加载
    		 * 
    		 * false        select           全加载
    		 * 
    		 * false        join         多表查询     lazy失效      
    		 * 
    		 * proxy         join           多表查询     lazy失效   
    		 * */
    		//------------------------------------------------------------------------
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		//!---------------------------------------------------------------------
    		LinkMan lmLinkMan = session.get(LinkMan.class, 1l);
    		Customer customer = lmLinkMan.getCustomer();
    		System.out.print(customer);
    		
    		//!---------------------------------------------------------------------
    		tx.commit();
    		session.close();
    		
    		/*
    		 * no-session问题解决 扩大session的作用范围
    		 * 利用filter
    		 * 
    		 * 创建session
    		 * 
    		 * chain.dofilter(req,res);
    		 * 
    		 * 销毁session
    		 * 
    		 * 
    		 * */
    
    	}
    

      结论 用默认的就好

    HQL查询      hibernate Query Language

    public void hql() {
    		 Configuration configuration = new Configuration().configure(new File("src/hibernate.cfg.xml"));
    			
    			
    			SessionFactory sessionfactory = configuration.buildSessionFactory();
    			
    			Session session2 = sessionfactory.openSession();
    			
    			Transaction txTransaction = session2.beginTransaction();
    			
    			/*取数据list customer 所有的*/
    			String hql = "from Customer";
    			Query query = session2.createQuery(hql);
                  //不止一个值使用list()方法 即可返回一个list List<Customer> customers = query.list(); System.out.println(customers); /*提交*/ txTransaction.commit(); session2.close(); sessionfactory.close(); }

     添加where条件  使用 :变量名       来让hibernate知道这是个需要替换的变量

    public void hql_rule_include_symbol() {
    		 Configuration configuration = new Configuration().configure(new File("src/hibernate.cfg.xml"));
    			
    			
    			SessionFactory sessionfactory = configuration.buildSessionFactory();
    			
    			Session session2 = sessionfactory.openSession();
    			
    			Transaction txTransaction = session2.beginTransaction();
    			
    			/*找数据*/
    			/*HQL语句中 不可能出现数据库名      */
    			String hql2 = "from Customer where cust_id = :abc";
    			
    			Query query = session2.createQuery(hql2);
                  //替换变量 query.setParameter("abc", 1l);
                //得到唯一值 使用uniqueResult方法 Customer c = (Customer)query.uniqueResult(); System.out.println(c); /*提交*/ txTransaction.commit(); session2.close(); sessionfactory.close(); }

      分页

     @Test
    	 public void hql_page() {
    		 Configuration configuration = new Configuration().configure(new File("src/hibernate.cfg.xml"));
    			
    			
    			SessionFactory sessionfactory = configuration.buildSessionFactory();
    			
    			Session session2 = sessionfactory.openSession();
    			
    			Transaction txTransaction = session2.beginTransaction();
    			
    			/*取数据*/
    			String hql = "from Customer";
    			
    			Query query = session2.createQuery(hql);
                  //设置第几个开始
    query.setFirstResult(0);
                  //数多少个 query.setMaxResults(100); //query.setParameter("abc", 1l); List<Customer> customers = query.list(); /*提交*/ txTransaction.commit(); session2.close(); sessionfactory.close(); }

      

    跨表

    public void hql_page2() {
    		 Configuration configuration = new Configuration().configure(new File("src/hibernate.cfg.xml"));
    			
    			
    			SessionFactory sessionfactory = configuration.buildSessionFactory();
    			
    			Session session2 = sessionfactory.openSession();
    			
    			Transaction txTransaction = session2.beginTransaction();
    			
    			/*取数据 customer为1的所有linkman*/
    			String hql = "from Customer c,LinkMan l where l.customer = c.cust_id and c.cust_id = :id";
    			
    			Query query = session2.createQuery(hql);
                //设置第几个开始
    			query.setParameter("id", 1l);
    			List<Object[]> objects = query.list();
    			System.out.println(objects);
    			/*提交*/
    			
    			txTransaction.commit();
    			session2.close();
    			sessionfactory.close();
    	 }
    

     排序

    public void func2() {
    		//排序
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		//!---------------------------------------------------------------------
    		String hql = " from Customer order by cust_id desc";
    		//查询object子类的对象  所有注册的对象
    		Query query = session.createQuery(hql);
    		List<Customer> list = query.list();
    		System.out.println(list);
    		
    		//!---------------------------------------------------------------------
    		tx.commit();
    		session.close();
    	}
    

      count

    public void func5() {
    		//查条数
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		//!---------------------------------------------------------------------
    		String hql = "select count(*) from Customer";
    		Query query = session.createQuery(hql);
    		//query.setParameter("id","id");
    		
    		Number count = (Number) query.uniqueResult();
    		System.out.println(count);
    		
    		//!---------------------------------------------------------------------
    		tx.commit();
    		session.close();
    	}
    

      查询所需要的值

    	public void func7() {
    		//查询所需字段的值
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		//!---------------------------------------------------------------------
    		String hql = "select cust_name,cust_id from Customer";
    		Query query = session.createQuery(hql);
    		
    		List<Object[]> list = query.list();
    		System.out.println(list);
    		
    		//!---------------------------------------------------------------------
    		tx.commit();
    		session.close();
    	}
    	
    

      封装对象

    	public void func8() {
    		//封装对象
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		//!---------------------------------------------------------------------
    		String hql = "select new Customer(cust_name,cust_id) from Customer";
    		Query query = session.createQuery(hql);
    		
    		List<Customer> list = query.list();
    		System.out.println(list);
    		
    		//!---------------------------------------------------------------------
    		tx.commit();
    		session.close();
    	}
    

      内链接

    @Test
    	public void func9() {
    		// 内连接
    			//隐式连接
    			/*
    			 *  select * from a,b where b.aid = a.id
    			 *  显示内连接
    			 * 
    			 * 
    			 * 左外
    			 * select * from A left [outer] join b on b.aid = a.id
    			 * select * from A right [outer] join b on b.aid = a.id
    			 * */
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		//----------------------------------------------------
    		String hql = " from Customer c inner join c.linkMans ";
    		
    		Query query = session.createQuery(hql);
    		
    		List<Object[]> list = query.list();
    		
    		for(Object[] arr : list){
    			System.out.println(Arrays.toString(arr));
    		}
    		//----------------------------------------------------
    		tx.commit();
    		session.close();
    		
    		
    	}
    

      迫切内连接 

    public void func10() {
    		//HQL 迫切内连接 => 帮我们进行封装.返回值就是一个对象
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		//!---------------------------------------------------------------------
    		String hql = "from Customer c inner join fetch c.linkMans";
    		Query query = session.createQuery(hql);
    		
    		List<Customer> list = query.list();
    		System.out.println(list);
    		
    		//!---------------------------------------------------------------------
    		tx.commit();
    		session.close();
    		
    		
    	}
    

      左外以及右外

    @Test
    	public void func11() {
    		/*
    			 * 左外
    			 * select * from A left [outer] join b on b.aid = a.id
    			 * select * from A right [outer] join b on b.aid = a.id
    			 * */
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		//!---------------------------------------------------------------------
    		String hql = "from Customer c left join c.linkMans";
    		String hqlString = "from Customer c right join c.linkMans";
    		//查询object子类的对象  所有注册的对象
    		Query query = session.createQuery(hqlString);
    		//query.setParameter("id","id");
    		
    		List<Object[]> list = query.list();
    		for(Object[] arr : list){
    			System.out.println(Arrays.toString(arr));
    		}
    		
    		//!---------------------------------------------------------------------
    		tx.commit();
    		session.close();
    		
    		
    	}
    

      

    Criteria查询     可用于单表条件查询       Hibernate自创的无语句面向对象查询

    查列表

    @Test
    	public void func1() {
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		//!---------------------------------------------------------------------
    		Criteria criteria = session.createCriteria(Customer.class);
    		List<Customer> list = criteria.list();
    		System.out.print(list);
    		//!---------------------------------------------------------------------
    		tx.commit();
    		session.close();
    	}

    条件

    	 public void None_Sql() {
    		 	Configuration configuration = new Configuration().configure(new File("src/hibernate.cfg.xml"));
    			
    			
    			SessionFactory sessionfactory = configuration.buildSessionFactory();
    			
    			Session session2 = sessionfactory.openSession();
    			
    			Transaction txTransaction = session2.beginTransaction();
    			
    			/*存数据*/
    			/*HQL语句中 不可能出现数据库名*/
    			Criteria criteria = session2.createCriteria(Customer.class);		
    			/*条件查询*/
    			// >  gt
    			/* >=    ge
    			 * <   lt
    			 * <=    le
    			 * ==    eq
    			 * !=    ne
    			 * in    in
    			 * between and      between
    			 * like             like
    			 * is not null      isnotnull
    			 * is null         isNull
    			 * or               or
    			 * and              and 
    			 * 
    			 * 
    			 * 
    			 * */
    			
    			//添加条件 使用Restrictions
    			criteria.add(Restrictions.eq("cust_id", 1l));
    			
    			Customer customer =(Customer) criteria.uniqueResult();
    			
    			/*提交*/
    			
    			txTransaction.commit();
    			session2.close();
    			sessionfactory.close();
    	 }
    

      分页

    @Test
    	public void func3() {
    		//分页
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		//!---------------------------------------------------------------------
    		Criteria criteria = session.createCriteria(Customer.class);
    		criteria.setFirstResult(0);
    		criteria.setMaxResults(10);
    		List<Customer> list = criteria.list();
    		System.out.print(list);
    		//!---------------------------------------------------------------------
    		tx.commit();
    		session.close();
    	}
    

      排序

    @Test
    	public void func4() {
    		//排序
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		//!---------------------------------------------------------------------
    		Criteria criteria = session.createCriteria(Customer.class);
              //排序条件 criteria.addOrder(Order.asc("cust_id")); List<Customer> list = criteria.list(); System.out.print(list); //!--------------------------------------------------------------------- tx.commit(); session.close(); }

      

    设置查询目标
    @Test
    	public void func5() {
    		//设置查询目标
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		//!---------------------------------------------------------------------
    		Criteria criteria = session.createCriteria(Customer.class);
    		criteria.setProjection(Projections.rowCount());
    		List<Customer> list = criteria.list();
    		System.out.print(list);
    		//!---------------------------------------------------------------------
    		tx.commit();
    		session.close();
    	}
    

      离线criteria

    @Test
    	public void func6() {
    		//离线criteria
    		DetachedCriteria dCriteria = DetachedCriteria.forClass(Customer.class);
    		dCriteria.add(Restrictions.idEq(6l));
    
    		//------------------------------------------------------------------------
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		//!---------------------------------------------------------------------
              //为离线传入session Criteria criteria = dCriteria.getExecutableCriteria(session); List<Customer> list = criteria.list(); System.out.print(list); //!--------------------------------------------------------------------- tx.commit(); session.close(); }

      原生sql

    public void origin_sql() {
    		 	Configuration configuration = new Configuration().configure(new File("src/hibernate.cfg.xml"));
    			
    			
    			SessionFactory sessionfactory = configuration.buildSessionFactory();
    			
    			Session session2 = sessionfactory.openSession();
    			
    			Transaction txTransaction = session2.beginTransaction();
    			
    
    			String sql = "select * from cst_customer";
    			SQLQuery query  = session2.createSQLQuery(sql);
    			//制定结果集
    			query.addEntity(Customer.class);
    			//多个
    			List<Customer> list = query.list();
    			//一个
    			query.uniqueResult();
    			
    			
    			//条件
    			
    			String sql2 = "select * from cst_customer where cust_id = ?";
    			SQLQuery query2  = session2.createSQLQuery(sql);
    			//制定结果集
    			query2.setParameter(0, 1);
    			//多个
    			//一个
    			Customer  customer = (Customer) query.uniqueResult();
    			
    			//分页
    			String sql3 = "select * from cst_customer limit ?,?";
    			SQLQuery query3  = session2.createSQLQuery(sql);
    			//制定结果集
    			query3.setParameter(0, 0);
    			query3.setParameter(1, 10);
    			//多个
    			List<Customer> list2 = query.list();
    			//一个
    			query.uniqueResult();
    			
    			/*提交*/
    			
    			txTransaction.commit();
    			session2.close();
    			sessionfactory.close();
    	 }
    

      

      

  • 相关阅读:
    在centos7下 布隆过滤器2种安装方式
    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
    redis lua --eval报错1: Lua redis() command arguments must be strings or integers
    redis+lua脚本 分布式锁初步学习
    redis中通用命令(key)和补充
    redis基本数据类型有序集合(zset)学习笔记
    redis基本数据结构集合(set)学习笔记
    大道至简读后感
    第一周
    《大道至简》读后感
  • 原文地址:https://www.cnblogs.com/hywhyme/p/11629082.html
Copyright © 2011-2022 走看看