现在的位置: 首页 > 综合 > 正文

hibernate 原生sql 命名查询

2013年04月08日 ⁄ 综合 ⁄ 共 1774字 ⁄ 字号 评论关闭

sql-query中必须把表所有的列写全才可以,否则会出现‘列名无效’的错误 ,除非你使用return-scalar来设置字段类型。

使用return-property来明确地指定字段/别名,但是列字段要写全,

两种配置方式:

<sql-query name="selectBlogsByContent">
		<return alias="t" class="cn.enjoylife.hibernate.bean.Blog" >
		</return>
			SELECT {t.*}
			FROM blog t
			WHERE t.content LIKE :contentPattern
	</sql-query>

<sql-query name="selectBlogsByContent">
	 	<return alias="blog" class="cn.enjoylife.hibernate.bean.Blog" >
			<return-property name="id" column="id"></return-property>
			<return-property name="title" column="title"></return-property>
			<return-property name="content" column="content"></return-property>
			<return-property name="blogAuthorId" column="blogAuthorId"></return-property>
		</return>
			SELECT t.id "id",
			t.title "title",
			t.content "content",
			t.BLOG_AUTHOR_ID "blogAuthorId"
			FROM blog t
			WHERE t.content LIKE :contentPattern
	 </sql-query>

使用return-scalar来设置字段类型,查询部分字段

<!--
	 	 原生sql 如果想查询部分字段请使用return-scalar
	  -->
	 <!-- 
	 <sql-query name="selectBlogsByContent">
	 	<return-scalar column="id" type="integer"/>
	 	<return-scalar column="title" type="string"/>
	 	<return-scalar column="content" type="string"/>
			SELECT t.id "id",
			t.title "title",
			t.content "content"
			FROM blog t
			WHERE t.content LIKE :contentPattern
	 </sql-query>

查询部分字段时,返回的结果类型为List<Object[]>类型,而上两种方式的配置中因为将字段映射到了指定bean中的属性,返回的结果为List<bean名称>。

以下是查询部分字段的测试片段:

//获取部分字段的内容, 这时query.list()列表类型为List<Object[]>。
		Query query = session.getNamedQuery("selectBlogsByContent");
		query.setString("contentPattern", "%h%");
		List<Object[]> blogs = query.list();
		for(Object[] item : blogs){
			System.out.println(item[0]);
			System.out.println(item[1]);
			System.out.println(item[2]);
		}

还是这样好,使用setResultTransformer方法将查询结果转换为vo,而查询部分字段的配置不用变,依然为以上配置

测试代码:

Query query = session.getNamedQuery("selectBlogsByContent")
			.setResultTransformer(Transformers.aliasToBean(Blog.class));
		query.setString("contentPattern", "%h%");
		List<Blog> blogs = query.list();
		System.out.println(blogs);

抱歉!评论已关闭.