自己总结的hql新增、删除、查询与sql的新增、删除、查询区别

原创 2016年06月01日 15:21:58

一、当保存的是Hibernate 对象的时候:

      
        /**
 
        * @功能描述 保存或者修改收文记录
        * @param main void
        */
      @SuppressWarnings("unchecked")
     public void saveOrUpdateRecive( TbDocumentReceiveMain main) {
     this.saveOrUpdate(main);
     this.flush();
      }
TbDocumentMain 类的一个对象,表示数据库中的一条记录,每次可以给类的对象赋值之后在调用</span><pre name="code" class="html">saveOrUpdate保存或者修改之后的对象

二、删除

(1)sql删除

	/**
	 * @描述:删除TB_DOCUMENT_RECEIVE_DEPT记录
	 * @param receiveDeptId
	 * void
	 * @创建人  :kj
	 */
   @SuppressWarnings("unchecked")
   public void deleteDemp(String receiveDeptId) {
		StringBuffer sql = new StringBuffer();
		sql.append("delete TB_DOCUMENT_RECEIVE_DEPT where RECIVE_MAIN_ID = ? ");
		SQLQuery query = this.createSQLQuery(sql.toString(), null, null, new Object[]{receiveDeptId});
		query.executeUpdate();
	
   }

三、查询

     (1)、当查询的记录对应的是一张表里面的数据,并且该表对应一个类的对象

       例;     

       /**
	 * 
	 * @功能描述 根据收文ID和类型查询附件
	 * @param id
	 * @return List<TbDocumentFile>
	 */
	@SuppressWarnings("unchecked")
	public List<TbDocumentFile> queryFileByDocumentid( String id,String type) {
		List<TbDocumentFile> list = this.createQuery("from TbDocumentFile where documentId = ? and type = ?", new Object[]{id,type}).list();
		return list;
	}
解释:TbDocumentFile对应数据库里面的表TB_DOCUMENT_FILE表如下图所示

List<TbDocumentFile> list = this.createQuery("from TbDocumentFile where documentId = ? and type = ?", new Object[]{id,type}).list();
这句将要查询的参数放在object数组里面,需要注意的是这里的查询语句是:"from TbDocumentFile where documentId = ? and type = ?", new Object[]{id,type})我们可以看出:
 1、from前面没有select 关键字,并且from后面跟的不是表名,<span style="font-family: Arial, Helvetica, sans-serif;">而是数据表对应的类的类名</span>
 2、where 后面跟的不是<span style="background-color: rgb(240, 240, 240);">TB_DOCUMENT_FILE中的字段DOCUMENT_ID ,而是</span></span><span style="font-family: Arial, Helvetica, sans-serif;">DOCUMENT_ID 字段对类属性:</span><span style="font-family: Arial, Helvetica, sans-serif;">documentId </span>



查询出来的记录存放在List<TbDocumentFile> list 这个list数组里面,数组里面的每一条数据元素就是一个TbDocumentFile对象即一条数据表中的一条记录

下面给大家看看查询的到的list数据:


由这张表和上面一张数据库存储的表可以看出他们的一一对应关系。

  (2)、当查询的数据不是来自一张表而是多表联查

  例:

        /**
	 * @描述:根据员工ID获取岗位类别
	 * @param empid  员工id
	 * @return  00 正所长, 01副所长 ,02 科室主任 ,03  科员
	 * String
	 * @创建人  :kj
	 */
	@SuppressWarnings("unchecked")
	public String queryPostType(String empid) {
		String postType = "03" ;
		String sql ="select e.post_type_code as code ,d.name from cen_reg.t_employee e "
				+ "left join cendic.d_dictionary_item d on d.code = e.post_type_code and d.d_code='DIC_PT_GWLB' "
				+ "where e.id = '"+empid+"'";
		List<Map<String,String>> list = this.createSQLQuery(sql, null, null, null)
				.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP)
				.list();
		if(list != null && list.size() > 0){
			String temp = list.get(0).get("CODE");
			if(StringUtils.equals(temp, "01")){
				//还需要判断正副 所长
				sql = " select id from TB_DOCUMENT_MANAGER t where t.emp_id = ? " ;
				list = this.createSQLQuery(sql, null, null, new Object[]{empid}).list();
				if(list != null && list.size() > 0){
					//正所长
					postType = "00" ;
				}else{
					//副所长
					postType = temp ;
				}
			}
			if(StringUtils.equals(temp, "02")){
				postType = temp ;
			}
		}
		return postType ;
	}

由这句sql语句可以知道:查询的数据code 来自表cen_reg.t_employee表,查询的name来自表cendic.d_dictionary_item

String sql ="select e.post_type_code as code ,d.name from cen_reg.t_employee e "
				+ "left join cendic.d_dictionary_item d on d.code = e.post_type_code and d.d_code='DIC_PT_GWLB' "
				+ "where e.id = '"+empid+"'";
这种情况调用函数createSQLQuery来获取返回值

List<Map<String,String>> list = this.createSQLQuery(sql, null, null, null)
				.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP)
				.list();

返回的list在Debug下存储结构为:



版权声明:本文为博主原创文章,未经博主允许不得转载。

Hibernate HQL查询 插入 更新(update)实例

1、实体查询: 有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子: String hql=”from User user ”; List list=session.CreateQu...
  • zhouxinhong
  • zhouxinhong
  • 2012年03月31日 14:36
  • 54353

hibernate HQL添加语句

hibernate HQL添加语句怎么写,除了save();方法,难道没有像SQL那样insert into student name ='haha';这样的添加语句吗? 最佳答案: ...
  • qq_36394738
  • qq_36394738
  • 2016年11月16日 22:14
  • 3281

Hibernate的基本操作数据库,增加,修改,删除,查询

Hibernate的基本操作数据库,增加,修改,删除,查询,session的核心方法
  • starjuly
  • starjuly
  • 2016年08月23日 23:41
  • 6569

hibernate 中的查询,添加

一、hibernate中的query的两种查询,一种是我们经常写的sql的格式,另一种是hibernate 的查询语言就是hql  1、使用我们平时写的sql的方式: (1)、 String hq...
  • QH_JAVA
  • QH_JAVA
  • 2016年09月12日 00:06
  • 1971

自己总结的hql新增、删除、查询与sql的新增、删除、查询区别

一、当保存的是Hibernate 对象的时候: /** *  * @功能描述 保存或者修改公文 */ @SuppressWarnings("unchecked") pu...
  • u012027337
  • u012027337
  • 2016年06月01日 15:21
  • 892

HQL增删改查

一  增加 getSession().save(entity) 二  删除 1 String hql = " DELETE FROM Student dm WHERE  dm.id ...
  • BluewineY
  • BluewineY
  • 2016年10月12日 09:33
  • 2374

SQL 查询、新增、修改、删除等等

尽量减少分别连接数据库次数 ,提高效率 , 有可能的话,用一个语句处理多个更新;尽量减少对同一个表的重复访问。    SQL查询简单优化:不要select * from xx        查询每个...
  • zhuyu19911016520
  • zhuyu19911016520
  • 2012年12月05日 11:19
  • 4276

Hibernate 中 HQL查询 和SQL查询的区别

今天写了点东西,用到了SQL查询,得到的是list集合,在jsp中用c标签取值,报了[Ljava.lang.Object; cannot be cast to com.plpw.Model.Yetai...
  • u011598529
  • u011598529
  • 2014年01月09日 16:02
  • 1309

Hibernate 中的hql语言的增删改查

一  增加 getSession().save(entity) 二  删除 1 String hql = " DELETE FROM Student dm WHERE  dm.id ...
  • AlinMa
  • AlinMa
  • 2016年12月13日 08:15
  • 2781

Hibernate 添加数据 一 (一对多)

Hibernate 添加数据 (一对多)
  • zl18603543572
  • zl18603543572
  • 2017年03月19日 23:48
  • 2239
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自己总结的hql新增、删除、查询与sql的新增、删除、查询区别
举报原因:
原因补充:

(最多只允许输入30个字)