hql02

我们用hirbate的sql来写一个dao包

很麻烦  需要优化

--测试都是一致的

 /**
     * 查询user 用户类
     */
    	public List<Tbl_user> Allfind(PageBean page,Tbl_user user){
    		Session session = Util.getSession();
    		Transaction beginTransaction = session.beginTransaction();
    		
    		String sql="from Tbl_user where 1=1";
    		
    		//这种方式好麻烦  需要优化  ...
    		if(StringUtils.isNotBlank(user.getName())) {
    			sql+=" and name like :names";
    		}
    		
    		Query query = session.createQuery(sql);
    		if(StringUtils.isNotBlank(user.getName())) {
    			query.setParameter("names", "%"+user.getName()+"%");
    		}
    		
    		if(page!=null && page.isPagination()) {
    			query.setFirstResult(page.getStartIndex());//代表第一个参数
       		    query.setMaxResults(page.getRows());//代表第二个参数*
    		}
    		
    		List list = query.list();
    		beginTransaction.commit();
    		session.close();
			return list;
    	}

优化:

通用的方法类

//给命名参数赋值
         private void setParameters(Query query,Map<String,Object> map) {
        	 if(map==null || map.size()==0) return;
        	 Object value;
        	 for (Map.Entry<String, Object> entry : map.entrySet()) {
				 value=entry.getValue();
				 if(value instanceof Collection) {
					 query.setParameterList(entry.getKey(), (Collection)value);
				 }else if(value instanceof Object[]) {
					 query.setParameterList(entry.getKey(), (Object[])value);
				 }else {
					 query.setParameter(entry.getKey(), value);
				 }
			}
         }
    /**
     * 用于查询所有记录数     page是自己定义的分页的一个类
     * @param hql
     * @return
     */
    public String  getCountHql(String hql) {
    	int index=hql.toUpperCase().indexOf("FROM");
    	return "select count(*)"+hql.substring(index);
    }
    
    protected List executeQuery(Session session,String hql,Map<String,Object> map,PageBean page) {
		if(page !=null && page.isPagination()) {
			String countHql=getCountHql(hql);
			Query countQuery = session.createQuery(countHql);
			this.setParameters(countQuery, map);
			page.setTotal(countQuery.getSingleResult().toString());
			
			Query query = session.createQuery(hql);
			this.setParameters(query, map);
			query.setFirstResult(page.getStartIndex());
			query.setMaxResults(page.getRows());
			return query.list();
		}else {
			//不分页怎么处理
			Query query = session.createQuery(hql);
			this.setParameters(query, map);
			return query.list();
		}
    }

在dao里面使用

需要继承通用的方法类就可以了

public List<Tbl_user> Allfind2(PageBean page,Tbl_user user){
    		Session session = Util.getSession();
    		Transaction beginTransaction = session.beginTransaction();
    		
    		String sql="from Tbl_user where 1=1";
    		Map<String, Object> map=new HashMap<String, Object>();
    		if(StringUtils.isNotBlank(user.getName())) {
    			sql+=" and name like :name";
    			map.put("name", "%"+user.getName()+"%");
    		}
    		
    		
			List list = super.executeQuery(session, sql, map, page);
    		
    		beginTransaction.commit();
    		session.close();
			return list;
    	}

第三种:原生态sql 就是最开始的sql

/**
    	 * 原生态的sql  直接在方法里面使用就好了
    	 */
    	public List Allfind3(PageBean page,Tbl_user user){
    		Session session = Util.getSession();
    		Transaction beginTransaction = session.beginTransaction();
    		
    		String sql="select * from tbl_user"; //重点
    		List list = session.createSQLQuery(sql).list();//重点
    		
    		beginTransaction.commit();
    		session.close();
			return list;
    	}

怎么使用:

 @Test
      public void test4() {
    	  UserDao dao=new UserDao();
    	  List allfind3 = dao.Allfind3(null, null);
    	  for (Object object : allfind3) {
			System.out.println(object);
		}
      }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值